我花了几个月的时间在R中进行空间统计工作,但那是5年前了。为了我的生命,我不记得如何将
sp
对象(例如SpatialPolygonsDataFrame
)从一个投影转换为另一个投影。示例代码: br />现在我有一个带有适当投影信息的
SpatialPolygonsDataFrame
,但我想将其转换为所需的投影。我记得有一个名称不太直观的函数,但是我不记得它是什么。 “ reproject”,“ transform”等)。编辑
不包括为该shapefile在墨西哥烦人放置的AK / HI:
P4S.latlon <- CRS("+proj=longlat +datum=WGS84")
hrr.shp <- readShapePoly("HRR_Bdry"), verbose=TRUE, proj4string=P4S.latlon)
# Shapefile available at
# http://www.dartmouthatlas.org/downloads/geography/hrr_bdry.zip
# but you must rename all the filenames to have the same
# capitalization for it to work in R
#1 楼
您可以在rgdal中使用spTransform()
方法-以您的示例为例,您可以将对象转换为堪萨斯州的NAD83(26978):/>
library(rgdal)
library(maptools)
P4S.latlon <- CRS("+proj=longlat +datum=WGS84")
hrr.shp <- readShapePoly("HRR_Bdry", verbose=TRUE, proj4string=P4S.latlon)
plot(hrr.shp)
![](/img/0b34a1d61badfc69e37fac5f126c921e.png)
将其保存在新投影中:
hrr.shp.2 <- spTransform(hrr.shp, CRS("+init=epsg:26978"))
plot(hrr.shp.2)
编辑:
或者按照@Spacedman的建议(使用CRS信息写入一个.prj文件):
writePolyShape(hrr.shp.2, "HRR_Bdry_NAD83")
如果不确定要使用哪个CRS项目,请参考以下文章:
为R中的shapefile读取选择proj4string的正确值?
如果要定义/分配一个
当数据不存在时,请参考:
在R中将不存在的CRS分配给shapefile?
评论
请注意,writePolyShape不会写入.prj文件!如果要写入和读取.prj文件以在R中设置空间对象的CRS,则应使用rgdal中的writeOGR(并使用readOGR读取shapefile)!
– Spacedman
2012年8月19日在8:59
好得多(进行了相应编辑)-谢谢;尚未意识到它会创建.prj文件!顺便说一下,您页面上的很棒的速查表。
–Simbamangu
2012年8月19日10:47
奇怪的是,墨西哥的投影如何影响阿拉斯加和夏威夷插图的出现:-)。
– hu
2012年8月19日在18:03
@whuber-嗯,是的。。。有人编辑了我的贴子,其中没有实际地图,显示的是那些不合适的插图。
–Simbamangu
2012年8月19日在18:30
@Simbamangu对不起,当我尝试帮助添加图形时,忘记了此.shp文件相当不合适地包含了插图!
–阿里·弗里德曼(Ari B. Friedman)
2012年8月19日在21:35
#2 楼
由于引入了sf软件包(请在此处查看vignettes sf1,sf2,sf3,sf4和迁移指南),因此可以使用st_transform()
重新投影矢量数据:require(sf)
hrr_sf = st_read('HRR_Bdry.shp', stringsAsFactors = FALSE,
crs = 4326) # has +proj=longlat +datum=WGS84
plot(hrr_sf)
hrr_sf2 = st_transform(hrr_sf, "+init=epsg:26978") # 1st option sp::CRS() not working/ needed
hrr_sf2 = st_transform(hrr_sf, 26978) # 2nd option - EPSG code as an integer
plot(hrr_sf2)
# don't think about doing this:
hrr_sf3 = st_read('HRR_Bdry.shp', stringsAsFactors = FALSE,
crs = 26978)
# Output layer
st_write(hrr_sf2, dsn = getwd(), layer = "HRR_Bdry_NAD83", driver = "ESRI Shapefile")
sf将来将取代sp,并且由于其简单性和速度,恕我直言,与sp。相比有几个优点。
评论
在这里使用proj4软件包进行投影的先前答案。尚未尝试使用SpatialPolygonsDataFrame进行此操作。实际上看起来proj4不适用于Spatial对象-但请参见下面的答案。
总是有Spatial Task View:cran.r-project.org/web/views/Spatial.html和我关于Spatial Data的注释[无耻插件]:maths.lancs.ac.uk/~rowlings/Teaching/UseR2012 >