13

I am trying to manipulate some Brazilian Census data in R using the new "sf" package. I am able to import the data, but I get an error when I try to create the centroids of the original polygons

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) 

Now I try to create a new geometry column containing the centroid of column "geometry", but get an error:

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

How can I solve this?

www
  • 35,154
  • 12
  • 33
  • 61
LucasMation
  • 1,886
  • 2
  • 15
  • 38

1 Answers1

16

All the GEOS functions underlying sf need projected coordinates to work properly, so you should run st_centroid on appropriately projected data. I don't know much about Brazil's available CRS's, but EPSG:29101 appears to work fine:

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)
obrl_soil
  • 772
  • 8
  • 22
  • Second plot() call gives me "plotting list-columns not supported". I wasn't able to get any centroids in the column either, not sure if answer is oudated (they change sf package often). – CoderGuy123 Sep 30 '19 at 04:38
  • 1
    Hi @Deleet, looks like one has to activate the secondary geometry column before plotting now, e.g. `plot(st_set_geometry(d, 'centroids')[, 0], add = T, col = 'red', pch = 19)`. I'm using `sf` 0.8-0 in a Windows environment. – obrl_soil Sep 30 '19 at 13:19