Чтение файлов KML в R

Я создаю рабочий процесс для чтения файлов KML с несколькими геометрическими объектами в R. Это моя рабочая карта, с точечной и траекторной геометрией. (Воспроизводимый) сценарий R:

library(rgdal)
setwd( {SPECIFY A FOLDER} )
download.file("http://www.scribblemaps.com/maps/kml/shackleton.kml", "file.kml")
(lyr = ogrListLayers("file.kml"))
map = readOGR ("file.kml", layer=lyr, verbose = TRUE, drop_unsupported_fields=T, dropNULLGeometries=T)

который терпит неудачу с:

Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) : 
  Cannot open layer

Любые идеи, как обойти это?

Мне удалось получить данные о пути, создав новый KML только с записью пути: в Google Планета Земля щелкните запись пути в списке объектов kml, выберите «копировать», вставьте в текстовый редактор и сохраните как KML. Это открывается в R с:

(lyr = ogrListLayers("path.kml"))
pathkml = readOGR ("path.kml", layer=lyr, verbose = TRUE, drop_unsupported_fields=T, dropNULLGeometries=T)
coordinates(pathkml)

Но я не разработал рабочий процесс для точечных данных, который включает метки точек и аннотации. Предпочтительным решением было бы чтение исходного KML и устранение необходимости в Google Планета Земля, но, конечно, все, что работает. Очень благодарен за помощь.


Приложение:

Сейчас я смотрю на использование XML для анализа этого. Данные кажутся структурированными в тегах. Я должен:

require(XML)
d = xmlParse("shackleton.kml")
doc = xpathSApply(d, "//Placemark")

но это, кажется, не дает ничего полезного.


person geotheory    schedule 21.10.2013    source источник
comment
Не знаю ответа, но могу сообщить, что объяснение ошибки на Mac немного отличается: Multiple incompatible geometries: 1:2. Кроме того, во втором предложении на странице справки говорится: он может обрабатывать только слои с соответствующими геометрическими элементами.   -  person IRTFM    schedule 21.10.2013
comment
Спасибо ДВин. Я также отправил сообщение на R-Sig-Geo на случай, если кто-то может посоветовать.   -  person geotheory    schedule 22.10.2013


Ответы (2)


Эта функция R должна извлекать информацию о метках (имя, описание и координаты точек) из KML, экспортированного из Google. Карты.

Он отлично работает с двумя имеющимися у меня картами и поддерживает значения NA в именах и описаниях (что объясняет, почему внутренняя функция get_field закодирована именно так).

Улучшения очень приветствуются.

Добавить. Я добавил функцию для работы с полигонами. Код теперь позволяет отображать точки и полигоны KML, как в

ggplot(kml_points(map),
       aes(x = longitude, y = latitude)) +
  geom_polygon(data = kml_polygons(map), fill = "red", alpha = 0.5) +
  geom_point()

где map содержит путь к файлу KML.

ВНИМАНИЕ: мультигеометрия (например, мультиполигоны с отверстиями) не поддерживается.

person Fr.    schedule 26.12.2016
comment
Планируете ли вы добавить эту функцию в пакет? Даже если это не так быстро, оно работает и не вызывает тяжелых зависимостей sig. Очень хорошо, спасибо, что поделились!! - person mpaladino; 28.04.2018
comment
Спасибо. Разветвится и сообщит, если что-то не работает. - person mpaladino; 30.04.2018

Это R-sig-geo thread также относится. Кажется, единственный способ приблизиться к этому — написать пользовательскую функцию для разбора KML как XML и создания отдельных объектов пространственных точек и пространственных полигонов из соответствующих геометрий. В целом, вероятно, более эффективно просто попытаться придерживаться KML с одной геометрией.

person geotheory    schedule 24.10.2013