2017-09-12 90 views
1

我想使用新的「sf」包在R中操作一些巴西人口普查數據。我能夠導入數據,但我得到一個錯誤,當我嘗試創建原始多邊形如何使用sf :: st_centroid來計算多邊形的質心?

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) 

現在我試圖創建一個包含列「幾何」的心一個新的幾何列的重心,但出現錯誤:

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 

我該如何解決這個問題?

+1

這不是一個錯誤,它是一個警告。值被創建。 –

回答

2

底層爲sf的所有GEOS功能需要投影座標才能正常工作,因此您應該在適當投影的數據上運行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) 
相關問題