【发布时间】:2019-03-09 17:59:52
【问题描述】:
我有一个非常大的 xml 数据,其中包含 lat long 值。我的目标是将 xml 文件转换为多边形。为此,我首先尝试将 xml 转换为数据框。我尝试了xml2 和dplyr 包,但没有成功。我还在xml 包中使用了lapply 函数,但我无法将xml 转换为数据框。
我的数据如下所示。
<?xml version="1.0" encoding="UTF-8"?>
-<rss version="2.0
xmlns:atom="http://www.w3.org/2005/Atom"xmlns:georss="http://www.georss.org/georss">-<channel>
<title>raisen:raisengp</title>
<description>null</description>
-<link>
-<![CDATA[http://geoportal.mp.gov.in:8080/geoserver/raisen/wms
service=wms&request=GetMap&version=1.1.1&format=application%2Frss%2Bxml&layers=raisen%3Araisengp&styles=poly_gp&height=545&width=768&transparent=false&bbox=8611854.0%2C2606654.0%2C8775218.0%2C2722591.0&srs=EPSG%3A3857]]>
</link>
<atom:link rel="self"
href="http://geoportal.mp.gov.in:8080/geoserver/raisen/wms?service=wms&request=GetMap&version=1.1.1&format=application%2Frss%2Bxml&layers=raisen%3Araisengp&styles=poly_gp&height=545&width=768&transparent=false&bbox=8611854.0%2C2606654.0%2C8775218.0%2C2722591.0&srs=EPSG%3A3857"/>
-<item>
<title>raisengp.1</title>
-<link>
-<![CDATA[http://geoportal.mp.gov.in:8080/geoserver/raisen/wms/reflect?format=application%2Fatom%2Bxml&layers=raisen%3Araisengp&featureid=raisengp
</link>
-<guid>
-<![CDATA[http://geoportal.mp.gov.in:8080/geoserver/raisen/wms/reflect?format=application%2Fatom%2Bxml&layers=raisen%3Araisengp&featureid=raisengp.1]]>
</guid>
-<description>
-<![CDATA[<h4>raisengp</h4>
<ul class="textattributes">
<li><strong><span class="atr-name">districtc</span>:</strong> <span class="atr-value">446</span></li>
<li><strong><span class="atr-name">tehsilcode</span>:</strong> <span class="atr-value">3593</span></li>
<li><strong><span class="atr-name">blockcode</span>:</strong> <span class="atr-value">1172</span></li>
</description>
<georss:polygon>23.18939277468125 77.57356245525989 23.18919469824253
77.5738162614824 23.18898075873695 77.57405868357523 23.188783235268893
77.57426764701316 23.188552245459086 77.57444602814941 23.188233192400194
77.57456604367773 23.187997858030833 77.57465301739674 23.18782708762609
77.57470568856189 23.18773716304003 77.57475944413376 23.187614345311996
77.57479779220925 23.187560141307777 77.57482903021003 23.18743125870021
77.57487370595457 23.18733905673292 77.57489457266112 23.187148669743586
77.57495472144764 23.18697715655688 77.57499546065583 23.18681329439572
77.57506290929337 23.18666518442996 77.57510904621871 </georss:polygon>
这是我的代码。请帮我做这件事。
> library(xml2)
> library(dplyr)
> dat <- "D:/Prakshep_project/raisen-raisengp.xml"
> doc <- read_xml(dat)
> docdf <- bind_rows(lapply(xml_find_all(doc, "//georss:polygon), function(x) {
parent <- data.frame(as.list(xml_attrs(x)), stringsAsFactors=FALSE)
kids <- bind_rows(lapply(xml_children(x), function(x) as.list(xml_attrs(x))))
cbind.data.frame(parent, kids, stringsAsFactors=FALSE)
}))
这里使用xml 包是代码。
library(XML)
data <- xmlTreeParse("D:/Prakshep_project/raisen-raisengp.xml",useInternalNodes = TRUE)
guid <- xpathSApply(data, "//guid" ,xmlValue)
ply <- xpathSApply(data, "//georss:polygon" ,xmlValue)
df <- data.frame(guid= unlist(guid),
ply = unlist(georss:polygon)
【问题讨论】:
-
如果这是一个有效的 GeoRSS 文件(您没有向我们提供完整的文件或文件片段,所以我无法判断,但看起来很像),那么您可以使用 @ 阅读它将
sf包的987654330@ 函数放入空间数据框中。请向我们提供完整的文件以获得完整的答案。 -
@Spacedman 我的 GeoRSS 文件非常大。我找不到在我的问题中附加完整数据的方法。以上数据是我的xml文件的sn-p。它包含必须转换为多边形的坐标。
-
@JonnyCrunch 我试过了,但对我的数据集不起作用。
-
尝试(将文件名替换为文件路径)
library(sf); polys = st_read("filename.xml"); plot(polys$geom)- 如果找不到,请安装sf。
标签: r xml dataframe coordinates gis