【发布时间】:2015-12-28 20:49:38
【问题描述】:
我想知道是否有人修复了 GIS 转换(也提前感谢您对其他问题的宝贵建议)。我正在尝试将 choropleth 地图从 R 导出为 KML 格式以放置在谷歌地图中。我必须制作很多这样的地图,所以希望 R 能比 ArcGIS 更快地处理它们(尽管如果你也有小费,那很有帮助;我是两者的普通用户)。我能够拼凑出一个不错的 ggplot choropleth(以下并感谢 this),但是当我导出到 KML 时,它会出现以下错误:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘is.projected’ for signature ‘"gg"’
在这里,我试图在多边形“病房”上绘制不同的“emanp”值。这是我的代码。
library(rworldmap)
library(foreign)
library(maptools)
library(rgdal)
library(shapefiles)
library(ggplot2)
library(ggmap)
library(plotKML)
#read in attributes
mayor2015<-read.dta("WardsMayor2015.dta")
#read in spatial data
wardmap<-readOGR("WARDS_2015.shp", layer="WARDS_2015")
#merge attributes and spatial
wardmap@data= data.frame(wardmap@data, mayor2015[match(wardmap@data[,"WARD"], mayor2015[,"WARD"]),])
#fortify spatial
wardmap.f<-fortify(wardmap, region="WARD")
wardmap.f <- merge(wardmap.f, wardmap@data, by.x = "id", by.y="WARD")
#Map it
Map <- ggplot(wardmap.f, is.projected=TRUE, aes(long, lat, group=group, fill =emanp15)) + geom_polygon() +
coord_equal() + labs(x = NULL, y = NULL, fill = "%") +
ggtitle("Support")
Map + scale_fill_gradient(low = "white", high = "black")
似乎一切都可以通过 ggplot 命令进行。当我使用 writeOGR 时,它给出了上面关于继承方法的错误。
#export to KML
writeOGR(Map, layer="ChiWards.kml", driver="KML", dataset_options=c("NameField=WARD"))
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘is.projected’ for signature ‘"gg"’
如果我对非强化数据使用 writeOGR,则相同。我是否需要丢弃 ggplot,或者我的投影设置不正确,或者我只是将太多不同的来源放在一起?
这是空间数据“wardmap”的信息
> summary(wardmap)
Object of class SpatialPolygonsDataFrame
Coordinates:
min max
x 1091131 1205198
y 1813892 1951669
Is projected: TRUE
proj4string :
[+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333
+k=0.9999749999999999 +x_0=300000 +y_0=0 +datum=NAD83 +units=us-ft +no_defs
+ellps=GRS80 +towgs84=0,0,0]
【问题讨论】:
-
恐怕 ggplot2 会产生“grob”,而不是 R 中的空间工具能够转换的东西。如果您执行
ggplot_build,您将获得一个列表结构,其中包含多边形的数据(在数据框中),您可以将其转换为SpatialPolygons,然后再转换为KML。
标签: r google-maps ggplot2 gis kml