我有一个数据框,其中包含我想与 Google 地球一起使用的各个位置的坐标。这是一个显示结构的简单示例:
data <- data.frame(country = "USA", city = "Saint Paul",
lat = 44.9629, lon = -93.00146)
我按照这个 SO 帖子和本指南使用包中的函数成功创建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 地球会显示带有[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
文档提到了一个layer_options
属性,但没有什么直观地突出给我......
layer_options = c("<name>????</name>")
?layer_options = c("<styleUrl>#custom</styleUrl")
?- 还有什么?
上面直接传递标签的尝试似乎不会影响输出。
除了从 中创建默认输出之外,我在谷歌搜索中发现的示例并不多writeOGR()
,如上所示。感谢您的任何建议。