Из .shp в .kml в .shp без потери атрибутов

10

Я преобразовал шейп-файл с атрибутами в .kml для клиента. Затем .kml и атрибуты были отредактированы в Google Earth. Я получил обновленный .kml, и теперь мне нужно вернуть его в .shp. Проблема в том, что все мои атрибуты теперь в формате html, что делает всплывающее окно с информацией в Google Планета Земля. Когда я пытаюсь конвертировать обратно в .shp, мои атрибуты объединяются в («Описание создано» в Google) поле. И ВСЕ мои атрибуты и информация объединены в одну ячейку. Есть ли способ извлечь данные из поля «Описание». Даже если я это сделаю, есть ли простой способ избавиться от формата HTML и сделать его пригодным для использования?

Это то, что я получаю, используя метод Fusion Table, который я нашел на некоторых форумах. Вы можете увидеть HTML слева, он продолжается дальше, чем он показывает.

http://s6.postimg.org/uf7jeuksh/problems.png

Я использую ArcGIS Desktop 10.2.

Кэти Б.
источник
Что вы используете для преобразования между форматами? Можете ли вы попробовать ogr2ogr или QGIS вместо этого?
bugmenot123

Ответы:

3

Я только что подтвердил, что инструмент Spatial ETL, созданный с использованием расширения Data Interoperability, перенесет атрибуты из вашего файла KML / KMZ обратно в шейп-файл с тактовой схемой. Просто выберите параметр « Динамическая схема» в мастере создания инструмента:

Пространственный шаг ETL


Обходным путем было бы проанализировать поле описания для значений различных полей атрибутов, которые вам нужны, и скопировать их в соответствующие поля. И в следующий раз попросите вашего клиента добавить атрибуты в электронную таблицу Excel или что-то еще, чтобы вы могли просто присоединить их к своему шейп файлу для обновления.

Адам
источник
1
Я думаю, что это мое единственное решение на данный момент. Но я обязательно включу таблицу Excel в следующий раз!
Кэти Б.
У вас есть доступ к расширению Data Interoperability для ArcGIS? У меня нет опыта в этом вопросе, но там могут быть писатели, которые могут переназначить ваши взгляды
Адам
FME от Safe Software (на которой основана совместимость данных) также будет делать то, что вам нужно, но это тоже дорого.
Адам
3

Сначала мне пришлось открыть kml в QGIS и сохранить как шейп-файл, и он сохранил атрибуты. В QGIS, Добавить векторные данные и при просмотре установите для файлов типа «Keyhole Markup Markup Language (KML)». Найдите KML, который вы хотите импортировать, затем нажмите «Открыть». Сохраните объекты, импортированные из KML, в шейп-файл. При импорте шейп-файла в ArcMap вы увидите все поддерживаемые атрибуты.

ketar
источник
2

Этот инструмент, Экспорт в KML, разработанный Кевином Мартином, делает свою работу.

Есть некоторые проблемы со стилями, но, по крайней мере, цвета и атрибуты верны, и есть много вариантов, чтобы поиграть с атрибутами, метками и т. Д.

Pedraz
источник
2

Мне нужно было только одно из полей, которое содержало строку даты. Используя arcMap, я смог решить эту проблему с помощью полевого калькулятора для его извлечения. Если вам нужно извлечь только пару полей, это может работать для вас, хотя и немного утомительно:

Следующие шаги помогут вам построить строку VB для использования в калькуляторе полей, чтобы вырезать подстроку из поля описания на основе тегов HTML и объема данных, хранящихся в вашей таблице.

  1. В GoogleEarth откройте свой KML / KMZ, нажмите на функцию, чтобы открыть всплывающее окно. Укажите точное название поля, которое вы хотите получить. Шахта называется "ДАТА"
  2. В ArcMap откройте таблицу атрибутов слоя, который вы создали при импорте KML / KMZ.
  3. Определите поле описания. По моим данным это называется "PopupInfo"
  4. В первой записи щелкните правой кнопкой мыши ячейку «PopupInfo» и выберите «скопировать»
  5. Откройте Блокнот и вставьте содержимое ячейки. Теперь вы увидите HTML-код для всплывающего окна.
  6. Используйте Ctrl-F, чтобы найти имя поля из KML / KMZ (в моем случае, «DATE»). Вот скриншот, показывающий только строку HTML, о которой я забочусь. введите описание изображения здесь
  7. Подсчитайте количество символов, включая пробелы, от начала имени поля до начала ваших данных. В моем случае 15 символов.
  8. Определите, сколько символов вы хотите извлечь. Для моей подстроки мне нужно 19. Например, если вам просто нужны коды состояния, такие как AZ и WY, вам может понадобиться только 2. Если ваши данные не имеют одинаковых значений длины в этом поле, ошибитесь в стороне от самой длинной. Редактировать: вы можете удалить дополнительные символы позже вручную или с помощью функций instr () и rtrim () VB. Напишите или напишите мне, если вам нужна помощь с этим.
  9. В arcMap добавьте новое поле TEXT в свой слой и не забудьте указать ему как минимум столько символов, сколько потребуется для ваших данных. По умолчанию 50.

  10. Затем откройте калькулятор поля для вашего нового поля. Начало данных определяется с помощью функции InStr (), а данные извлекаются с помощью функции Mid (). Введите следующую команду VB:

    Mid([PopupInfo],InStr([PopupInfo],"DATE")+15,19)

Конечно, замените мои имена полей своими (из шагов 3 и 6) и измените длину чисел 15 и 19 на длину подстрок (найденных в шагах 7 и 8).

В строке VB выше:

  • [PopupInfo] - это имя раздражающего поля, содержащего HTML-код для всплывающего окна KML.
  • «ДАТА» - это имя поля KML и тег HTML, который содержит данные, которые я хочу извлечь.
  • 15 - количество символов от начала тега даты до начала фактических данных даты.
  • 19 - это количество символов в строке даты, которое мы хотим сохранить.
JMers
источник
1

Вот руководство, которое я нашел, которое проведет вас через некоторые шаги, используя ArcMap, Google Drive Fusion Tables и MS Excel для преобразования файлов KML в файлы .shp с сохранением атрибутов.

Ссылка на сайт, на котором есть руководство .

Кэмерон Слоан
источник
Да, но это не решает мою проблему. Мои атрибуты все еще сосредоточены в поле «Описание» в формате html. Инструмент KML to Layer не подходит для моей ситуации. Я даже пробовал другие сценарии.
Кэти Б.
Смотрите мой отредактированный ответ.
Кэмерон Слоун
Еще раз, изображение, которое я связал в моем первоначальном вопросе, является моим результатом при использовании метода таблицы слияния. Это не работает для моей ситуации.
Кэти Б.
Вы привели это в Excel?
Кэмерон Слоун
Да, тот же вопрос. Я только что нашел другой форумный сайт, где у кого-то есть такая же проблема. Кажется, мне придется пройти через 1000 строк сценария и удалить код или попытаться выполнить поиск и замену. Я ценю вашу помощь.
Кэти Б.
1

Я смог сделать эту работу с помощью курсоров и списков, чтобы разделить поле PopupInfo xml на полезные значения

  1. используйте инструмент arcpy KML to layer и инструменты Project, чтобы попасть в нужную систему координат (я столкнулся с проблемами при добавлении полей к исходному результату преобразования, что может быть связано с файлом слоя, связанным с ним)

  2. Используйте .da.SearchCursor, чтобы получить строку PopupInfo из первой строки. Затем разделите его на список, основанный на '<', удалите первые два значения (поле метки из Google Earth) и поместите оставшиеся значения, имеющие тег 'td>', но не закрывающий тег 'td>', в новый список имен полей (четные индексы) и значений полей (нечетные индексы)

  3. Просмотрите список имен полей с помощью arcpy.AddField_management, чтобы добавить все поля (пропустите, если они уже существуют)

  4. Используйте .da.UpdateCursor, чтобы получить PopupInfo для всех строк, затем разделить и создать новые списки, как с помощью курсора поиска.

  5. на этот раз используйте все нечетные значения индекса для обновления строк (если i% 2 <> 0: row [(i-1) / 2] = list [i]), а затем cursor.updateRow (row)

Дилан Варбург
источник
0

ОБНОВЛЕНИЕ: если вы столкнетесь с этой темой с той же проблемой, есть инструмент для вас! Проверьте https://mygeodata.cloud/

Я действительно хорошо работаю. Я смог загрузить свой KML, и у экспортированного шейп-файла были все мои атрибуты правильно в их собственных полях. Единственный недостаток - ограниченное количество «бесплатных» конверсий.

JMers
источник
-3

До сих пор нет простого решения этой проблемы конверсии. За последние несколько лет он задавался здесь несколько раз:

KML-в-Qgis-с дополнительными-данными

сохранение-атрибутов-во-kml2shp-преобразование-в-ArcGIS-для-рабочего стола

новообращенный-KML-на-шейп-без потери-атрибутов-данных

Объяснение esri для их инструмента конвертации KmltoLayer:

«Как« владелец »инструмента KML в Esri, я могу сказать: элементы ExtendedData внутри KML не будут преобразовываться в атрибуты поля при использовании инструмента KML to Layer с ArcGIS в любой версии (9.3-10.3). Это включает ArcMap на Windows или ArcGIS Server в Linux. Существует запрос на расширение для поддержки этого, который мы рассматриваем в будущем выпуске ».

sirgeo
источник
2
Эй, я обижаюсь на ваш ответ. Если вы собираетесь копировать и вставлять мои комментарии и помещать их в кавычки, не добавляйте свой собственный комментарий о покупке расширения.
Хибма
@sirgeo, безусловно, есть решение этой проблемы в расширении Data Interoperability. Просто кажется, что это не то решение, которое вам нравится.
Адам