Konwertujesz KML do pliku kształtu bez utraty atrybutów za pomocą QGIS?

29

Mam plik KML z setkami punktów. Do każdego punktu znajdują się informacje, takie jak nazwa, moc, wiek (jest to mapa elektrowni wodnych). Jeśli zaimportuję ten plik KML do QGIS, informacje te zostaną utracone.

Czy istnieje sposób na zachowanie tych informacji?

Informacje wyglądają następująco:

<ExtendedData>
 <SchemaData schemaUrl="#vorlage">
  <SimpleData name="Name">Test</SimpleData>
  <SimpleData name="Power">10895</SimpleData>
  <SimpleData name="Location">L</SimpleData>
 </SchemaData>
</ExtendedData>

Czy coś jest nie tak z moim kodem?

Felix
źródło
1
Jak importujesz .kmldo QGIS? Ten format jest obsługiwany jako jeden z podstawowych formatów, więc dodanie kmlpliku jako warstwy powinno być względnie bezbolesne . Jeśli podasz więcej szczegółów, ktoś może pomóc ci dowiedzieć się, co się dzieje. Przydatne mogą być również informacje o źródle pliku.
Get Spatial
1
czy masz link na żywo do kml?
Mapperz
Myślę, że byłoby to możliwe za pośrednictwem FME, lub jeśli czujesz się trochę przygód, możesz napisać skrypt Pythona, który przeanalizuje kml (xml!) I wyeksportuje do pliku kształtu. (biblioteki do użycia: biblioteka plików
shapefile w
2
RK tak, widziałem to. Chociaż postanowiłem zadać nowe pytanie z lepszym opisem problemu, ponieważ nie ma zadowalającego rozwiązania. Również po innym kręgu spróbować ten problem może być, że mokradeł pliki KML KML nie są ważne przy badaniu internetowym KML walidator i pochodzą z wielu błędów ...
Miro
1
U2ros Próbowałem online FME bez powodzenia. Może na pulpicie FME, mogę spróbować w następnej rundzie instalacji ... Zdecydowanie nie czuję się wystarczająco ryzykowny, aby zaprogramować skrypt, który przekonwertuje kml na shp :-). Ale w najgorszym przypadku mogę sobie wyobrazić pisanie skryptu, który przejdzie przez KML, znajdę „ExtendedData” dla każdej funkcji i utworzę tabelę / csv, do której mogę dołączyć poprzez „nazwę”, aby przekonwertować KML w QGIS / ArcGIS / Mapinfo ...
Miro

Odpowiedzi:

15

ExtendedData nie ma poprawnych wartości „name”.

Na przykład

<Data><displayName>System</displayName><value>Riverine</value></Data>

nie jest importowany przez GDAL i Qgis Master, natomiast

<Data name="System"><displayName>System</displayName><value>Riverine</value></Data>

zostanie zaimportowany.

Możesz to zmienić za pomocą dobrego edytora tekstu.

------------------- Dodane przez Miro ---------------------

Do edycji KML konieczne jest użycie edytora tekstu, który umożliwia „Wyrażenie regularne” w funkcji Zamień, takiej jak PSPad (lub Notepad ++ i wiele innych darmowych edytorów tekstu)

Odnaleźć: <Data><displayName>(.*)</displayName>

Zastąpić: <Data name="$1"><displayName>$1</displayName>

Następnie wystarczy użyć QGIS (kluczem jest „nowa” wersja - w tym GDAL wersja 1.9.2 i nowsze) i „Dodaj warstwę wektorową”, a warstwa załaduje się ze wszystkimi „ExtendedData”.

AndreJ
źródło
Dziękuję, to była KLUCZOWA informacja. Próbowałem zastąpić go w jednym pliku testowym i działało idealnie. Wszystkie „ExtendedData” są teraz w tabeli jako kolumny. Jeszcze raz bardzo dziękuję.
Miro,
3
Właściwie DisplayName nie jest używany przez Qgis. Tak więc zamiana może odbywać się bez RegExp poprzez zamianę <Data> <DisplayName> na <Data name = "i zastąpienie </DisplayName> przez">.
AndreJ
1
Mój plik KML zawierał także tag <SchemaData>, który musiałem skomentować, aby otworzyć go w QGIS. Ale poza tym sztuczka działała idealnie!
Djana
8

Przekształciłem jeden z mokradeł za pomocą Globalmappera w kształt: w załączeniu dwa zrzuty ekranu z przekonwertowanych plików dbf (obszary i linie): wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

mam nadzieję, że tego właśnie chcesz ..

Kurt
źródło
Dziękuję, tak właśnie tego potrzebuję. Dobrze wiedzieć, że istnieje oprogramowanie, które obsługuje te KML, które nie są zgodne ze standardem KML. Ponieważ jest już inna odpowiedź, jak to zrobić za pomocą darmowego QGIS, nie zamierzam wypróbować Global Mappera, ale zdecydowanie może pomóc komuś innemu. Jeszcze raz dziękuję.
Miro,
Naprawdę fantastyczny konwerter, super !!
SIslam
6

Możesz użyć oprogramowania Global Mapper, w którym możesz łatwo eksportować / importować pliki kml / kmz + dołączać dane i wiele formatów wektorowych i rastrowych. To jedno z najlepszych programów ..

http://www.bluemarblegeo.com/global-mapper/product/formats.php

Sunil
źródło
Dziękuję za wskazówkę. Wierzę, że może importować / eksportować pliki kml / kmz, ale wypróbowałem już ponad 5 aplikacji, które mogą to zrobić. I żaden z nich nie jest w stanie odczytać atrybutów („ExtendedData”). Czy faktycznie Global Mapper może to zrobić?
Miro,
5

Wygląda na to, że libkml Google'a nie jest dostarczany z GDAL 1.9.2 na Ubuntu, a konkretnie gdal-bin 1.9.2-2 ~ precision4:

$ ogrinfo --formats | grep -i kml
  -> "KML" (read/write)

Aby uzyskać wersję działającą z libkml i ExtendedDataobsługą, musiałem zbudować GDAL z pnia svn (r25473) po zbudowaniu libkml z pnia svn (r864), zwracając uwagę, że wersja 1.2.0 najwyraźniej nie jest wystarczająca, jak udokumentowano na stronie GDAL . Uwaga: instalacja libkml0na Ubuntu precyzyjnie (obecnie 1.2.0-1ubuntu6) nie pomoże. Naprawdę potrzebujesz pnia 1.3 lub svn, dla którego nie udało mi się znaleźć PPA.

Ostatecznie nie byłem w stanie nawet zbudować libkml na Ubuntu. występują błędy typu w wersji boost, która jest z nim dostarczana, i są błędy podczas uruchamiania libtool, ponieważ zależności są nieczynne. Z jakiegoś powodu nie były to problemy na ściśnięciu Debiana, gdzie mi się udało:

$ ogrinfo --formats | grep -i kml
  -> "LIBKML" (read/write)
  -> "KML" (read/write)

Kiedy już to zacząłem, bieganie ogr2ogr -f "ESRI Shapefile" foo.shp foo.kmldał mi plik kształtu, który qgis mógł importować, zachowując ExtendedDataatrybuty.

HorsePunchKid
źródło
5

Sterownik km2 Ogr2ogr używany przez Qgis 1.8.0 Lisboa nie obsługuje znaczników kmD ExtendedData.

Sterownik LIBKML działa, jest on włączony w GDAL od wersji 1.9.2, pakiety OSGEO4W, MS4W i Qgis Master.

Twoje dane nie są nieprawidłowe, ale sterownik LIBKML w OSGeo4W miał pewne problemy ze SchemaData. Alternatywnie, następujące prace:

<ExtendedData>
 <Data name="Name"><value>Test</value></Data> 
 <Data name="Power"><value>10895</value></Data>
 <Data name="Location"><value>L</value></Data> 
</ExtendedData>

EDYCJA: Błąd SchemaData został teraz naprawiony w pakiecie GGEAL 1.9.2-2 OSGEO4W.

AndreJ
źródło
4

Korzystanie z FME 2012 (SP4)

Załaduj KML Reader

Wybierz Writer (Shapefile)

połącz elementy i wybierz opcję zapisu ( skopiuj atrybuty z typów obiektów )

Uruchom obszar roboczy

wprowadź opis zdjęcia tutaj

Mapperz
źródło
Dziękuję, pobrałem plik fme_install.msi, ale wystąpił błąd w instalacji, a ponieważ istnieje już inne działające rozwiązanie tego pytania, nie zamierzam kontynuować w ten sposób. W każdym razie dziękuję jeszcze raz.
Miro,
1

Nie wiem, czy możesz to osiągnąć dzięki QGIS. MapWindow ma jednak wtyczkę KML2Shapefile .

KML2Shapefile to wtyczka do MapWindow GIS, która konwertuje pliki KML i KMZ Google Earth na pliki kształtów do użytku w GIS.

KML2Shapefile podzieli każdy typ geometrii KML na osobny plik kształtu. Obsługuje złożone geometrie i jest w stanie przedstawić dużą część KML jako dane atrybutów.

MapWindow jest także darmowym pakietem GIS typu open source. Możesz pobrać i zainstalować za darmo. Możesz przekonwertować KML na plik kształtu za pomocą wtyczki KML2Shapefile w MapWindow i po prostu załadować wynikowy plik kształtu w QGIS. Zakładając, że i tak korzystasz z systemu Windows.

Najlepsze rozwiązanie, jakie mogę teraz wymyślić. Mam jednak nadzieję, że ktoś wie o wtyczce do zrobienia tego w QGIS.

RK
źródło
1
Dzięki za pomoc. Próbowałem tego, ale nadal dane zostały utracone. Informacje wyglądają następująco: <ExtendedData> <SchemaData schemaUrl = "# vorlage"> <SimpleData name = "Name"> Test </SimpleData> <SimpleData name = „Power”> 10895 </SimpleData> <SimpleData name = "Location"> L </SimpleData> </SchemaData> </ExtendedData> czy coś jest nie tak z moim kodem?
Felix
Oh przepraszam za to. Miałem nadzieję, że to zadziała.
RK
1
@ Felix - Informacje podane w komentarzu są bardzo przydatne. Poleciłbym edytować twoje pytanie i dodać je tam, aby uzyskać dodatkowy kontekst i przejrzystość.
Uzyskaj Spatial
@AndreJoost - Wygląda na to, że masz dobrą odpowiedź. Warto dodać ją jako rzeczywistą odpowiedź, aby pojawiła się w wynikach wyszukiwania każdego, kto ma ten sam problem.
Uzyskaj Spatial
1

Pobierz Global Mapper, wystarczy przynieść KMZ lub KML, a następnie wyeksportować Vector IMG (plik ESRI SHP). Globalny program mapujący może odczytać większość typów plików. Następnie otwórz kształt w ARC, Global mapper, Manifold, QGIS, ect i przejrzyj tabelę atrybutów. Wszystkie informacje będą tam. w tym momencie możesz również otworzyć plik DBF z SHP za pomocą Microsoft Excel, a następnie zapisać jako rozszerzenie pliku XLXS, jeśli chcesz.

Ron Paul
źródło
1

W QGIS 3.2.0 konwersję można łatwo wykonać przy użyciu Zestawu narzędzi.

Wybierz w Przyborniku -> GDAL -> Konwersja wektorowa -> Konwertuj format .... (Caja de Herramientas de Procesos -> GDAL -> Conversión Vectorial -> Convertir Formato)

Wybierz plik KML, zapisz jako plik SHP. Musiałem także zmienić plik resulktingowy („Przekształcone”) we Właściwościach -> Źródło (Tab) -> Kodowanie źródłowe z „UTF-8” na „Windows-1258”, aby poprawnie zobaczyć hiszpańskie znaki.

Andres Bodini
źródło