更改 SF 对象的 CRS [英] Changing CRS of a SF object

查看:37
本文介绍了更改 SF 对象的 CRS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些道路"作为 sp 对象:

I have some 'roads' as a sp object:

class       : SpatialLinesDataFrame 
features    : 17360 
extent      : 490176.4, 567680.9, 148639.1, 212821  (xmin, xmax, ymin, ymax)
coord. ref. : +init=epsg:27700 +proj=tmerc +lat_0=49 +lon_0=-2     +k=0.9996012717 +x_0=400000 +y_0=-100000 +datum=OSGB36 +units=m +no_defs     +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 
variables   : 4
names       :    osm_id, lanes,     type, width 
min values  :        73,     2, motorway,   6.3 
max values  : 587969162,     6,    trunk,  18.9

我像这样将它们转换为 sf 对象:

I convert them to a sf object like so:

roads                   <- st_as_sf(roads, crs = 27700)

转换后,SRID为空,proj4string(可能)看起来不正确.为什么是这样?我可以修吗?

After conversion, the SRID is empty, and the proj4string (possibly) looks incorrect. Why is this? Can I fix it?

Simple feature collection with 17360 features and 4 fields
geometry type:  LINESTRING
dimension:      XY
bbox:           xmin: 490176.4 ymin: 148639.1 xmax: 567680.9 ymax: 212821
epsg (SRID):    NA
proj4string:    +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.1502,0.247,0.8421,-20.4894 +units=m +no_defs
First 10 features:
     osm_id lanes    type width                       geometry
73       73     2 primary   6.3 LINESTRING (526256 191950, ...
74       74     2 primary   6.3 LINESTRING (525236.4 190755...
75       75     2 primary   6.3 LINESTRING (526324.4 192518...
79       79     2 primary   6.3 LINESTRING (524912.4 190235...
482     482     2 primary   6.3 LINESTRING (527283.9 198571...
546     546     2 primary   6.3 LINESTRING (506089.1 205091...
1210   1210     2 primary   6.3 LINESTRING (526023.9 195013...
1213   1213     2 primary   6.3 LINESTRING (524861.1 196243...
1214   1214     2 primary   6.3 LINESTRING (524482.3 196798...
1698   1698     2 primary   6.3 LINESTRING (527335.3 195524...

我想我需要解决这个问题,因为我想将我的数据 st_transform() 转换为与栅格相同的 CRS,我必须提取一些值.

I think I need to fix this, because I then want to st_transform() my data to the same CRS as a raster I have to do some extraction of values.

crs(raster)
CRS arguments:
 +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs

我认为我可以通过执行这样的操作将我的道路"转换为正确的 CRS?但它不起作用.我明白了……

I presume I can convert my 'roads' to the correct CRS by doing something like this? But it doesn't work. I get ....

roads <- st_transform(roads, crs(raster))
'Error: cannot create a crs from an object of class CRS

感谢帮助.谢谢.

推荐答案

你必须像这样调整 st_transform 参数:

You have to adapt the st_transform arguments like that:

roads <- st_transform(roads, crs = 4326)

roads <- st_transform(roads, crs = proj4string(raster))

或正如@TimSalabim 所说:

OR as @TimSalabim said:

roads <- st_transform(roads, crs = crs(raster)@projargs)

OR 正如@R'n'E 指出的那样:

OR as @R'n'E pointed out:

roads <- st_transform(roads, crs = st_crs(raster))

这篇关于更改 SF 对象的 CRS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆