Из .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 вы увидите все поддерживаемые атрибуты.


2

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

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


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 - это количество символов в строке даты, которое мы хотим сохранить.

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, и у экспортированного шейп-файла были все мои атрибуты правильно в их собственных полях. Единственный недостаток - ограниченное количество «бесплатных» конверсий.


-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. Существует запрос на расширение для поддержки этого, который мы рассматриваем в будущем выпуске ».


2
Эй, я обижаюсь на ваш ответ. Если вы собираетесь копировать и вставлять мои комментарии и помещать их в кавычки, не добавляйте свой собственный комментарий о покупке расширения.
— Хибма

@sirgeo, безусловно, есть решение этой проблемы в расширении Data Interoperability. Просто кажется, что это не то решение, которое вам нравится.
— Адам
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.