Перетворення KML у shapefile без втрати атрибутів за допомогою 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
у вас є пряме посилання на kml?
Mapperz

Я думаю, що це можливо через FME, або якщо ви відчуваєте трохи авантюр, ви можете написати сценарій пітона, який би розібрав kml (xml!) Та експортував у shapefile. (бібліотеки для використання: бібліотека
формфайлів

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>

імпортується.

Ви можете змінити це за допомогою гарного редактора тексту.

------------------- Додав Миро ---------------------

Для редагування KML потрібно використовувати текстовий редактор, який дозволяє "Регулярне вираження" у функції "Замінити", наприклад, PSPad (або Блокнот ++ та багато інших вільних редакторів тексту)

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

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

Після цього просто використовуйте QGIS (ключ - "нова" версія - включена версія GDAL 1.9.2 і далі) та "Додати векторний шар", і шар буде завантажений усіма "ExtendedData".


Дякую, це була КЛЮЧНА інформація. Я спробував замінити його в одному тестовому файлі, і він працював ідеально. Усі "ExtendedData" тепер у таблиці як стовпчики. Ще раз дякую велике.
Миро

3
Насправді, DisplayName Qgis не використовується. Тож заміна може бути здійснена без RegExp, замінивши <Data> <DisplayName> на <Data name = "та замінивши </DisplayName> на">.
AndreJ

1
Мій файл KML також містив тег <SchemaData>, який мені довелося коментувати, щоб відкрити його в QGIS. Але в іншому випадку трюк спрацював ідеально!
Джана

8

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

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

сподіваємось, що це ви хочете ..


Дякую, так, саме це мені потрібно. Добре знати, що є програмне забезпечення, яке може обробляти ці 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 ~ preci4:

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

Щоб отримати версію, яка працює з libkml та ExtendedDataпідтримкою, мені довелося створити GDAL з trun svn (r25473) після побудови libkml із trun 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атрибути.


5

Драйвер Ogr2ogr kml, використовуваний Qgis 1.8.0 Lisboa, не підтримує теги kml ExtendedData.

Драйвер LIBKML робить, він включений у GDAL Версії 1.9.2 і далі, пакети 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>

EDIT: Помилка SchemaData тепер виправлена ​​в GDAL 1.9.2-2 пакеті OSGEO4W.


4

Використання FME 2012 (SP4)

Завантажте читач KML

Виберіть сценариста (Shapefile)

підключіть елементи та виберіть запис ( скопіюйте атрибути з типів функцій )

Запустіть робочу область

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


Дякую, я завантажив fme_install.msi, але в установці є помилка, і тому що вже існує інше робоче рішення цього питання, я не збираюся продовжувати цей шлях. Все одно ще раз дякую.
Миро


1

Я не знаю, що ви можете досягти цього за допомогою QGIS. Однак у MapWindow є плагін KML2Shapefile .

KML2Shapefile - це плагін до GIS MapWindow, який перетворює файли KML та KMZ Google Планета Земля у форматні файли для використання в ГІС.

KML2Shapefile розділить кожен тип геометрії KML на окремий файл форми. Він підтримує складні геометрії і може представити значну частину KML як атрибутичних даних.

MapWindow - це, до речі, і безкоштовний GIS-пакет із відкритим кодом. Ви можете завантажити і встановити його безкоштовно. Ви можете конвертувати KML у shapefile, використовуючи плагін KML2Shapefile у MapWindow та просто завантажте отриманий файл форми у QGIS. Якщо припустимо, що ви все одно в Windows.

Найкраще рішення, про яке я зараз можу придумати. Я сподіваюся, що хтось знає плагін, щоб це зробити в QGIS.


1
Спасибі за вашу допомогу. Я спробував це, але все-таки Дані втрачено. Інформація виглядає приблизно так: <ExtendedData> <SchemaData schemaUrl = "# vorlage"> <Ім'я SimpleData = "Ім'я"> Тест </SimpleData> <SimpleData name = "Power"> 10895 </SimpleData> <SimpleData name = "Місцезнаходження"> L </SimpleData> </SchemaData> </ExtendedData> чи не так у моєму коді?
Фелікс

О, вибачте з цього приводу. Я сподівався, що це спрацює.
РК

1
@Felix - Інформація, яку ви надали у своєму коментарі, дуже корисна. Я рекомендую відредагувати своє запитання та додати його туди для додаткового контексту та ясності.
Отримайте просторовий

@AndreJoost - Здається, ви придумали хорошу відповідь. Варто додати його як фактичну відповідь, щоб він відображався в результатах пошуку будь-кого іншого з тим же питанням.
Отримайте просторовий

1

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


1

У QGIS 3.2.0 перетворення може бути спрощено за допомогою панелі інструментів.

Виберіть у панелі інструментів -> GDAL -> Перетворення вектор -> Перетворити формат .... (Caja de Herramientas de Procesos -> GDAL -> Конверсія Vector -> Convertir Formato)

Виберіть файл KML, збережіть як файл SHP. Я також повинен був змінити результуючий файл ("Конвертований") у Властивості -> Джерело (вкладка) -> Кодування джерела з "UTF-8" на "Windows-1258", щоб правильно побачити іспанські символи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.