Luc*_*ion 8 r polygon centroid r-sf
我试图使用新的"sf"包来操纵R中的一些巴西人口普查数据.我能够导入数据,但是当我尝试创建原始多边形的质心时出现错误
library(sf)
#Donwload data
filepath <- 'ftp://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_de_setores_censitarios__divisoes_intramunicipais/censo_2010/setores_censitarios_shp/ac/ac_setores_censitarios.zip'
download.file(filepath,'ac_setores_censitarios.zip')
unzip('ac_setores_censitarios.zip')
d <- st_read('12SEE250GC_SIR.shp',stringsAsFactors = F)
Run Code Online (Sandbox Code Playgroud)
现在我尝试创建一个包含"几何体"列的质心的新几何列,但是会收到错误:
d$centroid <- st_centroid(d$geometry)
Warning message:
In st_centroid.sfc(d$geometry) :
st_centroid does not give correct centroids for longitude/latitude data
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
底层的所有GEOS功能都sf需要投影坐标才能正常工作,因此您应该运行st_centroid适当的投影数据.我对巴西现有的CRS不太了解,但EPSG:29101似乎运行良好:
library(tidyverse)
d$centroids <- st_transform(d, 29101) %>%
st_centroid() %>%
# this is the crs from d, which has no EPSG code:
st_transform(., '+proj=longlat +ellps=GRS80 +no_defs') %>%
# since you want the centroids in a second geometry col:
st_geometry()
# check with
plot(st_geometry(d))
plot(d[, 'centroids'], add = T, col = 'red', pch = 19)
Run Code Online (Sandbox Code Playgroud)