我已经下载了加拿大联邦区的形状文件。当我将文件加载到命名空间中时,它是一个 SpatialPolygonsDataFrame。检查单个多边形,我可以看到以下内容:
我可以看到这些都在UTM系统中。我希望能够使用十进制单位将它们转换为正常的经度/纬度系统。 SPDF 对象具有属性:数据、多边形、绘图顺序、边界框和 proj4string。
我尝试过,例如:
sf::st_as_sf(MAP_HERE, coords = c('lon', 'lat'), crs = 4326)
在生成的 sf 数据框中,我无法找到一种方法来访问长/纬度对中的新对象的坐标。当我在生成的数据帧上运行 st_coordinates() 时,我可以看到这些没有改变。
理想情况下,我想访问原始 SPDF 中边界框的坐标,并使用它们来计算各个多边形的质心。
有办法做到这一点吗?
您应该从 shapefile 将数据读入
sf
对象并跳过 SpatialPolygonsDataFrame
步骤:
library(sf)
map = st_read("./path/to/mymapdata.shp")
然后使用
st_transform
转换为经纬度,即 epsg 代码 4326:
map_trans = st_transform(map, 4326)
那么如果您想查看完整的坐标:
st_coordinates(map_trans)
给你这样的东西:
X Y L1 L2 L3
[1,] -81.47276 36.23436 1 1 1
[2,] -81.54084 36.27251 1 1 1
[3,] -81.56198 36.27359 1 1 1
[4,] -81.63306 36.34069 1 1 1
[5,] -81.74107 36.39178 1 1 1
[6,] -81.69828 36.47178 1 1 1
其中
L1
对数据中的每个要素(行)进行分组,L2
和 L3
对这些要素中的多个多边形和孔进行编码。