Brasil/Metodologia/Importação de endereços/Agro

From OpenStreetMap Wiki
Jump to navigation Jump to search

Importação de endereços rurais, baseados no censo Agro2017 e outras fontes.

O foco são os dados do Censo Agropecuário de 2017, com download disponível no ftp.ibge.gov.br/Censo_Agropecuario_2017.

O IBGE conceitua estabelecimento agropecuário como "(...) toda unidade de produção ou exploração dedicada, total ou parcialmente, a atividades agropecuárias, florestais e aquícolas. Independentemente de seu tamanho, de sua forma jurídica ou de estar na área rural ou urbana. Todo estabelecimento agropecuário tem como objetivo a produção, seja para venda ou para subsistência".

Exemplo de perfil do Estado de Sâo Paulo:

189 mil estabelecimentos agropecuários: 188656 registros com endereço
Est. agro com coordenadas: 99,96%   (0,04% sem coordenadas)
Enderecos sem número: 69%
Enderecos em "logradouros sem denominacao": 1,9%

Conferindo dados e definindo canônicos

Os dados se encontram disponíveis em mais de uma URL, e não há indicação clara de "URL canônica". Disponível em HTTP de ibge.gov.br/estatisticas-novoportal/economicas/agricultura-e-pecuaria e em FTP de ftp.ibge.gov.br/Censo_Agropecuario_2017.

Foram encontrados mesmos nomes de arquivo em duas pastas do HTTP e uma do FTP. Usando como amostra as 3 versões de 35_SAO_PAULO.zip:

VERIFICAÇÃO: todos os 3 com mesmo tamanho de arquivo (17M) e mesmo SHA1 be6a4804087257ef0c67167106d4b0aeee3a3731.
Conclusão: idênticos.
Elegendo como canônico o ftp://ftp.ibge.gov.br/Censo_Agropecuario/Censo_Agropecuario_2017/Cadastro_Nacional_de_Enderecos_Fins_Estatisticos/35_SAO_PAULO.zip.

Dentro do zip de SP conferindo dados do município de ITAPETININGA (código 3522307) que possui os dados duplicados em 3 arquivos:

  1. 35_SAO_PAULO/3522307_ITAPETININGA.csv, dados selecionados exclusivos do município. Usando como referência para as comparações. Número de linhas: wc -l resultou em 1290+1 (linha de cabeçalho e linhas de registro).
  2. 35_SAO_PAULO/3522307_ITAPETININGA.kml, supostamente os mesmos dados que o .csv convertidos para formato XML KML.
    TESTE: campos do cabeçalho CSV coincidem com nomes listados pelo XPath /kml/Document/Schema/SimpleField/@name. Quanto ao conteúdo, breve amostragem de 3 mostrou que são mesmos valores. Quanto à quantidade de items, grep "<Placemark>" 35_SAO_PAULO/3522307_ITAPETININGA.kml | wc -l resulta em 1290, o esperado.
  3. 35_SAO_PAULO/35_SAO_PAULO.csv, supostamente contendo mesmo cabeçalho e todas as linhas de dados de 3522307_ITAPETININGA.csv.
    TESTE: cabeçalho CSV é o mesmo. Amostras de dados com exatamente as mesmas linhas. Grande chance de ser o mesmo. Verificando número de linhas: grep "35;22307;" 35_SAO_PAULO/3522307_ITAPETININGA.csv | wc -l resulta 1291. Idem grep "35;22307;" 35_SAO_PAULO/35_SAO_PAULO.csv | wc -l.

Conclusão: pode-se supor todos com registros idênticos, pois há também suposta intenção do IBGE em apenas oferecer opções de formato.

Decisão: por se tratarem de dados tabulares simples (a geometria está precisamente determinada plas colunas latitude e longitude), mais simples e rápido carregar para o PostgreSQL via CSV global, com o Estado de SP inteiro, 35_SAO_PAULO.csv, definido portanto como canônico.

Interpretação dos pontos no OSM

Será que os pontos são úteis para o OSM? Antes de avançar importante saber se a análise representa esperança de investimento para o OSM.

  • Real significado do "ponto de estabelecimento": em geral ponto de endereço da sede, mas pode ser ponto de endereço do acesso principal, ou ainda ponto da entrevista (ex. em vila sem sede ou centro definido).
    1. a definição deixa clara que é estabelecimento de produção, o local onde se trabalha e que tem uma determinada área de plantio.
      PS: não se trata da residência do produtor rural, como num primeiro se imagina do Censo, mesmo que em alguns casos (ex. produção de subsistência) haja essa coincidência. O "censo de pessoas trabalhando no campo" não existe, o que o IBGE oferece é uma estimativa de número de "pessoas ocupadas em atividades agropecuárias" (ex. em SP são ~831 mil), que são as pessoas que trabalham nos espabelecimentos registrados.
    2. o formulaŕio dá a entender, pelos campos c7 e c12, que é eleito um ponto, supostamente "ponto de endereço", arbitrado pelo entrevistado (representante do estabelecimento produtivo), e a latitude e longitude referem-se ou ao GPS no local da entrevista ou ao ponto de endereço confirmado presencialmente pelo entrevistador.
  • classificação com tags OSM: haveria até como usar a Key:produce mas seu taginfo mostra que é praticamente sem uso pelo mundo. Como os dados objetivos nas tabelas (por hora) baixadas são limitados, sugere-se decidir pelo campo nom_tipo_seglogr
    • endereço de fazenda (farm): valores "ESTRADA", "RODOVIA", "RUA", etc.
    • ponto da sede da fazenda: valores "SEDE", "SITIO", "FAZENDA", "ESTANCIA", etc.
    • ponto de entrada da fazenda: valores "ENTRADA", "ACESSO", etc.
    • ponto de acesso ao local: valores "ASSENTAMENTO", "QUILOMBO", "LOTEAMENTO", etc.

Carga

Depois de ajustar utf8, iconv -f "ISO8859-1" -t "UTF-8" 35_SAO_PAULO.csv > /tmp/35_SAO_PAULO_utf8.csv, se a tabela ainda não foi criada, criar, e copiar o estado.

CREATE TABLE ibge_agro2017 (
    COD_UF int,
    COD_MUNICIPIO int,
    COD_DISTRITO int,
    COD_SUBDISTRITO int,
    SITUACAO int,
    NOM_TIPO_SEGLOGR text,
    NOM_TITULO_SEGLOGR text,
    NOM_SEGLOGR text,
    NUM_ENDERECO text,
    DSC_MODIFICADOR text,
    NOM_COMP_ELEM1 text,
    VAL_COMP_ELEM1 text,
    NOM_COMP_ELEM2 text,
    VAL_COMP_ELEM2 text,
    NOM_COMP_ELEM3 text,
    VAL_COMP_ELEM3 text,
    NOM_COMP_ELEM4 text,
    VAL_COMP_ELEM4 text,
    NOM_COMP_ELEM5 text,
    VAL_COMP_ELEM5 text,
    LATITUDE double precision,
    LONGITUDE double precision,
    ALTITUDE real,
    DSC_LOCALIDADE text,
    COD_ESPECIE int,
    CEP bigint
);

COPY ibge_agro2017 FROM '/tmp/35_SAO_PAULO_utf8.csv' DELIMITER ';' CSV HEADER;
-- COPY 188660

Contagem por municípios

create view vw_brcodes_city_ibgesubcod as 
  select substring(ibge_id::text from 3)::int as ibge_subcod, *  
  from  brcodes_city where uf='SP'
;

create view vw_ibge_agro2017_count1 as 
 select agro.cod_municipio, brcods.name, count(*) n 
 from ibge_agro2017 agro inner join vw_brcodes_city_ibgesubcod brcods
 ON brcods.uf='SP' AND agro.cod_uf=35 AND agro.cod_municipio=brcods.ibge_subcod
 group by 1,2 order by 3 desc
;
select percentile_disc(0.5)  within group (order by n)  as mediana
from vw_ibge_agro2017_count1; -- 210 ~200
select round(avg(n)) from vw_ibge_agro2017_count1 where n<=210; -- 111 ~100
select round(avg(n)) from vw_ibge_agro2017_count1 where n>210;  -- 479 ~500

Conclusão: metade dos municipios de SP não tiveram mais do que 200 endereços contabilizados, conforme valor da mediana. A metade ruim tem em média 100 endereços rurais, a metade boa tem em média 500 endereços. Amostra dos extremos superior e inferior:

cod_municipio name n
13603 Cunha 2287
30201 Mirante do Paranapanema 2097
50209 São Miguel Arcanjo 1916
52106 Socorro 1749
37800 Piedade 1723
30607 Mogi das Cruzes 1379
22307 Itapetininga 1291
8702 Caconde 1262
19709 Ibiúna 1240
22406 Itapeva 1231
11003 Castilho 1199
53401 Tanabi 1062
41604 Promissão 1058
2804 Araçatuba 1021
30102 Mirandópolis 1013
24808 Jales 1012
54300 Teodoro Sampaio 976
... ... ...
2754 Araçariguama 10
18701 Guarujá 9
56503 Várzea Paulista 8
1152 Alumínio 8
51009 São Vicente 7
39806 Poá 7
20426 Ilha Comprida 6
44103 Rio Grande da Serra 5
48807 São Caetano do Sul 5
22505 Itapevi 5
13504 Cubatão 3
52809 Taboão da Serra 2
6359 Bertioga 1
48500 Santos 1

Contagem de duplicados por geohash

Primeiramente avaliando os pontos duplicados, ou seja, com resolução inferior a 1m, sendo igual é o mesmo ponto.

create view vw_ibge_agro2017_grby_geohashes AS 
SELECT ST_GeoHash(ST_SetSRID(ST_MakePoint(longitude,latitude),4326),11) as geohash, 
         count(*) n 
FROM ibge_agro2017 group by 1 order by 2 desc;

select count(*) n_dups, sum(n) lines from vw_ibge_agro2017_grby_geohashes where n>1;
--    594 |  1338
Endereço de acesso (Geohash 6un2yvus3h3) onde supostamente moram 16 famílias rurais. De fato percebe-se como que uma alameda adentrando ao norte da Alemeda JOaquim Kalman.
Endereço de acesso (Geohash 6ujg8fj11ju) a local onde supostamente moram 4 famílias rurais. Não é nítida a imagem, mas parecem mesmo haver 4 telhados.

Conclusão: o IBGE pode ter contabilizado ~1300 famílias morando em "cojunto habitacional" composto de duas ou mais casas. No total teriam sido da ordem de 600 conjuntos desse tipo. Para confirmar a hipótese basta verificar as imagens de satélite dos conjuntos com maior número de elementos:

geohash n
6un2yvus3h3 16 *
6gyrszr166v 9
6gur68vfwbc 7
6gykfxmx0cv 6
6gyyy2c3jpk 5
6gur62n9g6g 5
6ujq3gx014j 5 *
6u5t64vhu3t 4
6gur68vfwh2 4
6ujg8fj11ju 4 *
* itens conferidos.

Em seguida avaliando os pontos duplicados com resolução inferior a 25m (geohash de 8 dígitos), tendo em vista que se esperam habitações mais esparças no meio rural.

-- idem anterior  SELECT ST_GeoHash(...,8) 
--   n_dups= 2650 |  rows=5653

Análise de amostras, imagem BING ou Google de hoje:

  • localizações como 6gyzefvw (6 linhas duplicadas) caem em vias de acesso de pequenos conjuntos de casas (2 a 10) ...
  • localizações como 6ujq3gx0 (6 linhas duplicadas) caem em via de acesso a uma casa só...
  • localizações como 6un2yvus ou 6un2yz2z com mais de 15 linhas cada, estão "caindo no vazio" e são vizinhos (~20 metros) de conjuntos urbanos. Pode ter acontecido de ser acentamentos rurais em 2017 que agora não existem mais.

Contagem de endereços por macrocélula geohash

Conjunto típico de habitações rurais da célula rural Geohash mais densamente ocupada no estado de São Paulo, 6gyz.
-- idem anterior , usando 4 dígitos
create view vw_ibge_agro2017_grby_geohashes4 AS 
  SELECT ST_GeoHash(ST_SetSRID(ST_MakePoint(longitude,latitude),4326),4) as geohash, 
         count(*) n 
  from ibge_agro2017 group by 1 order by 2 desc;
select count(*) n_dups, sum(n) lines from vw_ibge_agro2017_grby_geohashes4 where n>1;
-- n_dups=410  | lines =188656
select percentile_disc(0.5)  within group (order by n)  as mediana
from vw_ibge_agro2017_grby_geohashes4 where n>10; -- 410 ~400
select round(avg(n)) from vw_ibge_agro2017_grby_geohashes4 where n<=410; -- 210 ~200
select round(avg(n)) from vw_ibge_agro2017_grby_geohashes4 where n>410;  -- 743 ~750

Aqui o número de macrocélulas Geohash é da mesma ordem de grandeza que o número de municípios, mas a área das células é uniforme (da ordem de 700 km²), de modo que podemos esperar uma densidade mais uniforme. Também podemos descartar macrocélulas com menos de 10 residências (foram descartadas 14).

geohash n
6gyz 1872
6u7u 1665
6gyy 1629
6gvb 1537
6gz1 1537
6u7v 1474
6u7g 1421
6gtq 1354
... ...
7h00 30
6gz8 28
6gsg 26
6gzc 20
6gzp 19
6gsv 17
6ukp 15
6gz0 10
6gtt 10
6upb 10

A mediana de n dessa listagem é ~400. A média acima é 750, abaixo é 200. O resultado sugere que o trabalho seja realizado inicialmente pelas ~200 macrocélulas (quadrantes) de maior n, e depois fechamentos por municípios.