如何在R中转换加拿大选区Shapefile坐标并计算多边形质心?
空间数据处理解决方案
1. 转换为十进制经纬度(WGS84)
你之前的错误在于使用st_as_sf时多余指定了coords参数——这个参数是给非空间数据框转sf用的,而你的输入已经是带坐标系的SpatialPolygonsDataFrame。正确流程如下:
library(sf) # 将SPDF转为sf对象,自动保留原UTM坐标系 sf_obj <- st_as_sf(MAP_HERE) # 转换到WGS84(EPSG:4326,即十进制经纬度) sf_wgs84 <- st_transform(sf_obj, crs = 4326) # 此时可提取经纬度坐标 head(st_coordinates(sf_wgs84))
2. 获取原SPDF的边界框
直接用bbox()函数获取原UTM坐标系下的边界框:
# 提取边界框(返回min/max的x、y值矩阵) map_bbox <- bbox(MAP_HERE) print(map_bbox)
如果已经转为sf对象,也可以用st_bbox():
sf_bbox <- st_bbox(sf_obj)
3. 计算多边形质心
推荐:基于原UTM坐标系计算(平面坐标系质心精度更高)
# 计算原坐标系下的质心 centroids_utm <- st_centroid(sf_obj) # 按需转换为经纬度格式 centroids_wgs84 <- st_transform(centroids_utm, crs = 4326) # 提取质心的经纬度数值 centroid_coords <- st_coordinates(centroids_wgs84) head(centroid_coords)
可选:直接在经纬度坐标系计算(精度略低)
若不需要高精度,也可以直接在WGS84下计算:
centroids_wgs84 <- st_centroid(sf_wgs84)
内容的提问来源于stack exchange,提问作者Abed
相关产品推荐
相关产品推荐

