我有一个空间多边形对象和一个空间点对象。后者是由数据帧中的xy latlong数据向量(分别称为纬度和经度)创建的,而前者只是使用rgdal直接读入R中。我的代码如下:
boros <- readOGR(dsn = ".", "nybb")
rats <- read.csv("nycrats_missing_latlong_removed_4.2.14.csv", header = TRUE)
coordinates(rats) <- ~longitude + latitude
此时既不投射空间物体。如果我按如下方式投影这些对象:
proj4string(boros) <- CRS("+proj=lcc")
proj4string(rats) <- CRS("+proj=lcc")
现在两个对象都被投影,并且两个对象都将使用plot()函数成功映射,如下所示:
plot(boros)
plot(rats)
然而,当我尝试将它们一起绘制时:
plot(boros)
plot(rats, add = TRUE)
我只获得了第一个情节,没有将鼠标物体叠加在博罗斯上。然而,这是一个大问题,我得到NO错误消息,所以我无法确定这两个空间对象之间能够相互通信的断开连接。这两个命令运行顺利,没有错误或警告,但我只剩下单个图。当我使用proj4string()检查每个对象的投影时,我会为每个对象返回相同的投影。
我现在花了好几个小时,尝试了各种方法创建两个空间对象,其CRS和投影匹配,以便可以使用plot()将它们映射在一起。顺便说一句,我采用的一种方法是在ArcGIS中为rat对象创建一个shapefile,它可以很好地创建文件。但是我仍然在两个空间对象中无法在R中一起工作。我已经为两个对象尝试了许多不同的投影,两个对象上的spTransform,似乎没有任何效果。 非常感激任何的帮助。我还包含了一个带有我上面描述的2个数据文件的dropbox链接: https://www.dropbox.com/sh/x0urdo6guprnw8y/tQdfzSZ384
答案 0 :(得分:3)
因此,正如一些评论指出的那样,问题在于您的数据和地图有不同的预测。
您的地图似乎来自NYC Department of City Planning。在WGS84(longlat)中,shapefile肯定是不是,但CRS不包含在文件中(顺便说一句,这非常令人失望)。然而,有一个metadata file表示shapefile被投影为EPSG 2263。
为了在R中使用它,我们需要一个投影字符串。在R中得到这个的惯用方法是:
library(rgdal)
EPSG <- make_EPSG()
NY <- with(EPSG,EPSG[grepl("New York",note) & code==2263,]$prj4)
NY
# [1] "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +datum=NAD83 +units=us-ft +no_defs"
现在我们可以将您的地图重新投影到WGS84中,或者将您的数据重新投影到地图CRS中。
setwd("< directory with all your files >")
data <- read.csv("nycrats_missing_latlong_removed_4.2.14.csv")
# First approach: reproject map into long-lat
wgs.84 <- "+proj=longlat +datum=WGS84"
map <- readOGR(dsn=".",layer="nybb",p4s=NY)
map.wgs84 <- spTransform(map,CRS(wgs.84))
map.wgs84.df <- fortify(map.wgs84)
library(ggplot2)
ggplot(map.wgs84.df, aes(x=long,y=lat,group=group))+
geom_path()+
geom_point(data=data, aes(x=longitude,y=latitude, group=NULL),
colour="red", alpha=0.2, size=1)+
ggtitle("Projection: WGS84 longlat")+
coord_fixed()
# Second approach: reproject data
map.df <- fortify(map)
rats <- SpatialPoints(data[,c("longitude","latitude")],proj4string=CRS(wgs.84))
rats <- spTransform(rats,CRS(NY))
rats.df <- data.frame(coordinates(rats))
ggplot(map.df, aes(x=long,y=lat,group=group))+
geom_path()+
geom_point(data=rats.df, aes(x=longitude,y=latitude, group=NULL),
colour="red", alpha=0.2, size=1)+
ggtitle("Projection: NAD83.2263")+
coord_fixed()
中央公园没有老鼠?