Porównywanie, transformacja i wzbogacanie danych geoprzestrzennych
diffH to narzędzie uruchamiane w linii poleceń (CLI), stworzone w języku Python. Jego głównym zadaniem jest przetwarzanie, transformacja, porównywanie i wzbogacanie danych geoprzestrzennych zawartych w plikach tekstowych. Skrypt został zaprojektowany z myślą o pracy z polskimi układami współrzędnych PL-2000 i PL-1992.
- Zaawansowane Porównanie Plików (Tryby 1-3): Porównywanie punktów z pliku wejściowego z punktami z drugiego pliku referencyjnego na podstawie progu odległości i wzajemności (najbliżsi sąsiedzi).
- Pobieranie Wysokości dla Listy Punktów (Tryb 4): Dedykowana funkcja umożliwiająca wczytanie pliku z samymi współrzędnymi (
X,YlubID,X,Y) i automatyczne pobranie dla nich wysokości z serwisu Geoportal.gov.pl. - Generowanie Siatki i Pobieranie Wysokości (Tryb 5): Nowa funkcja, która na podstawie pliku z zakresem (wielobok) i zadanego odstępu generuje regularną siatkę heksagonalną punktów, a następnie automatycznie pobiera dla nich wysokości z Geoportalu.
- Integracja z Geoportal.gov.pl (Tryby 2-3): Pobieranie wysokości z serwisu Geoportal.gov.pl dla punktów z pliku wejściowego i dołączenie ich do wyników. Wysyłka punktów do API odbywa się w paczkach po maksymalnie 300 punktów.
- Transformacja Współrzędnych: Automatyczne przeliczanie współrzędnych z układu PL-2000 (strefy 5, 6, 7, 8 - EPSG: 2176, 2177, 2178, 2179) do układu PL-1992 (EPSG: 2180).
- Przyspieszenie GPU (CUDA): Automatyczne wykrywanie kart NVIDIA i wykorzystanie przyspieszenia CUDA do transformacji współrzędnych. Program sam przełącza się między przetwarzaniem GPU a CPU w zależności od dostępności sprzętu.
- Inteligentna Analiza Danych:
- Automatyczne wykrywanie separatora w plikach wejściowych (obsługuje średnik, przecinek, spację/tabulator).
- Automatyczne wykrywanie konwencji osi współrzędnych (
X,YvsY,X). Użytkownik może też ręcznie wskazać zamianę osi.
- Eksport rozrzedzonej siatki (Tryby 2-3): Możliwość wygenerowania reprezentatywnej, rozrzedzonej siatki punktów, które spełniają kryterium dokładności. Algorytm bazuje na heksagonalnym pokryciu zadanego obszaru.
- Obsługa plików Excel: Możliwość wczytywania plików wejściowych w formatach
.xlsi.xlsx. - Personalizowana autonumeracja: Przy wczytywaniu plików bez kolumny ID, użytkownik może podać własny prefiks dla automatycznie generowanych numerów punktów.
- Obliczanie różnic i tolerancji: Program oblicza różnice wysokości (
diff_h,diff_h_geoportal) i pozwala użytkownikowi zdefiniować progi tolerancji, oznaczając punkty jakoTak/Niew kolumnieosiaga_dokladnosc. - Czyste Pliki Wynikowe: Generuje przejrzyste, tabelaryczne pliki CSV oraz gotowe do analizy przestrzennej pliki GeoPackage (GPKG), które można otworzyć bezpośrednio w QGIS.
Aby uruchomić skrypt, potrzebujesz:
- Python 3 (rekomendowana wersja 3.8 lub nowsza).
- Kilka bibliotek, które należy zainstalować.
- Opcjonalnie: Karta graficzna NVIDIA z obsługą CUDA dla przyspieszenia GPU (automatycznie wykrywane).
Kroki instalacji:
-
Pobierz skrypt i umieść go w wybranym folderze.
-
Utwórz plik
requirements.txtw tym samym folderze i wklej do niego poniższą zawartość:colorama>=0.4.6 geopandas>=0.13.0 pandas>=2.0.0 pyproj>=3.5.0 requests>=2.31.0 scipy>=1.11.0 openpyxl>=3.0.0 tqdm>=4.60.0 numpy>=1.24.0 matplotlib>=3.7.0 # CUDA dependencies for GPU acceleration (opcjonalne) cupy-cuda12x>=12.0.0; sys_platform != "win32" cupy-cuda11x>=11.0.0; sys_platform == "win32" -
Otwórz terminal (wiersz poleceń) w tym folderze.
-
(Zalecane) Stwórz i aktywuj środowisko wirtualne:
# Utworzenie środowiska o nazwie .venv python -m venv .venv # Aktywacja środowiska (Windows) .\.venv\Scripts\activate # Aktywacja środowiska (Linux/macOS) source .venv/bin/activate
-
Zainstaluj wymagane biblioteki:
pip install -r requirements.txt
Po wykonaniu tych kroków środowisko jest gotowe do pracy.
- Upewnij się, że Twoje środowisko wirtualne jest aktywne (jeśli je utworzyłeś).
- Uruchom skrypt za pomocą polecenia:
python main.py
- Postępuj zgodnie z instrukcjami na ekranie:
- Wybierz tryb działania (1-5).
- Podaj ścieżki do plików oraz inne parametry zgodnie z monitami.
- Po zakończeniu pracy, w folderze ze skryptem zostaną utworzone pliki wynikowe.
- Obsługiwane formaty:
.txt,.csv,.xls,.xlsx. - Separator kolumn: Wykrywany automatycznie (średnik, przecinek, spacja/tabulator).
- Układ współrzędnych: Program oczekuje współrzędnych w układzie PL-2000. Konwencja osi (
X,YvsY,X) jest wykrywana automatycznie, ale użytkownik może ją nadpisać.
Plik zawiera punkty z wysokością.
- 4 kolumny:
numer_punktu,współrzędna_X,współrzędna_Y,wysokość_H. - 3 kolumny:
współrzędna_X,współrzędna_Y,wysokość_H(program poprosi o prefiks do autonumeracji). Przykład:
1001;5958143.50;7466893.08;137.90
1002;5955909.72;7466350.05;138.82Plik zawiera listę punktów bez wysokości.
- 3 kolumny:
numer_punktu,współrzędna_X,współrzędna_Y. - 2 kolumny:
współrzędna_X,współrzędna_Y(program poprosi o prefiks do autonumeracji). Przykład:
P1;5958143.50;7466893.08
P2;5955909.72;7466350.05Plik zawiera wierzchołki wieloboku definiującego obszar.
- 3 kolumny:
numer_wierzchołka,współrzędna_X,współrzędna_Y. - 2 kolumny:
współrzędna_X,współrzędna_Y. Przykład:
W1;5958143.50;7466893.08
W2;5955909.72;7466350.05
W3;5955900.00;7466900.00- Nazwy plików (tryby 1-3):
wynik.csv,wynik.gpkg(wszystkie wyniki)wynik_dokladne.csv,wynik_dokladne.gpkg(punkty spełniające tolerancję)wynik_niedokladne.csv,wynik_niedokladne.gpkg(punkty niespełniające tolerancji)
- Nazwy plików (tryb 4):
wynik_geoportal.csvwynik_geoportal.gpkg
- Nazwy plików (tryb 5):
wynik_siatka_geoportal.csvwynik_siatka_geoportal.gpkg
- Opcjonalnie (tryby 2-3):
wynik_siatka.csv,wynik_siatka.gpkg - Separator w plikach CSV to średnik (
;). - Brakujące dane są oznaczane jako
brak_danych. - Możliwe kolumny w plikach wynikowych:
id_odniesienia,x_odniesienia,y_odniesienia,h_odniesienia: Dane z pliku wejściowego.h_geoportal/geoportal_h: Wysokość pobrana z serwisu Geoportal.gov.pl.diff_h_geoportal: Różnica wysokości (plik wejściowy - geoportal).id_porownania,x_porownania,y_porownania,h_porownania: Dane dopasowanego punktu z pliku porównawczego.diff_h: Różnica wysokości (plik wejściowy - plik porównawczy).odleglosc_pary: Odległość w metrach między sparowanymi punktami.osiaga_dokladnosc: Informacja (Tak/Nie), czy punkt mieści się w zadanej tolerancji.
- Uruchomienie programu
- Uruchom skrypt poleceniem:
python main.py
- Uruchom skrypt poleceniem:
- Wybór trybu działania
- Program wyświetli menu z pięcioma trybami:
- Porównanie pliku wejściowego z drugim plikiem.
- Porównanie pliku wejściowego z danymi z Geoportal.gov.pl.
- Porównanie pliku wejściowego z drugim plikiem ORAZ z Geoportal.gov.pl.
- Pobranie wysokości z Geoportal.gov.pl dla pliku z punktami (XY).
- Nowość: Wygenerowanie siatki punktów w zadanym zakresie i pobranie dla nich wysokości.
- Wybierz odpowiednią opcję wpisując 1, 2, 3, 4 lub 5.
- Program wyświetli menu z pięcioma trybami:
- Podanie parametrów
- W zależności od wybranego trybu, program poprosi o:
- Ścieżkę do pliku wejściowego (i opcjonalnie porównawczego lub z zakresem).
- Informację o ewentualnej zamianie kolumn (Y,X zamiast X,Y).
- Parametry porównania (maksymalna odległość, tolerancja wysokości).
- Parametry generowania siatki (odstęp między punktami, prefiks numeracji).
- Parametry eksportu rozrzedzonej siatki (dla trybów 2 i 3).
- Liczbę miejsc po przecinku dla danych wynikowych.
- W zależności od wybranego trybu, program poprosi o:
- Wczytywanie i analiza danych
- Program automatycznie wykryje separator, strukturę pliku i sprawdzi, czy dane są numeryczne.
- W razie potrzeby doda automatyczną numerację punktów.
- Transformacja i pobieranie danych
- Współrzędne są transformowane do układu EPSG:2180.
- Jeśli wybrano tryb z Geoportalem, dane są wysyłane do API w paczkach po 300 punktów.
- Porównanie i obliczenia (tryby 1-3)
- Program buduje indeks przestrzenny, paruje punkty i oblicza różnice wysokości.
- Ustalane jest, czy punkty spełniają zdefiniowane przez użytkownika kryteria dokładności.
- Eksport wyników
- Tworzone są pliki CSV oraz GeoPackage (GPKG) z wynikami, gotowe do dalszej analizy w programach biurowych lub GIS.
Na samej górze skryptu (src/config/settings.py) znajduje się flaga DEBUG_MODE. Ustawienie jej na True włączy wyświetlanie szczegółowych komunikatów diagnostycznych, które mogą być pomocne przy rozwiązywaniu problemów.
Masz pytania lub napotkałeś problem?
Napisz na issues lub sprawdź changelog, aby zobaczyć historię zmian.