Zakres merytoryczny II i III etapu Konkursu

W drugim i trzecim etapie konkursu sprawdzona zostanie podstawowa wiedza i umiejętności z zakresu programowania oraz tworzenia baz danych (zgodnie z podstawą programową informatyki w szkole średniej), a także w zakresie wykorzystania technologii dostępu i przetwarzania danych geoprzestrzennych w środowisku Google (wymaga dodatkowej nauki).

Materiały niezbędne do przygotowania się zostały udostępnione na stronie internetowej Konkursu oraz portalu Facebook. Ponadto osoby, które zakwalifikują się do wzięcia udziału w drugim etapie Konkursu otrzymają bezpłatny dostęp do środowiska Google, pozwalającego na tworzenie aplikacji geoinformacyjnych i przygotowanie się uczniów do Etapu Centralnego i Finału Konkursu.
Od uczestników Etapu Centralnego i Finału Konkursu wymagana jest znajomość języka elementów języka Python i QGIS:

Poniżej znajdują się przykładowe pytania i zadania, które mogą pojawić się w trakcie tych etapów.
 
Zadania teoretyczne:

  1. Podaj (lub wybierz właściwą z listy podanych)definicję pojęcia …………………………. (lista podstawowych pojęć udostępniona w materiałach na stronie internetowej konkursu).
  2. Opisz procedurę (lub wybierz właściwą z listy podanych)1 wykonania mapy internetowej z lokalizacją wybranych obiektów (np. sklepów, stacji benzynowych, bankomatów) w środowisku Google Maps.
  3. Wymień (lub wybierz właściwe z listy podanych)1  jakie elementy interfejsu map Google można zmieniać poprzez API Google Maps.
  4. Podaj (lub wybierz właściwe z listy podanych)1 sposób wykorzystania chmury Google w procesie tworzenia map internetowych.
  5. Wymień (lub wybierz właściwe z listy podanych)1 produkty geoinformacyjne i technologie geoinformatyczne.
  6. Wymień (lub wybierz właściwy z listy podanych)1 zakres informacji przedstawianych obecnie na mapach Google.
  7. Wymień (lub wybierz właściwe z listy podanych)1 otwarte bazy danych przestrzennych (mapy tworzone przez społeczności internetowe).
  8. Opisz (lub wybierz właściwy opis z listy podanych)1  podstawową funkcjonalność API Google pozwalającą na tworzenie map internetowych.
  9. Opisz (lub wybierz właściwy opis z listy podanych)1 na czym polega geokodowanie z użyciem technologii Google Maps.
  10. Podaj różnice (lub wybierz z listy podanych)1  pomiędzy Google Maps i Google Earth.
  11. Wymień (lub wybierz właściwe z listy podanych)1 technologie jakie wykorzystuje się obecnie w nawigacji.
  12. Przeanalizuj podany kod i podaj wynik jego działania.
  13. Przeanalizuj podaną strukturę relacyjnej bazy danych (w MS Access) i wymień występujące w niej błędy.
  14. Przeanalizuj podane polecenie w języku SQL (w MS Access) i wymień występujące w nim błędy.

 Zadania teoretyczne Quantum GIS i Python

  1. Jak nazywa się wbudowana w QGIS konsola Pythona i w jaki sposób można ją uruchomić z głównego interfejsu programu?
  2. Która klasa PyQGIS odpowiada za dodawanie i zarządzanie warstwami w bieżącym projekcie QGIS?
  3. Podaj przykład jednego polecenia w konsoli PyQGIS, które zwróci liczbę obiektów (features) w aktywnej warstwie wektorowej.
  4. Do czego służy obiekt QgsCoordinateTransform i jakich trzech podstawowych informacji potrzebujesz, aby go poprawnie utworzyć?
  5. W jaki sposób programowo (Python) zapisać aktualny projekt QGIS do pliku .qgz pod nową nazwą?
  6. Co oznacza skrót API w kontekście PyQGIS i dlaczego znajomość dokumentacji API jest kluczowa przy tworzeniu skryptów?
  7. Napisz krótką funkcję PyQGIS, która iteruje po wszystkich warstwach rastrowych w projekcie i wyświetla ich ścieżki plikowe.
  8. Jak dodać do paska narzędzi QGIS własne narzędzie (ikonę) wywołujące skrypt Pythona? Wymień przynajmniej dwa kroki.
  9. Która klasa reprezentuje pojedynczy obiekt (feature) w warstwie i jak pobrać jego geometrię?
  10. Wyjaśnij różnicę między użyciem PyQGIS w konsoli a tworzeniem pełnoprawnej wtyczki (pluginu).
  11. Jak w PyQGIS pobrać wartość atrybutu o nazwie "population" dla pierwszego obiektu w warstwie cities?
  12. Dlaczego warto korzystać z menedżera wirtualnego środowiska (np. venv) przy rozwijaniu większych wtyczek QGIS w Pythonie?
  13. Opisz, jak można zaprogramować w PyQGIS automatyczne przeprowadzenie analizy bufora (buffer) dla wszystkich warstw punktowych w projekcie.
  14. W którym pliku w strukturze wtyczki QGIS definiuje się metadane (np. nazwę, opis, autora) i w jakim formacie ten plik jest zapisany?
  15. Jak w skrypcie PyQGIS ustawić skalę mapy wyświetlanej w głównym oknie QGIS na 1 : 25 000?

Zadania praktyczne:

  1. Utwórz w środowisku MS Access bazę danych o wybranych obiektach, tak aby można je było zaprezentować w postaci punktów na mapach Google.
  2. Utwórz w środowisku MS Access bazę danych o wybranych obiektach, tak aby można było stwierdzić ich przynależność do jednostek administracyjnych (gmin, powiatów, województw) lub miejscowości lub ich zasięg oddziaływania.
  3. Napisz polecenie SQL (w systemie zarządzania bazą danych MS Access) wyszukujące wybrane obiekty (np. sklepy, restauracje, stacje benzynowe) zlokalizowane na terenie wybranej jednostki administracyjnej (tego typu zadanie wymaga umiejętności łączenia danych z kilku tabel) lub oddziałujące na wybrane jednostki administracyjne.
  4. Stwórz bazę danych o jednostkach administracyjnych (gminach, powiatach, województwach) w sposób umożliwiający odczytanie ich wzajemnych zależności (hierarchia jednostek administracyjnych).
  5. Napisz fragment kodu programu w wybranym2 środowisku programistycznym, który przelicza współrzędne geograficzne wyrażone w stopniach, minutach i sekundach na stopnie dziesiętne lub odwrotnie.
  6. Napisz fragment kodu programu w wybranym2 środowisku programistycznym, który pobiera z pliku tekstowego współrzędne obiektów oraz wykonuję na nich podaną operację matematyczną.
  7. Napisz fragment kodu programu w wybranym2 środowisku programistycznym, który pobiera z pliku tekstowego współrzędne obiektów oraz wykonuje ich transformację do nowego układu współrzędnych. Definicja funkcji przeliczającej współrzędne będzie podana. Należy założyć, że funkcja ta jest dostępna w oddzielnej bibliotece programistycznej.
  8. Napisz fragment kodu programu rysującego linię łamaną na ekranie w wybranym2 środowisku programistycznym.
  9. Napisz fragment kodu programu rysującego wielokąt na ekranie w wybranym2 środowisku programistycznym.
  10. Przygotuj mapę internetową z lokalizacją wybranych obiektów (np. sklepów, stacji benzynowych, bankomatów) w środowisku Google Maps.
  11. Na podstawie dostępnej mapy wykonanej w środowisku Google Maps wykonaj zmianę jej sposobu wizualizacji.
  12. Skonfiguruj interfejs obsługi mapy internetowej przygotowanej w środowisku Google Maps według podanych zaleceń.

 Zadania praktyczne Quantum GIS i Python (przykłady)

# Zakres umiejętności Treść zadania Kryterium zaliczenia
1 Import danych Zaimportuj do QGIS dowolny plik wektorowy (SHP/GPKG/GeoJSON). Nadaj mu symbol jednolity z cienką obwiednią. Warstwa widoczna w legendzie, poprawny styl.
2 Zmiana układu współrzędnych Przestaw układ współrzędnych projektu na EPSG:3857 i zapisz projekt pod nową nazwą. Plik projektu ma CRS = 3857.
3 Selekcja atrybutowa Wczytaj warstwę z obiektami zawierającą pole liczbowe (np. populację). Zaznacz obiekty spełniające warunek wartość > średnia. Zapisz zaznaczenie jako osobny plik. Nowa warstwa zawiera tylko spełniające warunek obiekty.
4 Klasyfikacja tematyczna Utwórz choropletyczną kartogramę pięcioma klasami (Natural Breaks) dla wskaźnika policzonego jako iloraz dwóch atrybutów. Dodaj legendę na układzie mapy. Legenda pokazuje 5 klas z prawidłowymi zakresami.
5 Operacja Clip Przytnij liniową lub punktową warstwę tematyczną do zasięgu wybranej warstwy poligonowej (np. granic administracyjnych). Zapisz wynik jako GPKG. Wynik zawiera obiekty tylko wewnątrz poligonu maski.
6 Join tabelaryczny Do warstwy poligonowej dołącz tabelę CSV (klucz wspólny = identyfikator). Zweryfikuj, że nowo dodana kolumna pojawiła się w atrybutach. Atrybuty warstwy pokazują wartości z CSV.
7 Bufor + analiza pola Wygeneruj bufor o określonej odległości (np. 1 km) wokół wybranej warstwy liniowej lub punktowej. Dodaj pole powierzchni bufora w km² i policz łączną sumę powierzchni. Polearea_km2w tabeli + poprawna suma.
8 Raster → wektor Wczytaj model wysokości (DEM). Wygeneruj warstwę poziomic co ustalony interwał (np. 100 m). Linia poziomic z atrybutem wysokości.
9 Analiza widoczności Wykonaj mapę widoczności (viewshed) dla wybranego punktu na rastrze DEM z podanym maks. zasięgiem. Raster wynikowy z kodowaniem widoczny/niewidoczny.
10 Geokodowanie adresów Zgeokoduj listę co najmniej 20 adresów dostarczoną w pliku CSV, wykorzystując dowolny moduł lub wtyczkę. Zapisz wynik do formatu GPKG. Punkty pojawiają się w logice zgodnej z adresami.
11 Zapytanie przestrzenne Znajdź wszystkie obiekty z jednej warstwy leżące w odległości ≤ x m od obiektów z innej warstwy (np. szkoły w buforze komunikacji). Zapisz wynik do nowego pliku. Nowa warstwa zawiera tylko obiekty spełniające relację.
12 Modeler graficzny Zbuduj workflow: 1) bufor wybranej warstwy → 2) przecięcie z warstwą maski → 3) dodanie pola z powierzchnią. Uruchom model i zapisz go. Plik.model3+ warstwa wynikowa zgodna z logiką.
13 Automatyzacja PyQGIS Napisz skrypt w konsoli Python, który eksportuje wszystkie aktualnie widoczne warstwy do osobnych plików GeoPackage nazwanych jak warstwy. Pliki wygenerowane bez błędów, poprawna zawartość.
14 Atlas w Layouterze Stwórz atlas PDF, w którym każda strona przedstawia inny obiekt z warstwy poligonowej (np. jednostkę administracyjną) w skali automatycznej i zawiera tabelkę z wybranymi danymi statystycznymi. Wielostronicowy PDF z poprawnie działającym atlasem.
15 Publikacja webowa Wyeksportuj interaktywną mapę z aktualnego projektu do formatu web (np. Leaflet/Mapbox) przy pomocy wtyczki lub natywnego narzędzia. Upewnij się, że legenda i panel wyszukiwania są aktywne. Folder z plikami web,index.htmluruchamia mapę lokalnie.

1 Podczas I i II etapu mogą być podawane zarówno pytania otwarte jak i zamknięte.

2 Wybrane środowisko programistyczne:

  • Windows + Access + Libre Office + IDE dla  języków: Pascal, C/C++, Java
  • Linux (np. Ubuntu) + Libre Office  + IDE dla języków: Pascal, C/C++, Java