osm-codes / br_ibge Goto Github PK
View Code? Open in Web Editor NEWGrade Estatística IBGE em Representação Compacta
Home Page: http://git.osm.codes/BR_IBGE#readme
License: Apache License 2.0
Grade Estatística IBGE em Representação Compacta
Home Page: http://git.osm.codes/BR_IBGE#readme
License: Apache License 2.0
Exemplos de pontos didáticos no Brasil:
geo:-23.550385,-46.633956
, Marco Zero de São Paulo https://www.wikidata.org/wiki/Q10325364geo:-3.130278,-60.023333
, Teatro Amazonas http://wikidata.org/entity/Q1434444Postar respondendo por aqui mesmo!. Em seguida ajudo a melhorar /src/step6_asserts.sql
.
Para conferir coordenada na Wikidata, ver a propriedade P625 (coordinate location), por exemplo https://www.wikidata.org/wiki/Q1434444#P625 e clicar nas coordenadas abaixo do mapa. Vai redirecionar para a página Geohack, que no seu canto superior direito oferece a GeoURI.
Exemplo: SELECT grid_ibge.search_cell('geo:-3.130278,-60.023333')
retorna o gid da célula da grade default, nível L5, 4332000109840005. SELECT grid_ibge.search_cell('geo:-3.130278,-60.023333',1)
retorna a célula 4300000109500001 do nível L1. Para visualizar no QGIS usar por exemplo:
CREATE VIEW vw_teste_am_teatro AS SELECT gid, grid_ibge.draw_cell(gid) geom
FROM ( SELECT grid_ibge.search_cell('geo:-3.130278,-60.023333',1) ) t(gid);
RESUMO: definir quais quadrantes L0 a usar como demonstração.
Uma importante meta deste projeto é testar e manter online exemplos de uso de API... Mas "manter online" tem custo, proporcional ao consumo de memória da aplicação, que nesse caso é da ordem de Gb.
Para reduzir custos podemos reduzir o número de quadrantes (nível L0) a ~6 quadrantes. Sugere-se amarrar essa eleição de "grade demo" à issue #4 e às "cidades demo" de digital-guard/preserv-BR.
Apesar das funções draw_cell
já terem resolvido o problema, possuem performance limitada, principalmente para visualização online no QGIS. Neste artigo de 2020 é demonstrado o uso com o mapa do Brasil. O que precisamos fazer é criar uma caixa em Albers (lembrando que nosso SRID=952019 foi definido em pubLib05-postGis.sql) com origem correta. A VIEW abaixo ainda talvez aproximada:
CREATE VIEW teste_SquareGrid AS
SELECT (j-14)*10+i-5 AS gid, i-5 as i, j-14 as j, geom
FROM ST_SquareGrid(
500000,
ST_MakeEnvelope(2800000, 7350000, 2800000+9*500000, 7350000+9*500000, 952019)
); -- matriz IJ 10×10 de células com 500 km; identificador gid invertido JI
Funções otimizadas a testar:
Outros recursos: uso da grade (ou "mapa de calor" da população gerado pr ela) como "mapa de fundo" em vector tiles.
Atribuições
Parece que os DER de SP e MG utilizam uma tal lista. Thierry se encarrega de confirmar estas listas e fazer contatos com os outros DERs do Brasil. @ThierryAJean
O PostgreSQL oferece o comando PL/pgSQL ASSERT
que ajuda a documentar testes, com base na tradição das asserções lógicas. Por exemplo:
do $$
begin -- Testando o operador "="
ASSERT 1 = 2, 'Oops, o valor 1 não é 2...';
ASSERT 1 = 1, 'Erro mesmo, o valor 1 era para ser 1!';
end;
$$ LANGUAGE plpgsql;
-- resulta só no "Oops".
Precisamos criar conjuntos de 1 ou mais Testes de Regressão para cada função de biblioteca, que serão então utilizados sempre que alguma modificação no git for feita, garantindo que bugs não sejam "injetados" pelas modificações.
Versão preliminar: src/step6_asserts.sql
Ainda pedente resolução de bug de conversão dos 200M.
Script de homologação já construiído, ver step7
... ainda falha para alguns casos de nome_200M
de https://github.com/osm-codes/BR_IBGE/blob/main/data/ptCtrl.csv
A view final de src/step4_prepareGridLibs.sql
ainda demanda funções de conversão para as colunas nome_10km, nome_50km, etc. e nesse caso uma função snap_to_grid() seria muito mais eficiente para implementar search_gid_to_gid. A princípio é só arredondar pro centro mais próximo... Ver inspiração de snap em grid_ibge.xy_to_quadrante (que alias demanda também revisão).
Mesmo na versão atual, para visualizar no QGIS usar uma tabela ou LIMIT baixo,
CREATE VIEW teste_ver_no_qgis AS SELECT * FROM grid_ibge.vw_original_ibge_rebuild LIMIT 100;
-- ou
CREATE TABLE teste_ver_L0_no_qgis AS SELECT * FROM grid_ibge.vw_original_ibge_rebuild WHERE gid&7=0;
CREATE TABLE teste_ver_L2_no_qgis AS SELECT * FROM grid_ibge.vw_original_ibge_rebuild WHERE gid&7=2;
Os readmes requerem revisão antes da divulgação.
Nas referências falta incluir algo que forneça com maior certeza a semântica dos dados, algo como esse PDF do IPEA ou algo oficial do IBGE. A citação de links de documentos e páginas de artigos/guias, etc. requer Wayback Machine, por exemplo esse PDF não tem comprovação anterior a 2021, só esse registro de 2021-04-25.
Complementando #1, também são necessários testes sobre o zip de distribuição. O teste de integridade (MD5 ou SHA256) é suficiente para conferir o download, todavia se o usuário deseja fazer alterações menores ou auditar o conteúdo, o teste ilustra algumas opções simples de verificação:
head
e tail
do arquivo ou de trechos de cada gradewc -l
contando linhas do arquivogrep
de amostras específicas, selecionadas por gid.Exemplos:
cd data
head grid_ibge_censo2010_info.csv
grep 5756000087008006 grid_ibge_censo2010_info.csv
wc -l grid_ibge_censo2010_info.csv
awk -F "," '/^[0-9]+0,/ {lines++; pop=pop+$2;} END{print lines, pop;}' grid_ibge_censo2010_info.csv
Os resultados do exemplo podem ser registrados com redirecionamento, por exemplo:
echo "=== Primeiras linhas do arquivo grid_ibge_censo2010_info.csv ===" > t.txt
head grid_ibge_censo2010_info.csv >> t.txt
echo "=== grep ===" >> t.txt
grep 5756000087008006 grid_ibge_censo2010_info.csv >> t.txt
echo "=== tot_lines ===" >> t.txt
wc -l grid_ibge_censo2010_info.csv >> t.txt
echo "=== L0 lines and L0 tot_pop ===" >> t.txt
awk -F "," '/^[0-9]+0,/ {lines++; pop=pop+$2;} END{print lines, pop;}' grid_ibge_censo2010_info.csv >> t.txt
Por fim, com cat t.txt
visualizamos o resultado, e com diff t.txt assert_csv_samples.txt
auditamos contra a última versão registrada no git.
Um usuário típico está mais a vontade de testar e conferir a região onde mora, ou seja, basta um quadrante (500km x 500km).
Isse seria apenas para os targets all2
e grid_alt2_fromZip
.
O psql permite a passagem de parâmetros, que precisaria ser resolvida em step5opt2_fromCsv.sql
O @luisfelipebr percebeu que nem todos os nomes de célula devolvidos pela API batem com os nomes de célula originais dos shapefiles do IBGE. A API realizado o trabalho através da função gid_to_name()
, de modo que o bug está nela
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.