ipeaGIT / geobr

Easy access to official spatial data sets of Brazil in R and Python
https://ipeagit.github.io/geobr/
807 stars 119 forks source link

Área de atuação da Sudene e Semiárido #307

Open diegomsg opened 1 year ago

diegomsg commented 1 year ago

Como poderia ajudar a inserir os dados disponíveis em Sudene/Sigmapas no pacote? Não tenho muita experiência com geoprocessamento em R, muito menos em Python, mas alguma experiência em ferramentas SIG.

rafapereirabr commented 1 year ago

Oi Diego.

Aqui tem um passo-a-passo sobre como contribuir com o geobr.

O dado do poligono do semiário ja está disponivel no geobr com a função read_semiarid().

O site que voce apontou só tem o de "Área de atuação da Sudene" para o ano de 2022. Você sabe onde encontrar essa informação para outros anos?

ps. Podemos utilizar a lista de municípios indicados na regulamentação da Sudene, mas o ideal seria usar os polígonos da malha municipal do IBGE, que são as fronteiras oficiais dos municipios.

diegomsg commented 1 year ago

A definição anterior, de 2007, não é georreferenciada pelo órgão, e seguem o disposto na lei complementar 125, de 03/01/2007. O resumo das cidades fora da região NE que integram a área de atuação são listados em página antiga da Sudene, sem utilizar geocódigo IBGE ou outra informação para cruzar com database IBGE. Não encontrei essa informação em nenhuma database IBGE publicada. Como a premissa é de dados publicados por instituição pública, ficaria pendente.

rafapereirabr commented 1 year ago

Você poderia gerar um data.frame com os nomes e códigos do IBGE para todos esses municipios da lei complementar 125, de 03/01/2007 ?

name_muni code_muni
diegomsg commented 1 year ago

dataframe a partir da base geobr::read_municipality

# Área de atuação Sudene, ano 2007
# Script para definir data.frame que espelhe delimitação
# conforme LC 125, de 03/01/2007

library("geobr")
#> Loading required namespace: sf
library("tidyverse")

municipios <- read_municipality(year = 2020, showProgress = FALSE)
#> Using year 2020
nordeste <- municipios %>%
  select("code_muni", "name_muni", "abbrev_state") %>%
  mutate("regiao" = trunc(code_muni / 1e6)) %>%
  filter(regiao == 2)

mg_es <- municipios %>% 
  select("code_muni", "name_muni", "abbrev_state") %>%
  filter(code_muni %in% c(3100906, 3101003, 3101706, 3102704, 3102852, 3103405, 3104452, 3104502, 3104700, 3105202, 3106507, 3106606, 3106655, 3107307, 3108255, 3108503, 3108602, 3109402, 3110806, 3111150, 3112307, 3112703, 3113008, 3113503, 3113701, 3115458, 3115474, 3116100, 3116159, 3116506, 3117009, 3117836, 3118809, 3119500, 3120102, 3120151, 3120300, 3120870, 3121001, 3121605, 3122355, 3122454, 3123809, 3124302, 3125408, 3125507, 3125606, 3126208, 3126505, 3126604, 3126703, 3126752, 3126802, 3127057, 3127073, 3127339, 3127354, 3127800, 3128253, 3129608, 3129657, 3130051, 3130655, 3132008, 3132107, 3132305, 3132503, 3132701, 3133303, 3134004, 3134707, 3135050, 3135100, 3135209, 3135357, 3135456, 3135605, 3135803, 3136009, 3136504, 3136520, 3136579, 3136801, 3136959, 3137007, 3137304, 3138104, 3138351, 3138658, 3138682, 3138906, 3139201, 3139250, 3139300, 3140555, 3140852, 3141009, 3141405, 3141801, 3142007, 3142254, 3142700, 3142908, 3143153, 3143302, 3143450, 3144300, 3144656, 3145059, 3145307, 3145356, 3145372, 3145455, 3146206, 3146255, 3146305, 3146552, 3146750, 3147956, 3148509, 3148707, 3149150, 3150000, 3150570, 3151206, 3152131, 3152170, 3152204, 3152402, 3154457, 3154507, 3155108, 3155603, 3156007, 3156502, 3156601, 3157005, 3157104, 3157377, 3157609, 3157658, 3158102, 3160306, 3160454, 3161106, 3162252, 3162401, 3162450, 3162658, 3162708, 3164209, 3165552, 3165909, 3166709, 3166956, 3167103, 3168002, 3168606, 3169703, 3170008, 3170305, 3170529, 3170651, 3170800, 3170909, 3171030, 3171071, 3171600, 3200136, 3200169, 3200359, 3200805, 3200904, 3201001, 3201506, 3201605, 3202108, 3202256, 3203056, 3203205, 3203304, 3203353, 3203502, 3203601, 3203908, 3204005, 3204054, 3204104, 3204252, 3204351, 3204658, 3204708, 3204906, 3205010, 3205150, 3205176))

sudene <- bind_rows(nordeste, mg_es) %>%
  arrange(regiao, abbrev_state, name_muni)

Created on 2023-03-10 with reprex v2.0.2

Essa informação é suficiente? Quando tiver mais um tempinho faço os scripts:

rafapereirabr commented 1 year ago

ótimo. Isso já ajuda muito, @diegomsg. A gente precisa pensar na ideia da função.

Faz sentido ter três funções separadas?

Ou uma única função em que a pessoa passa a região de interesse. Algo como:

Qualquer que seja a escolha, a função deve ter um parâmetro year para indicar o ano de referência dos municipios que estavam sob a superintendencia.

Em principio, eu preferiria uma função só, mas isso pode complicar um pouco as coisas porque as leis que definem os muninicios de cada superintendencia podem ter sido publicadas em anos diferentes. Se usarmos funcoes separadas, cada função pode ser seu próprio default value para o parametro year.

diegomsg commented 1 year ago

Acho melhor a abordagem de 1 só função, especialmente quando o interesse é nas regiões de desenvolvimento incentivado, e as superintendências definem subconjuntos destas.

read_development_region(region = c('NE', 'CO', 'AM', year = c('current', 2022, 2007, ...) )),

Sendo que current = tapply(df$development_regions, df$year, max)

Seria possível? Acha interessante a opção current?

rafapereirabr commented 1 year ago

Eu acho que gosto da ideia do current, no sentido de que ela usaria a lei mais recente que define a lista de municipios. Mas minha preocupação é como fazer o parâmetro do year funcionar com o passar dos anos por conta de eventuais serapações de municipios.

Pensando aqui o comportamento da função:

Caso 1

read_development_region(region = "NE", year = 2022)

Caso 2

read_development_region(region = "NE", year = 2007)

Caso 3

read_development_region(region = "NE", year = 2015)

Sugiro isso porque pode ter havido algum desmembramento de municipios entre 2007 e 2015, e isso tornaria a funcao muito mais complicada.

O que acha?

diegomsg commented 1 year ago

Não entendi a necessidade de erro, já que há disponibilidade de dados das municipalidades nos respectivos anos.

O join para as informações sf de municípios inseridos na lei da região de desenvolvimento incentivado no ano year não se dá com o read_municipality() no respectivo ano?

Assim o código anteriormente mencionado fica com o ano.

# Área de atuação Sudene, ano 2007
# conforme LC 125, de 03/01/2007

library("geobr")
library("tidyverse")

year = 2007
municipios <- read_municipality(year = year, showProgress = FALSE)
#> Using year 2007
nordeste <- municipios %>%
  select("code_muni", "name_muni", "abbrev_state") %>%
  mutate("regiao" = trunc(code_muni / 1e6)) %>%
  filter(regiao == 2)

mg_es <- municipios %>% 
  select("code_muni", "name_muni", "abbrev_state") %>%
  filter(code_muni %in% c(3100906, 3101003, 3101706, 3102704, 3102852, 3103405, 3104452, 3104502, 3104700, 3105202, 3106507, 3106606, 3106655, 3107307, 3108255, 3108503, 3108602, 3109402, 3110806, 3111150, 3112307, 3112703, 3113008, 3113503, 3113701, 3115458, 3115474, 3116100, 3116159, 3116506, 3117009, 3117836, 3118809, 3119500, 3120102, 3120151, 3120300, 3120870, 3121001, 3121605, 3122355, 3122454, 3123809, 3124302, 3125408, 3125507, 3125606, 3126208, 3126505, 3126604, 3126703, 3126752, 3126802, 3127057, 3127073, 3127339, 3127354, 3127800, 3128253, 3129608, 3129657, 3130051, 3130655, 3132008, 3132107, 3132305, 3132503, 3132701, 3133303, 3134004, 3134707, 3135050, 3135100, 3135209, 3135357, 3135456, 3135605, 3135803, 3136009, 3136504, 3136520, 3136579, 3136801, 3136959, 3137007, 3137304, 3138104, 3138351, 3138658, 3138682, 3138906, 3139201, 3139250, 3139300, 3140555, 3140852, 3141009, 3141405, 3141801, 3142007, 3142254, 3142700, 3142908, 3143153, 3143302, 3143450, 3144300, 3144656, 3145059, 3145307, 3145356, 3145372, 3145455, 3146206, 3146255, 3146305, 3146552, 3146750, 3147956, 3148509, 3148707, 3149150, 3150000, 3150570, 3151206, 3152131, 3152170, 3152204, 3152402, 3154457, 3154507, 3155108, 3155603, 3156007, 3156502, 3156601, 3157005, 3157104, 3157377, 3157609, 3157658, 3158102, 3160306, 3160454, 3161106, 3162252, 3162401, 3162450, 3162658, 3162708, 3164209, 3165552, 3165909, 3166709, 3166956, 3167103, 3168002, 3168606, 3169703, 3170008, 3170305, 3170529, 3170651, 3170800, 3170909, 3171030, 3171071, 3171600, 3200136, 3200169, 3200359, 3200805, 3200904, 3201001, 3201506, 3201605, 3202108, 3202256, 3203056, 3203205, 3203304, 3203353, 3203502, 3203601, 3203908, 3204005, 3204054, 3204104, 3204252, 3204351, 3204658, 3204708, 3204906, 3205010, 3205150, 3205176))

sudene <- bind_rows(nordeste, mg_es) %>%
  arrange(regiao, abbrev_state, name_muni)

Como o geobr tem disponíveis sf`` para os anos 1872, 1900, 1911, 1920, 1933, 1940, 1950, 1960, 1970, 1980, 1991, 2000, 2001, 2005, 2007, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, quando a região de desenvolvimento tiver ano definido posterior aocurrent, definido porifelse( development_region$year > mucipality$current, mucipality$current, development_region$year )`

Sendo mucipality$current, assim definido:

library(geobr)
library(dplyr)
library(stringr)
geobr_muni <- geobr::list_geobr()
years_available <- geobr_muni$years[8]
current <- str_trim(years_available) %>% 
    str_extract_all("\\b\\d*\\b") %>%
    unlist() %>%
    as.integer() %>%
    max()
rafapereirabr commented 1 year ago

Estou com um pouco de dificuldade de entender como a implentação do year = "current" iria funcionar. Isso aqui foi a 1a ideia que me veio a cabeça de como essa funcão funcionaria. Nesse exemplo aqui funcionando apenas para SUDENE, e precisariamos atualizar /checar a lista de codigos de municipios de 2007 e 2020. Por favor, fique a vontade para sugerir melhorias no código / funcionamento da função.

library(geobr)

read_development_region <- function(region, year = 2020, simplified = TRUE, showProgress = TRUE){

  # check region input
  checkmate::assert_true(region %in% c('NE'))

  ### SUDENE --------------------------------------------------------
  if(region == 'NE') {  

    # check year input
    checkmate::assert_true(year %in% c(2007, 2020)) 

    # Municipalities under Sudene in 2007
    sudene_2007 <- c(3100906, 3101003, 3101706, 3102704, 3102852, 3103405, 
                     3104452, 3104502, 3104700, 3105202, 3106507, 3106606, 
                     3106655, 3107307, 3108255, 3108503, 3108602, 3109402, 
                     3110806, 3111150, 3112307, 3112703, 3113008, 3113503, 
                     3113701, 3115458, 3115474, 3116100, 3116159, 3116506, 
                     3117009, 3117836, 3118809, 3119500, 3120102, 3120151, 
                     3120300, 3120870, 3121001, 3121605, 3122355, 3122454, 
                     3123809, 3124302, 3125408, 3125507, 3125606, 3126208, 
                     3126505, 3126604, 3126703, 3126752, 3126802, 3127057, 
                     3127073, 3127339, 3127354, 3127800, 3128253, 3129608, 
                     3129657, 3130051, 3130655, 3132008, 3132107, 3132305, 
                     3132503, 3132701, 3133303, 3134004, 3134707, 3135050, 
                     3135100, 3135209, 3135357, 3135456, 3135605, 3135803, 
                     3136009, 3136504, 3136520, 3136579, 3136801, 3136959, 
                     3137007, 3137304, 3138104, 3138351, 3138658, 3138682, 
                     3138906, 3139201, 3139250, 3139300, 3140555, 3140852, 
                     3141009, 3141405, 3141801, 3142007, 3142254, 3142700, 
                     3142908, 3143153, 3143302, 3143450, 3144300, 3144656, 
                     3145059, 3145307, 3145356, 3145372, 3145455, 3146206, 
                     3146255, 3146305, 3146552, 3146750, 3147956, 3148509, 
                     3148707, 3149150, 3150000, 3150570, 3151206, 3152131, 
                     3152170, 3152204, 3152402, 3154457, 3154507, 3155108, 
                     3155603, 3156007, 3156502, 3156601, 3157005, 3157104, 
                     3157377, 3157609, 3157658, 3158102, 3160306, 3160454, 
                     3161106, 3162252, 3162401, 3162450, 3162658, 3162708, 
                     3164209, 3165552, 3165909, 3166709, 3166956, 3167103, 
                     3168002, 3168606, 3169703, 3170008, 3170305, 3170529, 
                     3170651, 3170800, 3170909, 3171030, 3171071, 3171600, 
                     3200136, 3200169, 3200359, 3200805, 3200904, 3201001, 
                     3201506, 3201605, 3202108, 3202256, 3203056, 3203205, 
                     3203304, 3203353, 3203502, 3203601, 3203908, 3204005, 
                     3204054, 3204104, 3204252, 3204351, 3204658, 3204708, 
                     3204906, 3205010, 3205150, 3205176)
    # Municipalities under Sudene in 2020
    sudene_2020 <- c(3100906, 3101003, 3101706, 3102704, 3102852, 3103405, 
                     3104452, 3104502, 3104700, 3105202, 3106507, 3106606) 

    # download data
    munis_br <- read_municipality(code_muni = 'all',
                                  year = year, 
                                  simplified = simplified,
                                  showProgress = showProgress
                                  )

    # filter data
    temp_ne1 <- subset(munis_br, substring(munis_br$code_state, 1, 1) == "2")

    if (year == 2007) { temp_ne2 <- subset(munis_br, code_muni %in% sudene_2007) }
    if (year == 2020) { temp_ne2 <- subset(munis_br, code_muni %in% sudene_2020) }

    temp_sf <- rbind(temp_ne1, temp_ne1)
    return(sudene_2007)
    }

    ### SUDEAN --------------------------------------------------------
    # ....

}

test <- read_development_region(region = 'NE', year = 2007)
plot(temp_ne1['code_state'])
diegomsg commented 1 year ago

Pensei no current como solução para a última alteração da área de abrangência da Sudene, em 2021. A malha digital do IBGE em read_municipality vai até 2020.

Dê uma olhada no código a seguir, e fique à vontade para alterá-lo. Tive dificuldade com strings e subsets sem precisar de pacotes adicionais.


library(geobr)

read_development_region <- function(region, year = 'current', simplified = TRUE, showProgress = TRUE){

  # check region input
  checkmate::assert_true(region %in% c('NE', 'N', 'all'))

  ### SUDENE --------------------------------------------------------
  if(region == 'NE') {  

    # years available in database
    years <- c(2007, 2021)

    # check year input
    checkmate::assert_true(year %in% c(years, 'current'))

    # assign latest year available if current is chosen
    if(year == 'current') year <- max(years)

    # Municipalities under Sudene in 1998
    sudene_1998 <- c(3101706, 3103405, 3105202, 3106507, 3102704, 3112307, 
                     3113008, 3113503, 3116100, 3117009, 3119500, 3120102, 
                     3121001, 3121605, 3122454, 3125408, 3125606, 3126505, 
                     3132503, 3133303, 3134004, 3134707, 3135803, 3136009, 
                     3136504, 3139201, 3140555, 3141405, 3141801, 3143450, 
                     3145307, 3146305, 3146750, 3148707, 3155108, 3156007, 
                     3156601, 3157104, 3158102, 3160306, 3165909, 3125507, 
                     3167103, 3169703, 3171600, 3200805, 3201506, 3203205, 
                     3203353, 3204351, 3204658, 3204005, 3205010, 3200359, 
                     3200136, 3204708, 3205176, 3203056, 3203304, 3200904, 
                     3205150, 3200169, 3203908, 3204906, 3201605, 3201001, 
                     3204104, 3202108, 3204252, 3203502, 3203601, 3204054)

    # Municipalities under Sudene in 2007
    sudene_2007 <- c(3100906, 3101003, 3101706, 3102704, 3102852, 3103405, 
                     3104452, 3104502, 3104700, 3105202, 3106507, 3106606, 
                     3106655, 3107307, 3108255, 3108503, 3108602, 3109402, 
                     3110806, 3111150, 3112307, 3112703, 3113008, 3113503, 
                     3113701, 3115458, 3115474, 3116100, 3116159, 3116506, 
                     3117009, 3117836, 3118809, 3119500, 3120102, 3120151, 
                     3120300, 3120870, 3121001, 3121605, 3122355, 3122454, 
                     3123809, 3124302, 3125408, 3125507, 3125606, 3126208, 
                     3126505, 3126604, 3126703, 3126752, 3126802, 3127057, 
                     3127073, 3127339, 3127354, 3127800, 3128253, 3129608, 
                     3129657, 3130051, 3130655, 3132008, 3132107, 3132305, 
                     3132503, 3132701, 3133303, 3134004, 3134707, 3135050, 
                     3135100, 3135209, 3135357, 3135456, 3135605, 3135803, 
                     3136009, 3136504, 3136520, 3136579, 3136801, 3136959, 
                     3137007, 3137304, 3138104, 3138351, 3138658, 3138682, 
                     3138906, 3139201, 3139250, 3139300, 3140555, 3140852, 
                     3141009, 3141405, 3141801, 3142007, 3142254, 3142700, 
                     3142908, 3143153, 3143302, 3143450, 3144300, 3144656, 
                     3145059, 3145307, 3145356, 3145372, 3145455, 3146206, 
                     3146255, 3146305, 3146552, 3146750, 3147956, 3148509, 
                     3148707, 3149150, 3150000, 3150570, 3151206, 3152131, 
                     3152170, 3152204, 3152402, 3154457, 3154507, 3155108, 
                     3155603, 3156007, 3156502, 3156601, 3157005, 3157104, 
                     3157377, 3157609, 3157658, 3158102, 3160306, 3160454, 
                     3161106, 3162252, 3162401, 3162450, 3162658, 3162708, 
                     3164209, 3165552, 3165909, 3166709, 3166956, 3167103, 
                     3168002, 3168606, 3169703, 3170008, 3170305, 3170529, 
                     3170651, 3170800, 3170909, 3171030, 3171071, 3171600, 
                     3200136, 3200169, 3200359, 3200805, 3200904, 3201001, 
                     3201506, 3201605, 3202108, 3202256, 3203056, 3203205, 
                     3203304, 3203353, 3203502, 3203601, 3203908, 3204005, 
                     3204054, 3204104, 3204252, 3204351, 3204658, 3204708, 
                     3204906, 3205010, 3205150, 3205176)

    # Municipalities under Sudene in 2021
    sudene_2021 <- c(3101003, 3144656, 3144300, 3166709, 3203502, 3204054, 
                     3136959, 3108255, 3116159, 3117836, 3126208, 3132107, 
                     3135209, 3139300, 3142254, 3142700, 3149150, 3162450, 
                     3143450, 3162708, 3105202, 3122355, 3122454, 3136504, 
                     3140555, 3148707, 3157104, 3134707, 3146750, 3158102, 
                     3160306, 3106606, 3157658, 3170305, 3124302, 3127339, 
                     3140852, 3156601, 3113701, 3101706, 3201605, 3204104, 
                     3139250, 3100500, 3108800, 3127503, 3127701, 3128006, 
                     3144359, 3149952, 3157500, 3161601, 3167707, 3171808, 
                     3100609, 3102852, 3104452, 3112307, 3126752, 3132701, 
                     3136553, 3137007, 3139201, 3158201, 3163003, 3164100, 
                     3164506, 3165552, 3100906, 3120151, 3127057, 3136009, 
                     3138906, 3143153, 3145356, 3102704, 3106655, 3120870, 
                     3157377, 3101102, 3118403, 3134103, 3144003, 3154309, 
                     3159506, 3200805, 3202702, 3202900, 3135803, 3101805, 
                     3112653, 3123700, 3125804, 3133204, 3169505, 3102209, 
                     3130903, 3168408, 3156809, 3167103, 3141405, 3141801, 
                     3103405, 3113008, 3116100, 3119500, 3126505, 3133303, 
                     3134004, 3135456, 3145307, 3146305, 3152170, 3171600, 
                     3132503, 3104502, 3154457, 3164209, 3170479, 3170529, 
                     3104700, 3126802, 3131802, 3141504, 3144672, 3144904, 
                     3146206, 3150000, 3161056, 3163300, 3168606, 3200169, 
                     3200904, 3202108, 3203908, 3205150, 3121605, 3138104, 
                     3106507, 3120300, 3127800, 3136520, 3138351, 3169703, 
                     3125606, 3155108, 3168002, 3107307, 3108503, 3113503, 
                     3116506, 3118809, 3120102, 3123809, 3126604, 3127354, 
                     3128253, 3132008, 3136801, 3143302, 3145455, 3162252, 
                     3165909, 3108206, 3122470, 3144375, 3157609, 3126703, 
                     3109402, 3108602, 3111150, 3130051, 3135357, 3138682, 
                     3142007, 3147956, 3161106, 3162401, 3162658, 3170008, 
                     3123106, 3129608, 3137304, 3151206, 3152131, 3170800, 
                     3110806, 3126901, 3135076, 3112059, 3148608, 3162807, 
                     3171071, 3127305, 3112703, 3135100, 3170909, 3115458, 
                     3132305, 3130556, 3150158, 3157252, 3159357, 3160959, 
                     3164472, 3170057, 3148509, 3203601, 3113800, 3166105, 
                     3115474, 3141009, 3142908, 3146552, 3152204, 3115706, 
                     3122108, 3139607, 3161650, 3162575, 3203304, 3150570, 
                     3135605, 3116803, 3126950, 3140605, 3148400, 3156007, 
                     3163508, 3117009, 3156502, 3157005, 3168051, 3121001, 
                     3120839, 3127370, 3119203, 3140100, 3144201, 3165503, 
                     3171907, 3125408, 3125507, 3166501, 3136579, 3200359, 
                     3160207, 3122207, 3135050, 3160454, 3154507, 3152402, 
                     3171501, 3127073, 3145372, 3146255, 3155603, 3129657, 
                     3138658, 3130655, 3170651, 3204005, 3171030, 3145059, 
                     3166956, 3200136, 3202256, 3204658, 3204708, 3200607, 
                     3203205, 3201506, 3201001, 3204252, 3204906, 3203353, 
                     3204351, 3205176, 3203056, 3205010) 

    # if current year not available in municipality data, use the latest available
    muni_years <- list_geobr()[which(list_geobr()$'function' == '`read_municipality`'), 'years']
    years_list <- strsplit(muni_years, ",")
    muni_current_year <- max( as.numeric( unlist( years_list ) ) )

    # download data
    munis_br <- read_municipality(code_muni = 'all',
                                  year = if (year > muni_current_year) muni_current_year else year, 
                                  simplified = simplified,
                                  showProgress = showProgress
    )

    # filter data
    temp_ne1 <- subset(munis_br, substring(munis_br$code_state, 1, 1) == "2")

    if (year == 2007) { temp_ne2 <- subset(munis_br, code_muni %in% sudene_2007) }
    if (year == 2021) { temp_ne2 <- subset(munis_br, code_muni %in% sudene_2021) }

    temp_sf <- rbind(temp_ne1, temp_ne2)
    return(temp_sf)
  }

  ### SUDAM --------------------------------------------------------
  if(region == 'N') {  

    # years available in database
    years <- c(2007)

    # check year input
    checkmate::assert_true(year %in% c(years, 'current'))

    # assign latest year available if current is chosen
    if(year == 'current') year <- max(years)

    # if current year not available in municipality data, use the latest available
    muni_years <- list_geobr()[which(list_geobr()$'function' == '`read_municipality`'), 'years']
    years_list <- strsplit(muni_years, ",")
    muni_current_year <- max( as.numeric( unlist( years_list ) ) )

    # download data
    munis_br <- read_municipality(code_muni = 'all',
                                  year = if (year > muni_current_year) muni_current_year else year, 
                                  simplified = simplified,
                                  showProgress = showProgress
    )

    # Municipalities under Sudam in 2007
    sudam_2007 <- subset(munis_br, substring(munis_br$code_state, 1, 2) == "51" |
                           substring(munis_br$code_state, 1, 1) == "1" )

    # Assign data
    if (year == 2007) { N <- sudam_2007 }

    return(N)
  }

}

sudam <- read_development_region(region = 'N', year = 'current')
sudene <- read_development_region(region = 'NE', year = 'current')
plot(sudam['code_state'])
plot(sudene['code_state'])
diegomsg commented 1 year ago

Acabei deixando na verificação checkmate::assert_true(region %in% c('NE', 'N', 'all')) mas não implementei, pois não sei qual a melhor abordagem, rodar a função recorrentemente (faz o download de munis_br 2 vezes?) ou definir subsets inteiros em novo if?

rafapereirabr commented 1 year ago

Oi @diegomsg . Obrigado pelos ajustes na funcao e atualizacao na lista de municipios! Ainda preciso checar o funcionamento da funcao com mais calma, mas atpe agora esse é o trecho que mais me 'preocupa'.

    # if current year not available in municipality data, use the latest available
    muni_years <- list_geobr()[which(list_geobr()$'function' == '`read_municipality`'), 'years']
    years_list <- strsplit(muni_years, ",")
    muni_current_year <- max( as.numeric( unlist( years_list ) ) )

Eu entendo a motivação de pegar a malha de municipios mais recente com current. No entanto, minha preocupação é se houver desmembramento de municipio. Exemplo, vamos selecionar o municipio 3101003 que faz parte da Sudene do decreto de 20221. Agora suponha q esse município tenha se desmembrado em dois : 1234567 e o municipio original mantem o codigo 3101003. Com esse codigo acima que voce sugere, os dados baixados pelo geobr não irá incluir o novo municipio 1234567, e vai deixar um buraco no mapa.

A alternativa que eu tinha pensado era essa aqui. Nesse caso, quando o usuario escolhe year = current, o geobr baixa a lista de municipios da legislação vigente considerando a malha de municipios no ano da publicação da legislação.

    # assign latest year available if current is chosen
    if (year == 'current') { year <- max(years) }

    # download data
    munis_br <- read_municipality(code_muni = 'all',
                                  year = year, 
                                  simplified = simplified,
                                  showProgress = showProgress
    )

Enfim, acho que ambas estratégias tem suas vantagens e desvantagens. E isso levanta uma pergunta, o que acontece com o município 1234567? Legalmente, ele faz parte da SUDENE? Eu nao sei. Talvez ter essa resposta ajude a gente a decidir qual abordagem seguimos.

ps. agradeço sua paciencia com a demora das minhas respostas. Eu minha filha deve nascer nos proximos dias e as coisas aqui estao bem corridas antes da chegada dela.

diegomsg commented 1 year ago

Primeiro vamos à parte importante da vida: parabéns pela bebê que tá chegando, muita saúde pra ela e pra mãe.

Agora com relação ao geobr, se entendi bem seu código, vejo a sua abordagem com a mesma dificuldade principal do que propus, pois max(years) in read_development_region( "NE" ) > max(years) in munis_br

Com Sudene em 2021 e read_municipality até 2020, esse código vai dar erro:

 # assign latest year available if current is chosen
    if (year == 'current') { year <- max(years) }

    # download data
    munis_br <- read_municipality(code_muni = 'all',
                                  year = year, 
                                  simplified = simplified,
                                  showProgress = showProgress
    )

O impacto da inexistência de município presente em sudene$max(years) é possível fora da região NE, em MG e ES. A lei 125 de 2021 prevê no Art. 2 p. único:

Quaisquer municípios criados, ou que venham a sê-lo, por desmembramento dos entes municipais integrantes da área de atuação da Sudene de que trata o caput deste artigo, serão igualmente considerados como integrantes de sua área de atuação.

Não vejo como atribuir isso na função sem uma relação (1-*) município anterior - municípios desmembrados.