У меня есть кадр данных, содержащий координаты в разных местах, которые я хотел бы использовать с Google Earth. Вот простой пример, показывающий структуру:Помощь с <name> и <styleUrl> в .kml при использовании writeOGR() от rgdal
data <- data.frame(country = "USA", city = "Saint Paul",
lat = 44.9629, lon = -93.00146)
Я последовал this SO post и this guide создать KML
выход успешно используя функцию writeOGR()
из rgdal
пакета, однако у меня возникают проблемы тонкой настройки атрибутов. Вот код:
# you may need to install gdal itself for the package to install successfully
# install.packages("rgdal")
library(rgdal)
data_sp <- data
coordinates(data_sp) <- c("lon", "lat")
proj4string(data_sp) <- CRS("+init=epsg:4238")
data_ll <- spTransform(data_sp, CRS("+proj=longlat +datum=WGS84"))
writeOGR(data_ll["city"], "/path/to/test.kml", driver = "KML", layer = "city")
Результат отлично работает только просмотр местах, но я хотел бы изменить атрибут <styleUrl>
, а также имеют атрибут <name>
заселен. Без этого, Google Earth показывает местоположения с [no name]
атрибута:
Вот результирующий .kml
файл:
<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document><Folder><name>city</name>
<Placemark>
<ExtendedData><SchemaData schemaUrl="#city">
<SimpleData name="city">Saint Paul</SimpleData>
</SchemaData></ExtendedData>
<Point><coordinates>-93.001753817020003,44.96282130428127</coordinates></Point>
</Placemark>
</Folder>
<Schema name="city" id="city">
<SimpleField name="city" type="string"></SimpleField>
</Schema>
</Document></kml>
мне нужно либо получить <name>
элемент для заполнения с SimpleField name="city"
содержимым, или есть <name>City</name>
теги, добавленные к каждому <Placemark>
. То, что я хотел бы что-то вроде этого, как конечный результат (примечание добавлено <Style>
определение, <styleUrl>
атрибут для <Placemark>
, и добавил <name>
атрибут):
<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Style id="custom">
<IconStyle>
<scale>1.5</scale>
<Icon>
<href>http://upload.wikimedia.org/wikipedia/commons/a/af/Tux.png</href>
</Icon>
</IconStyle>
</Style>
<Folder><name>city</name>
<Placemark>
<name>Saint Paul</name>
<styleUrl>#custom</styleUrl>
<ExtendedData><SchemaData schemaUrl="#city">
<SimpleData name="city">Saint Paul</SimpleData>
</SchemaData></ExtendedData>
<Point><coordinates>-93.001753817020003,44.96282130428127</coordinates></Point>
</Placemark>
</Folder>
<Schema name="city" id="city">
<SimpleField name="city" type="string"></SimpleField>
</Schema>
</Document></kml>
Вот что результат выглядит (по аналогии с тем, что я м стремится к):
rgdal
documentation упоминает атрибут layer_options
, но ничего не интуитивно торчала ко мне ...
layer_options = c("<name>????</name>")
?layer_options = c("<styleUrl>#custom</styleUrl")
?- Что-то еще?
Попытки передать тег непосредственно не влияют на выход.
Существует не так много примеров, которые я нашел в googling, кроме создания вывода по умолчанию от writeOGR()
, как показано выше. Спасибо за любые предложения.
Вы пробовали 'kmlPoints (...)' в пакете ['maptools'] (http://cran.r-project.org/web/packages/maptools/maptools.pdf)? Похоже, что это лучше подходит. – jlhoward
@jlhoward Нет, но только что сделал, и он действительно работает. Я хотел бы оставить вопрос открытым для ответов, поскольку он может представлять интерес для других пользователей. Для тех, кто хочет использовать «maptools», я выполнил все вышеперечисленное точно, за исключением функции 'writeOGR()', я сделал: 'kmlPoints (data_ll [" city "], kmlfile =" ~/Desktop/test. kml ", name = data_ll $ city, icon =" http://upload.wikimedia.org/wikipedia/commons/a/af/Tux.png ")'. Спасибо за предложение! – Hendy