Jak zamienić KML na shapefile: QGIS, ogr2ogr lub online
Aby zamienić KML na shapefile, otwórz plik KML w QGIS, kliknij warstwę prawym przyciskiem myszy, wybierz „Eksportuj” > „Zapisz obiekty jako…” i ustaw format ESRI Shapefile. W wierszu poleceń uruchom ogr2ogr -f "ESRI Shapefile" z jednym typem geometrii na plik wynikowy. Albo upuść plik .kml do konwertera „KML na SHP” w FileReshape, który działa w Twojej przeglądarce bez wysyłania pliku na serwer, rozdziela punkty, linie i poligony oraz dodaje pliki .prj i .cpg.
Co się zmienia, gdy KML staje się plikiem shapefile
KML, format Google Earth i Moich Map Google, oraz shapefile przechowują dane geograficzne w zupełnie inny sposób, a każda metoda konwersji musi poradzić sobie z tymi samymi różnicami. Jeśli znasz je z góry, wynik Cię nie zaskoczy.
Jeden typ geometrii na plik. Plik KML może mieszać punkty, linie i poligony w jednym folderze. Shapefile może przechowywać tylko jeden typ geometrii, więc mieszany KML musi stać się kilkoma plikami shapefile, po jednym na typ.
Krótkie nazwy pól. Tabela atrybutów .dbf dopuszcza nazwy pól o długości do 10 znaków, więc Description staje się Descriptio. Wartości tekstowe dłuższe niż 254 znaki, np. długie opisy w HTML, są obcinane.
Brak stylów. Kolory, grubości linii i ikony są częścią KML, ale nie pliku shapefile, więc przepadają. Jeśli wygląd ma znaczenie, musisz odtworzyć go w swoim programie GIS.
Układ współrzędnych. KML zawsze używa długości i szerokości geograficznej WGS84. Shapefile może zostać w WGS84 z plikiem .prj, który to opisuje, albo zostać przeliczony do układu takiego jak strefa UTM, jeśli potrzebujesz odległości i powierzchni w metrach. Shapefile wymaga też, aby jego części .shp, .shx i .dbf były trzymane razem, a plik .cpg informuje programy o kodowaniu tekstu.
Zamiana KML na shapefile w QGIS
QGIS jest darmowy i otwarty, a pliki KML odczytuje za pomocą GDAL. To najlepszy wybór, gdy chcesz też sprawdzić, edytować lub zmienić styl danych albo przeliczyć je do innego układu. Gdy KML ma kilka folderów lub mieszane typy geometrii, QGIS może wyświetlić okno z listą, w którym są one osobnymi warstwami; dodaj te, których potrzebujesz, i wyeksportuj każdą z nich.
W oknie „Zapisz warstwę wektorową jako…” możesz też ustawić układ współrzędnych pliku wynikowego i kodowanie. Wybierz UTF-8, aby nazwy z literami takimi jak é, ø czy ü przetrwały konwersję. Jeśli KML zawierał punkty, linie i poligony, powtórz eksport dla każdej warstwy.
- Otwórz QGIS i przeciągnij plik .kml na mapę albo wybierz „Warstwa” > „Dodaj warstwę” > „Dodaj warstwę wektorową”.
- Kliknij warstwę w panelu „Warstwy” prawym przyciskiem myszy i wybierz „Eksportuj” > „Zapisz obiekty jako…”.
- Ustaw „Format” na ESRI Shapefile, wybierz nazwę pliku i w razie potrzeby inny układ współrzędnych.
- Kliknij „OK” i sprawdź nową warstwę shapefile oraz jej tabelę atrybutów.
Zamiana KML na shapefile za pomocą ogr2ogr
ogr2ogr to konwerter wiersza poleceń z pakietu GDAL. Używaj go do dużych plików, zadań wsadowych na wielu plikach KML i w skryptach. Zacznij od ogrinfo, aby zobaczyć, jakie warstwy ma plik KML; sterowniki KML w GDAL zwykle odczytują każdy folder KML jako osobną warstwę.
Ponieważ shapefile przechowuje tylko jeden typ geometrii, zapisz każdy typ do osobnego pliku shapefile. Specjalne pole OGR_GEOMETRY w OGR SQL pozwala filtrować według typu za pomocą -where lub -sql. Opcja -nlt ustawia typ geometrii warstwy wynikowej, a -nlt PROMOTE_TO_MULTI przydaje się, gdy warstwa miesza linie lub poligony jedno- i wieloczęściowe. Jeśli pominiesz filtrowanie, shapefile dostanie typ pierwszego obiektu, a obiekty innych typów spowodują błędy.
To, czy pola ExtendedData staną się kolumnami, zależy od sterownika KML w Twojej wersji GDAL. Sterownik LIBKML je odczytuje; dostępne sterowniki sprawdzisz poleceniem ogrinfo --formats. Linki sieciowe, które wskazują na KML na serwerze internetowym, najlepiej najpierw pobrać i zapisać jako lokalny plik KML.
# Lista warstw (folderów) i ich typów geometrii
ogrinfo -so -al places.kml
# Jeden shapefile na typ geometrii
ogr2ogr -f "ESRI Shapefile" places_points.shp places.kml -where "OGR_GEOMETRY='POINT' OR OGR_GEOMETRY='MULTIPOINT'" -explodecollections -nlt POINT -lco ENCODING=UTF-8
ogr2ogr -f "ESRI Shapefile" places_lines.shp places.kml -where "OGR_GEOMETRY='LINESTRING' OR OGR_GEOMETRY='MULTILINESTRING'" -nlt PROMOTE_TO_MULTI -lco ENCODING=UTF-8
ogr2ogr -f "ESRI Shapefile" places_polygons.shp places.kml -where "OGR_GEOMETRY='POLYGON' OR OGR_GEOMETRY='MULTIPOLYGON'" -nlt PROMOTE_TO_MULTI -lco ENCODING=UTF-8
# Opcjonalnie: przeliczenie do strefy UTM 33N zamiast pozostania w WGS84
ogr2ogr -f "ESRI Shapefile" -t_srs EPSG:32633 places_utm.shp places_points.shpZamiana KML na shapefile online za pomocą FileReshape
Konwerter „KML na SHP” w FileReshape robi to samo w Twojej przeglądarce, bez instalowania oprogramowania. Używa GDAL skompilowanego dla sieci, a plik KML jest odczytywany z Twojego dysku i nie jest wysyłany na serwer, więc nadaje się do danych klientów. Wynikiem jest plik .zip z plikami .shp, .shx, .dbf, .prj i .cpg dla każdego pliku shapefile.
Konwerter sam radzi sobie z typowymi problemami. Punkty, linie i poligony są zapisywane do osobnych plików shapefile, np. Sights_points.shp i Routes_lines.shp, a każdy folder KML staje się osobnym plikiem shapefile nazwanym od folderu. Nazwy pól są skracane do 10 znaków. Domyślnie wynik zostaje w WGS84 z plikiem .prj, a Ty możesz wybrać inny układ, np. strefę UTM. Wysokości są zachowywane w postaci plików shapefile 3D. Tabela atrybutów jest zapisywana w UTF-8 z pasującym plikiem .cpg.
Poznaj jego ograniczenia. Kolory i ikony nie są przenoszone. Nazwa i opis znacznika są zachowywane, ale dodatkowe pola zapisane jako ExtendedData w KML nie są odczytywane przez przeglądarkową wersję GDAL. Linki sieciowe, które wskazują na dane w internecie, nie są otwierane; konwerter podaje, ile ich pominął. W przypadku pliku KMZ najpierw wyodrębnij KML narzędziem „KMZ na KML”. Limitem rozmiaru jest pamięć Twojej przeglądarki, a pliki do około 200 MB zwykle działają.
- Otwórz konwerter „KML na SHP” i upuść plik .kml albo kliknij, aby go wybrać.
- Opcjonalnie wybierz układ współrzędnych pliku wynikowego, np. strefę UTM.
- Kliknij „Konwertuj na Shapefile” i pobierz plik .zip z plikami shapefile, a potem rozpakuj go i dodaj pliki .shp do swojego programu GIS.
Którą metodę wybrać?
Konwertera w przeglądarce użyj do jednorazowego pliku, gdy potrzebujesz po prostu shapefile do przesłania dalej lub otwarcia w innym programie. QGIS wybierz, gdy chcesz sprawdzić wynik na mapie, edytować atrybuty, odtworzyć style albo zachować pola ExtendedData. ogr2ogr przyda się do bardzo dużych plików, konwersji wielu plików naraz i zautomatyzowanych procesów. Jeśli odbiorca akceptuje GeoPackage, rozważ ten format: nie ma limitu 10 znaków w nazwach pól i może zawierać kilka warstw w jednym pliku.
Najczęściej zadawane pytania
Dlaczego z jednego pliku KML dostaję kilka plików shapefile?
Shapefile może przechowywać tylko jeden typ geometrii. Gdy Twój KML miesza punkty, linie i poligony albo ma kilka folderów, każdy typ lub folder staje się osobnym plikiem shapefile, aby żadne dane nie przepadły.
Czy kolory i ikony z Google Earth są zachowywane?
Nie. Shapefile nie ma miejsca na style, więc kolory, grubości linii i ikony przepadają przy każdej metodzie. Nadaj warstwie styl na nowo w QGIS lub swoim programie GIS.
Czy mogę zamienić plik KMZ na shapefile?
Tak. KMZ to spakowany plik KML. QGIS i ogr2ogr zwykle odczytują go bezpośrednio. W FileReshape użyj najpierw narzędzia „KMZ na KML”, a potem zamień KML na shapefile.
Czy mój KML jest wysyłany na serwer, gdy konwertuję go online w FileReshape?
Nie. Konwersja odbywa się w Twojej przeglądarce, a plik zostaje na Twoim komputerze.
Dlaczego pole Description nazywa się Descriptio?
Format .dbf ogranicza nazwy pól w shapefile do 10 znaków, więc dłuższe nazwy są obcinane. Zmień nazwy pól przed konwersją albo użyj GeoPackage, jeśli długie nazwy są ważne.