如何在R语言中基于数据库几何对象创建KML文件?
如何从PostgreSQL空间数据生成完整KML文件?
看起来你已经成功从PostgreSQL数据库里提取了每个地块的KML多边形片段,接下来只需要把这些片段包裹在标准的KML结构里,就能生成可直接使用的完整KML文件了。我来给你一步步实现:
首先,确认你的kml数据框有两列:parcel_id(地块ID)和ST_AsKML返回的多边形KML片段。接下来用R代码把这些拼装成完整的KML:
# 加载必要的包(你已经在用RPostgreSQL了) library(RPostgreSQL) # 假设你已经建立了数据库连接con,比如: # con <- dbConnect(PostgreSQL(), dbname="你的数据库名", host="你的主机", user="用户名", password="密码") # 提取地块ID和对应的KML多边形片段 kml_data <- dbGetQuery(con, "SELECT parcel_id, ST_AsKML(version_perimeter) FROM fm_version") # 定义KML文件的头部(标准KML结构的开头) kml_header <- '<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document>' # 定义KML文件的尾部 kml_footer <- ' </Document> </kml>' # 为每个地块生成一个Placemark条目 # Placemark是KML里用来标记地理要素的容器,我们把地块ID作为名称 placemarks <- apply(kml_data, 1, function(row) { paste0(' <Placemark> <name>', row["parcel_id"], '</name> ', row["ST_AsKML"], ' </Placemark>') }) # 把头部、所有Placemark、尾部拼接成完整的KML内容 full_kml <- paste(c(kml_header, placemarks, kml_footer), collapse = '\n') # 将完整KML写入文件,你可以修改文件名 writeLines(full_kml, "地块数据.kml") # 别忘了关闭数据库连接 dbDisconnect(con)
关键细节说明:
- 你的
ST_AsKML(version_perimeter)返回的<Polygon>...</Polygon>片段,刚好可以直接嵌入到KML的Placemark中,不需要额外修改。 - 每个
Placemark里的<name>用parcel_id填充,这样在Google Earth或其他KML查看工具里打开时,能直接看到每个地块的ID,方便识别。 - 如果你的
parcel_id里包含XML特殊字符(比如&、<、>),可以用xml2包的xml_escape_char()函数转义,避免KML文件解析出错:# 先安装xml2包(如果没装的话) # install.packages("xml2") library(xml2) # 在生成name时转义 paste0(' <Placemark> <name>', xml_escape_char(row["parcel_id"]), '</name> ', row["ST_AsKML"], ' </Placemark>')
运行完这段代码后,你就能得到一个完整的KML文件,直接用Google Earth、QGIS等工具打开查看你的地块数据啦!
内容的提问来源于stack exchange,提问作者Pello
相关产品推荐
相关产品推荐

