借用Rob Berry(http://rob-barry.com/2015/06/14/Mapping-in-R/)的代码,我制作了纽约市的地图。我想在地图上绘制许多lat长点。问题是绘制这样的地图导致绘图区域超出合理的纬度范围,所以我假设必须有一种方法将我的点转换为地图比例,或者重新缩放地图以便绘图空间可以放下lat lon指向points()函数。 以下是Rob Berry的代码:
download.file(destfile = "nypp_15b.zip")
unzip(zipfile = "nypp_15b.zip")
library("rgdal")
nypp <- readOGR("nypp_15b", "nypp")
plot(nypp)
好的地图!但现在请注意绘图范围:
par(“usr”)
图表的空间编号看起来像888196.7,1092361.0,114013.0,278953.2,所以很明显,下面的地图点将不会显示在地图上。那么如何让我的积分在地图上正确绘制?
lat <- c(40.75002, 40.74317)
lon <- c(-73.96905 -74.00366)
以下不起作用,因为比例是如此不同:
points(lat,lon, col = “red”)
非常感谢。
答案 0 :(得分:2)
nypp处于投影坐标系中,因此您需要更改为您的点或nypp的坐标系。你可以这样做: -
nypp <- readOGR("nypp_15b", "nypp")
## Check the CRS of nypp
crs(nypp)
## CRS arguments:
+proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000
+y_0=0 +datum=NAD83 +units=us-ft +no_defs +ellps=GRS80 +towgs84=0,0,0
plot(nypp)
lat <- c(40.75002, 40.74317)
lon <- c(-73.96905, -74.00366)
df <- data.frame(lat, lon)
## Convert to spatial dataframe and change the coordinates of the points
coordinates(df) <- ~lon + lat
crs(df) <- CRS("+proj=longlat +datum=WGS84")
df <- spTransform(df, crs(nypp))
## Add points to the plot
points(df$lon, df$lat, col = "red", pch =19)
结果: