Brazil/Grade Estatística Oficial

From OpenStreetMap Wiki
Jump to navigation Jump to search
Articulacao.jpg
Dica 1: filminho introdutório sobre a grade IBGE, mais rapido e leve do que ler o PDF,
Dica 2: no navegador não funciona baixar direto o PDF, navegue primeiro por http://geoftp.ibge.gov.br/recortes_para_fins_estatisticos/grade_estatistica/censo_2010 depois clique em "grade_estatistica.pdf".

Apesar de sua relevância, o Brasil só foi estabelecer a sua Grade Estatística em 2015, quando o IBGE lançou a sua proposta de grade com os dados do censo de 2010. A proposta foi bem aceita e hoje pode-se considerar como a "grade oficial", ou seja, a grade a ser utilizada em diversas outras aplicações, que não apenas a disseminação de dados do Censo. A grade com dados de população pode ser baixada do ftp do Censo 2010 do IBGE.

Carga no PostGIS

Por exemplo baixando o "quadrante 25". Supondo terminal Linux Debian (facilmente adaptavel para terminais DOS-Windos, MacOS, e outros Linux).

Todos os arquivos podem ser baixados via protocolo FTP ou HTPP. No caso de FTP entrar na pasta

geoftp.ibge.gov.br/recortes_para_fins_estatisticos/grade_estatistica/censo_2010

no caso de HTTP pode-se por exemplo usar o comando wget,

wget -c http://geoftp.ibge.gov.br/recortes_para_fins_estatisticos/grade_estatistica/censo_2010/grade_id25.zip

Em seguida qualquer aplicativo para expandir "arquivo ZIP padrão" ("MIME application/zip" e desde 2015 padrão ISO 21320-1). No Linux é default da distribuição (antigo Info-ZIP), basta rodar:

unzip grade_id25.zip

Por fim o aplicativo que transforma arquivos Shape em SQL do PostGIS é o `shp2pgsql`, que pode rodar gravando um arquivo, ou direto "em pipe" com o psql:

shp2pgsql -s 4326 grade_id25.shp | psql postgres://postgres:_senha_@localhost/ibge_sandbox -q

Na instrução acima a opção "-s" indica SRID 4326, que é o código do Datum WGS 84. O comando `psql` tem diversas maneiras de ser chamado, use a que julgar mais apropriada (a opção "-q" solicita apenas "modo quieto" para evitar rolagem de tela).

Testes rápidos

Os dados IBGE são fornecidos com o campo shape_area calculado no SIG do IBGE, que serve de referência para conferir se o seu sistema foi instalado corretamente e oferece a mesma precisão.

SELECT SUM(shape_area) by_shp, SUM(st_area(geom)) by_geom, 
       SUM( abs(shape_area - st_area(geom)) ) as diff  
FROM grade_id25 where pop>0; -- total by ~6.84403272259541 | diff ~2e-12

O valor total serve como checksum. A diferença acumulada pode ser considerada zero, tendo em vista que surge depois da décima segunda casa decimal, e que os dados do arquivo shape são eventualmente truncados pelas limitações de tamanho do arquivo.

Para teste de visualização pode-se fazer uso da união de células menores formando uma única quadícula na região do estado de SP, por exemplo a célula quadrada de 10km denominada 10KME5480N8500:

SELECT ST_UNION(geom) as celula10km
FROM grade_id25 where nome_10km='10KME5480N8500';

Nota: para gravar arquivo GeoJSON basta usar psql -c e ST_AsGeoJSON(ST_UNION(geom)).

Interpretação

O FTP do IBGE infelizmente não foneceu README com a semântica dos dados, mas a interpretação é simples e será homologada junto ao IBGE.

Cada arquivo zip corresponde a um dos quadrantes indicados na imagem, e o nome de tabela será o nome do arquivo. O final do nome é o identificado da célula (ex. grade_id25 é o quadrante id25).

Coluna Tipo Collation Nullable Default/Descrição
gid integer not null nextval('grade_id25_gid_seq'::regclass)
id_unico character varying(50) mesmo que nome_1km em área rural, senão prefixo "200M" indica célula menor.
nome_1km character varying(16) Rótulo da célula de 1km de lado
nome_5km character varying(16) Rótulo da célula de 5km de lado
nome_10km character varying(16) Rótulo da célula de 10km de lado
nome_50km character varying(16)
nome_100km character varying(16)
nome_500km character varying(16)
quadrante character varying(50)
masc integer população masculina
fem integer população feminina
pop integer população total
dom_ocu integer
shape_leng numeric perimetro nominal
shape_area numeric área nominal
geom geometry(MultiPolygon,4326) Geometria da célula, trazida da projeção Albers

Precisão na área

As medições de área apresentam o seguinte comportamento no quadrante id25, com relação a média e desvio padrão:

    SELECT tipo, AVG(a) area_med, stddev_pop(a) area_desvpad, count(*) as n
     FROM (
        SELECT st_area(geom,true) a, substring(id_unico,1,4) tipo
        FROM grade_id25
    ) t
    GROUP BY tipo;
tipo area_med area_desvpad n
1KME 1000000.00138881 0.116134666311307 176347
200M 40000.0000025662 0.00717275168996917 665800

Quadrantes em outras latitudes podem apresentar comportamento ligeiramente diferente. A dependência com a latitude pode ser detectada com a seguinte consulta:

      CREATE VIEW grade_id25_1kmfull AS
        SELECT nome_1km   FROM  grade_id25
        GROUP BY nome_1km HAVING count(*)=25
      ;
      CREATE VIEW grade_id25_10kmfull AS
        SELECT nome_10km 
        FROM  (
          SELECT * FROM grade_id25 
          WHERE nome_1km IN (SELECT nome_1km FROM grade_id25_1kmfull)
        ) t
        GROUP BY nome_10km HAVING count(*)=2500
      ;
      SELECT nome_10km, 
         round( SUM(st_area(geom,true))*1000 )/1000 AS area_tot, 
         ST_Y( ST_CENTROID( ST_UNION(geom) ) ) AS lat,
         COUNT(*) 
      FROM grade_id25 
      WHERE nome_10km IN (SELECT nome_10km FROM grade_id25_10kmfull)
      GROUP BY nome_10km
      ORDER BY 2 desc;

Resulta em uma tabela de 30 linhas, aqui resumida. Há uma certa flutuação mas nítida dependência da área com a latitude.

nome_10km area_tot lat
10KME5720N8690 100000000.154 -23.6086869947273
10KME5730N8690 100000000.100 -23.6063784312733
10KME5770N8710 100000000.088 -23.4153701623054
10KME5780N8750 100000000.076 -23.0503452407344
10KME5760N8690 100000000.060 -23.5992632459115
10KME5720N8710 100000000.059 -23.4272128378060
... ... ...
10KME5730N8700 99999999.940 -23.5156281498224
10KME5650N8790 99999999.932 -22.7176379630557
10KME5780N8740 99999999.926 -23.1409428928998
10KME5790N8750 99999999.923 -23.0478571749575
10KME5760N8680 99999999.887 -23.6900384997493
10KME5740N8690 99999999.867 -23.6040382842096
10KME5720N8700 99999999.865 -23.5179351551436
10KME5710N8770 99999999.843 -22.8857479585162