Преобразование KML в шейп-файл без потери атрибутов с использованием QGIS?

29

У меня есть файл KML с сотнями точек. Для каждой точки есть информация, такая как Имя, Мощность, Возраст (это карта гидроэнергетических установок). Если я импортирую этот файл KML в QGIS, эта информация будет потеряна.

Есть ли способ сохранить эту информацию?

Информация выглядит так:

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

Что-то не так с моим кодом?

Феликс
источник
1
Как вы импортируете .kmlв QGIS? Этот формат поддерживается как один из основных форматов, поэтому добавление kmlфайла в качестве слоя должно быть относительно безболезненным . Если вы предоставите более подробную информацию, кто-то может помочь выяснить, что происходит не так. Также может быть полезна информация об источнике файла.
Получите Пространство
1
у вас есть прямая ссылка на кмл?
Mapperz
Я думаю, что это было бы возможно через FME, или, если вы чувствуете небольшое приключение, вы можете написать скрипт на python, который будет анализировать kml (xml!) И экспортироваться в шейп-файл. (библиотеки для использования: библиотека шейп-файлов python, любой XML из python)
U2ros
2
Р.К. Да, я видел это. Хотя я решил задать новый вопрос с лучшим описанием проблемы, потому что нет удовлетворительного решения. Также после очередного круга попыток проблема может заключаться в том, что файлы KML водно-болотных угодий не являются действительными KML при тестировании в онлайн-валидаторе KML и содержат много ошибок ...
Miro
1
U2ros Я пробовал онлайн FME без успеха. Может быть, настольный FME, я могу попробовать его в следующем "раунде установки" ... Я определенно не чувствую себя достаточно смелым, чтобы программировать скрипт, который преобразует kml в shp :-). Но в худшем случае я могу представить написание сценария, который будет проходить через KML, найти «ExtendedData» для каждой функции и создать таблицу / CSV, к которой я могу присоединиться через «имя» для преобразования KML в QGIS / ArcGIS / Mapinfo ...
Miro

Ответы:

15

ExtendedData не имеет правильных значений «name».

Например

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

не импортируется GDAL и Qgis Master, в то время как

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

импортируется.

Вы можете изменить это с помощью хорошего текстового редактора.

------------------- Добавлено Miro ---------------------

Для редактирования KML необходимо использовать текстовый редактор, который позволяет использовать «Regular Expression» в функции Replace, такой как PSPad (или Notepad ++ и многие другие бесплатные текстовые редакторы).

Найти: <Data><displayName>(.*)</displayName>

Заменить: <Data name="$1"><displayName>$1</displayName>

После этого просто используйте QGIS (ключ «новая» версия - включая GDAL версии 1.9.2 и далее) и «Добавить векторный слой», и слой загрузится со всеми «ExtendedData».

Andrej
источник
Спасибо, это была КЛЮЧЕВАЯ информация. Я попытался заменить его в одном тестовом файле, и он работал отлично. Все «ExtendedData» теперь в таблице в виде столбцов. Еще раз большое спасибо.
Миро
3
На самом деле, DisplayName не используется Qgis. Таким образом, замена может быть выполнена без RegExp, заменив <Data> <DisplayName> на <Data name = "и заменив </ DisplayName> на">.
AndreJ
1
Мой файл KML также содержал тег <SchemaData>, который я должен был комментировать, чтобы открыть его в QGIS. Но в остальном трюк сработал отлично!
Джана
8

Я преобразовал один из влажных файлов с помощью globalmapper в форму: приложил два скриншота из преобразованных dbf-файлов (областей и линий): введите описание изображения здесь

введите описание изображения здесь

надеюсь, это то, что вы хотите ..

Kurt
источник
Спасибо, да, это именно то, что мне нужно. Полезно знать, что есть программное обеспечение, которое может обрабатывать эти KML, которые не соответствуют стандарту KML. Поскольку уже есть другой ответ, как сделать это с помощью бесплатной QGIS, я не собираюсь пробовать Global Mapper, но он определенно может помочь кому-то еще. Еще раз спасибо
Миро
Действительно фантастический конвертер, круто!
SIslam
6

Вы можете использовать программное обеспечение Global Mapper, в котором вы можете легко экспортировать / импортировать файлы kml / kmz + прикреплять данные и множество векторных и растровых форматов. Это одна из лучших программ.

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

Сунил
источник
Спасибо за совет. Я считаю, что он может импортировать / экспортировать файлы kml / kmz, но я уже пробовал 5+ приложений, которые могут это сделать. И ни один из них не умеет читать атрибуты («ExtendedData»). Так может ли на самом деле Global Mapper сделать это?
Миро
5

Похоже, что Google libkml не поставляется с GDAL 1.9.2 в Ubuntu, в частности, с gdal-bin 1.9.2-2 ~ precision4:

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

Чтобы получить версию, работающую с libkml и ExtendedDataподдержкой, мне нужно было собрать GDAL из ствола svn (r25473) после сборки libkml из ствола svn (r864), особо отметив, что версии 1.2.0 явно недостаточно, как описано на веб-сайте GDAL. , Помните, что libkml0точная установка на Ubuntu (в настоящее время 1.2.0-1ubuntu6) не поможет. Тебе действительно нужен багажник 1.3 или svn, для которого я не смог найти PPA.

В конечном итоге я не смог даже собрать libkml на Ubuntu точно; Есть ошибки типа в версии boost, которая поставляется вместе с ней, и есть ошибки при запуске libtool, поскольку зависимости вышли из строя. По какой-то причине, это не было проблемой при сжатии Debian, где я преуспел:

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

После того, как я получил это, запуск ogr2ogr -f "ESRI Shapefile" foo.shp foo.kmlдал мне шейп-файл, который qgis смог импортировать, сохранив ExtendedDataатрибуты.

HorsePunchKid
источник
5

Драйвер Ogr2ogr kml, используемый Qgis 1.8.0 Lisboa, не поддерживает теги kml ExtendedData.

Драйвер LIBKML делает это, он включен в версию 1.9.2 GDAL, пакеты OSGEO4W, MS4W и Qgis Master.

Ваши данные не ошибаются, но у драйвера LIBKML в OSGeo4W были некоторые проблемы со SchemaData. В качестве альтернативы, следующие работы:

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

РЕДАКТИРОВАТЬ: ошибка SchemaData теперь исправлена ​​в пакете GGEAL 1.9.2-2 OSGEO4W.

Andrej
источник
4

Использование FME 2012 (SP4)

Загрузите Читатель KML

Выберите писателя (шейп-файл)

соединить элементы и выбрать запись ( скопировать атрибуты из типов объектов )

Запустите рабочее пространство

введите описание изображения здесь

Mapperz
источник
Спасибо, я скачал fme_install.msi, но в процессе установки произошла ошибка, и поскольку уже существует другое рабочее решение этого вопроса, я не собираюсь продолжать этот путь. В любом случае, спасибо еще раз.
Миро
1

Я не знаю, вы можете достичь этого с QGIS. В MapWindow есть плагин KML2Shapefile .

KML2Shapefile - это плагин для MapWindow GIS, который преобразует файлы Google Earth KML и KMZ в шейп-файлы для использования в ГИС.

KML2Shapefile разделит каждый тип геометрии KML на отдельный шейп-файл. Он поддерживает сложные геометрии и может представлять большую часть KML в качестве данных атрибутов.

Кстати, MapWindow - это бесплатный ГИС-пакет с открытым исходным кодом. Вы можете скачать и установить его бесплатно. Вы можете преобразовать KML в шейп-файл с помощью плагина KML2Shapefile в MapWindow и просто загрузить полученный файл формы в QGIS. Предполагая, что вы все равно на Windows.

Лучшее решение, которое я могу придумать на данный момент. Я надеюсь, что кто-нибудь знает плагин для этого в QGIS.

RK
источник
1
Спасибо за вашу помощь. Я пробовал это, но все же Данные потеряны. Информация выглядит следующим образом: <ExtendedData> <SchemaData schemaUrl = "# vorlage"> <SimpleData name = "Name"> Test </ SimpleData> <SimpleData name = "Power"> 10895 </ SimpleData> <SimpleData name = "Location"> L </ SimpleData> </ SchemaData> </ ExtendedData> что-то не так с моим кодом?
Феликс
Ой, прости за это. Я надеялся, что это сработает.
РК
1
@Felix - информация, которую вы указали в своем комментарии, действительно полезна. Я бы порекомендовал отредактировать ваш вопрос и добавить его туда для дополнительного контекста и ясности.
Получить пространственный
@AndreJoost - Похоже, вы придумали хороший ответ. Было бы целесообразно добавить его в качестве фактического ответа, чтобы он отображался в результатах поиска кого-либо с той же проблемой.
Получите Пространство
1

Получите Global Mapper, все, что вам нужно сделать, это ввести KMZ или KML, а затем экспортировать Vector IMG (файл ESRI SHP). Global Mapper может читать большинство типов файлов. Затем откройте фигуру в ARC, Global Mapper, Manifold, QGIS, ect и просмотрите таблицу атрибутов. Вся информация будет там. на этом этапе вы также можете открыть файл DBF из SHP в Microsoft Excel, а затем сохранить его как расширение файла XLXS, если хотите.

Рон Пол
источник
1

В QGIS 3.2.0 преобразование может быть легко выполнено с помощью панели инструментов.

Выберите на панели инструментов -> GDAL -> Преобразование вектора -> Преобразовать формат .... (Caja de Herramientas de Procesos -> GDAL -> Векторная трансляция -> Формат преобразования)

Выберите файл KML, сохраните как файл SHP. Мне также пришлось изменить файл результатов («Преобразованный») в Свойствах -> Источник (вкладка) -> Кодирование источника с «UTF-8» на «Windows-1258», чтобы правильно видеть испанские символы.

Андрес Бодини
источник