我有一些shapefile文件,想要在Google地图瓦片上绘制它们。最有效的方法是什么?一个可能的路径是使用RgoogleMaps包,然而,我仍然不清楚如何做到这一点。我认为可以使用PlotOnStaticMap以及重新格式化shapefile数据的某些组合。
我有一些shapefile文件,想要在Google地图瓦片上绘制它们。最有效的方法是什么?一个可能的路径是使用RgoogleMaps包,然而,我仍然不清楚如何做到这一点。我认为可以使用PlotOnStaticMap以及重新格式化shapefile数据的某些组合。
从开发者的角度来看,它似乎很好地运作了。
shpFile <- system.file("shapes/sids.shp", package="maptools");
shp<-importShapefile(shpFile,projection="LL");
bb <- qbbox(lat = shp[,"Y"], lon = shp[,"X"]);
MyMap <- GetMap.bbox(bb$lonR, bb$latR, destfile = "SIDS.jpg");
#compute regularized SID rate
sid <- 100*attr(shp, "PolyData")$SID74/(attr(shp, "PolyData")$BIR74+500)
b <- as.integer(cut(sid, quantile(sid, seq(0,1,length=8)) ));
b[is.na(b)] <- 1;
opal <- col2rgb(grey.colors(7), alpha=TRUE)/255; opal["alpha",] <- 0.2;
shp[,"col"] <- rgb(0.1,0.1,0.1,0.2);
for (i in 1:length(b)) shp[shp[,"PID"] == i,"col"] <- rgb(opal[1,b[i]],opal[2,b[i]],opal[3,b[i]],opal[4,b[i]]);
PlotPolysOnStaticMap(MyMap, shp, lwd=.5, col = shp[,"col"], add = F);
数据来自 data.gov.sg。正在加载绘制地图所需的包
library(rgdal) #for shapefiles
library(ggmap) #plotting maps
library(ggplot2) #general plots
使用readOGR读取shapefile文件
shpfile <- readOGR(dsn = 'data/street-and-places/','StreetsandPlaces',verbose = FALSE)
head(coordinates(shpfile),5)
coords.x1 coords.x2
[1,] 28640.40 29320.77
[2,] 29429.83 28548.69
[3,] 29224.01 28360.38
[4,] 29827.20 29664.26
[5,] 28451.00 29451.78
我们注意到坐标处于不同的投影系统中。因此,我们需要将其转换为Web墨卡托投影系统。我们使用spTransform来转换shapefile。
crsobj <- CRS("+proj=longlat +datum=WGS84") #Web Mercator projection system
shpfile_t <- spTransform(shpfile,crsobj) #Applying projection transformation
df <- as.data.frame(coordinates(shpfile_t)) #Converting to a data frame
head(df,5)
coords.x1<dbl>coords.x2<dbl>
1 103.8391 1.281441
2 103.8462 1.274459
3 103.8443 1.272756
4 103.8497 1.284547
5 103.8374 1.282626
我们注意到了转换后的投影系统。让我们将其绘制在基础地图之上。
sgmap <- get_map(location="Singapore", zoom=11,
maptype="roadmap", source="google") #Using Osm base map of Singapore
p <- ggmap(sgmap) +
geom_point(data = df,
aes(x = coords.x1, y = coords.x2),
color = 'orange',size = 1)
p
install.packages('PBSmapping', 'RgoogleMaps', 'maptools', 'rgdal', 'ReadImages'); library(PBSmapping); library(RgoogleMaps); library(maptools);
还要注意,如果SIDS.jpg无法使用,则可以尝试SIDS.png。 - Etienne Racine