User:Krauss/Lembretes/Oficial
Dica do Santamariense, "... já que tu tem essa grande preocupação com a qualidade dos dados, lá vai umas sugestões" (Telegram),
- Calcule áreas dos municípios no OSM e calcule dos shapefiles do IBGE. Os que tiverem significativa discrepância de área, vale a pena uma revisão no OSM.
- Sobreposição ou vazios também não pode ocorrer, onde houver, tem que revisar.
- Quantidade de municípios por estado. Se estiver sobrando ou faltando, é preciso saber qual está.
Lembrete do Sérgio: "... Em geral a gente olha as fontes e compara.Na ocasião da edição, e em geral quando é alteração significativa tipo divisas, não anos depois". As últimas são mais revisadas... Questão é que todo usuário é incumbido de fazer isso, depende de cada um na sua região... Olhar as fontes, e comparar com as edições, é coisa que se faz comumente, toda hora".
Fontes em ftp://geoftp.ibge.gov.br/cartas_e_mapas/bases_cartograficas_continuas/bc250/versao2017/shapefile/ Limites_v2017.zip e lim_municipio_a.shp. E a questão começou com a pergunta sobre essa fonte, "Alguém sabe conferir se o que temos no OSM são exatamente esses aí? Alguém na comunidade se encarrega de atualizar tudo em lote cada vez que o IBGE atualuza os shapes?".
Outros lembretes, tomando como exemplo Curitiba:
- https://www.openstreetmap.org/relation/297514/history ( ou https://github.com/OSMBrasil/stable/blob/master/PR-Curitiba/municipio.geojson )
- http://osmhv.openstreetmap.de/blame.jsp?id=297514
- OSM History Viewer
- User:Krauss/QualidadeBR-multipolygons
- OSM History Viewer
Carga IBGE
Além da fonte de geometrias, Limites_v2017.zip, carregar a tabela de verificação de áreas, que atua como checksum, AR_BR_RG_UF_MES_MIC_MUN_2017.ods.
Segundo descritivo IBGE "O reprocessamento dos valores das áreas territoriais, de acordo com a estrutura político-administrativa vigente em 01/07/2017, data de referência das Estimativas Populacionais 2017, incorporaram as alterações de limites territoriais municipais ocorridas após o Censo Demográfico 2010 e praticadas nas Estimativas Populacionais Anuais no período de 2011 a 2017, bem como demais ajustes territoriais ocorridos neste período.".
A princípio podemos conferir se as áreas batem, basta fazer a soma de tudo e conferir se bate com a soma publicada no diário oficial "Para a superfície do Brasil foi mantido o valor de 8.515.759,090 km2, publicado no DOU nº 124 de 29/06/2018, conforme Resolução Nº 01, de 28 de junho de 2018".
Carga do mapa IBGE oficial dos municipios:
wget ftp://geoftp.ibge.gov.br/cartas_e_mapas/bases_cartograficas_continuas/bc250/versao2017/shapefile/Limites_v2017.zip
shp2pgsql -s 4326 lim_municipio_a.shp | psql etc
- no psql
alter table lim_municipio_a rename to ibge_lim_munic_2017;
- update ibge_lim_munic_2017 set geom=st_setsrid(geom,4326);
Exemplo dado pelo EuZinho do novo limite de municipio entre Condado (89,64 km² em 2010) e Malta (156,24 km² em 2010) da PB.
SELECT geocodigo, nome, round(st_area(geom,true)/1000000.0) km2
FROM ibge_lim_munic_2017
WHERE geocodigo IN ('2504504','2508802');
-- geocodigo | nome | km2
-- -----------+---------+-----
-- 2508802 | Malta | 157
-- 2504504 | Condado | 279
-- somata total oficial:
SELECT count(*) n, round(sum(st_area(geom,true)/1000000.0)) km2 FROM ibge_lim_munic_2017;
-- n | km2
-- ------+---------
-- 5570 | 8501003
Comparando áreas
Muitos municípios são iguais, dentro de uma tolerância de 10 km2, temos 4518 municípios. Entre eles seria interessante conferir a média de 2*st_area(ST_Intersection(a,b))/(st_area(a) + st_area(b)) pois isso discarta as compensações quando existem geometrias diferentes.
Maiores diferenças (destacam erros de fato, como brasília, diferenças como BarraCorda, ou falta de subtração das terras indígenas como FernandoFalcao)
km2_diff | ibge_id | folder_name | osm_id | ibge_km2 | osm_km2 ----------+---------+--------------------------+----------+----------+--------- 5342 | 5300108 | DF/Brasilia | -2758138 | 5791 | 449 2661 | 2101608 | MA/BarraCorda | -332984 | 7864 | 5203 1592 | 2104081 | MA/FernandoFalcao | -332971 | 3507 | 5099 1280 | 2104800 | MA/Grajau | -332843 | 7558 | 8838 805 | 2929057 | BA/SaoFelixCoribe | -362177 | 1757 | 952 689 | 1502509 | PA/Chaves | -185548 | 13771 | 13082 619 | 2931905 | BA/Tucano | -362383 | 2187 | 2806 600 | 2926400 | BA/RiachoSantana | -362427 | 3184 | 2584 599 | 1400282 | RR/Iracema | -326294 | 13527 | 14126 567 | 5213103 | GO/Mineiros | -2709162 | 9032 | 9599 548 | 2919801 | BA/Macaubas | -362466 | 2440 | 2988 544 | 5107602 | MT/Rondonopolis | -333637 | 4711 | 4167 532 | 1302603 | AM/Manaus | -332493 | 10872 | 11404 508 | 2927101 | BA/Rodelas | -363122 | 2227 | 2735 501 | 2105500 | MA/JoaoLisboa | -332919 | 1136 | 635 501 | 2112605 | MA/UrbanoSantos | -332904 | 1712 | 1211 498 | 2111763 | MA/SenadorLaRocque | -332969 | 739 | 1237 489 | 5107800 | MT/SantoAntonioLeverger | -333729 | 11780 | 12269 480 | 2110104 | MA/SantaQuiteriaMaranhao | -332825 | 1432 | 1912 477 | 2910776 | BA/FeiraMata | -362219 | 1150 | 1627 460 | 1301852 | AM/Iranduba | -332514 | 2674 | 2214 417 | 2918506 | BA/Jussara | -362263 | 1364 | 947 411 | 2926608 | BA/RibeiraPombal | -362396 | 1176 | 765 402 | 2105351 | MA/ItaipavaGrajau | -332805 | 838 | 1240 400 | 2921609 | BA/Morpara | -362188 | 2091 | 1691 395 | 2909901 | BA/Curaca | -362445 | 6504 | 6109 394 | 2906709 | BA/CandidoSales | -362234 | 1171 | 1565 387 | 2207850 | PI/Pavussu | -302660 | 1480 | 1093 382 | 2907707 | BA/Chorrocho | -362860 | 2639 | 3021 380 | 5102504 | MT/Caceres | -333703 | 23949 | 24329 379 | 2920205 | BA/Malhada | -363142 | 1766 | 2145 373 | 5103437 | MT/Curvelandia | -333654 | 734 | 361
-- somente áreas totais
SELECT abs(ibge_km2-osm_km2) km2_diff, * FROM (
SELECT p.ibge_id, p.folder_name, osm_id,
round(st_area(i.geom,true)/1000000.0) as ibge_km2,
round(st_area(p.way,true)/1000000.0) osm_km2
FROM ibge_lim_munic_2017 i INNER JOIN vw_osm_city_polygon p
ON i.geocodigo::int=p.ibge_id
) t
WHERE abs(ibge_km2-osm_km2)>300
order by 1 desc, 2;
Maior diferença relativa (forma)
relat_diff | ibge_id | folder_name | osm_id ----------------------+---------+-------------------------------+---------- 5.95052958002663 | 5300108 | DF/Brasilia | -2758138 0.535987480671481 | 5103437 | MT/Curvelandia | -333654 0.450362126205767 | 2929354 | BA/SaoJoseVitoria | -362193 0.424656695742079 | 2929057 | BA/SaoFelixCoribe | -362177 0.413465029439604 | 2902658 | BA/Banzae | -362257 0.402641694425265 | 2105500 | MA/JoaoLisboa | -332919 0.386444100105668 | 2510659 | PB/Parari | -301371 0.351704328755534 | 2903300 | BA/BarroPreto | -362300 0.341386895718655 | 2109908 | MA/SantaInes | -332808 0.305585432214643 | 2925600 | BA/PresidenteDutra | -362319 0.290930987080831 | 2607802 | PE/Itaquitinga | -303661 0.288379109723909 | 2112605 | MA/UrbanoSantos | -332904 0.285906921603557 | 2926608 | BA/RibeiraPombal | -362396 0.285839658428263 | 2932705 | BA/Urucuca | -362355 0.285363847829718 | 2919926 | BA/MadreDeus | -362461 0.272286459123972 | 2111953 | MA/SucupiraRiachao | -332795 0.272263508960364 | 2920007 | BA/Maiquinique | -363087 0.262019920163643 | 2101608 | MA/BarraCorda | -332984 0.25939250003882 | 2918308 | BA/Jitauna | -362329 0.258623017994322 | 2103158 | MA/CentroGuilherme | -332845 0.256653357592466 | 2915106 | BA/Itagi | -362433 0.247818724249393 | 2111029 | MA/SaoJoaoCaru | -332871 0.234398192514243 | 2918506 | BA/Jussara | -362263
-- Diferenças quando totais indicam àreas mais parecidas
SELECT st_area(ST_SymDifference(way,geom),true)/(osm_area+osm_area) km2_diff,
ibge_id, folder_name, osm_id
FROM (
SELECT p.ibge_id, p.folder_name, osm_id,
st_area(i.geom,true) as ibge_area,
st_area(p.way,true) osm_area ,
i.geom, p.way
FROM ibge_lim_munic_2017 i INNER JOIN vw_osm_city_polygon p
ON i.geocodigo::int=p.ibge_id and st_isvalid(p.way) and st_isvalid(i.geom)
) t
WHERE abs((osm_area-osm_area)/1000000.0)<300.0
order by 1 desc, 2;