Brasil/Metodologia/Importação de endereços/Agro
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:
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).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.35_SAO_PAULO/35_SAO_PAULO.csv
, supostamente contendo mesmo cabeçalho e todas as linhas de dados de3522307_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. Idemgrep "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).
- 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. - 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.
- a definição deixa clara que é estabelecimento de produção, o local onde se trabalha e que tem uma determinada área de plantio.
- 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
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
ou6un2yz2z
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
-- 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.