osmc:Convenções/Coberturas municipais: mudanças entre as edições
mSem resumo de edição |
Sem resumo de edição |
||
Linha 94: | Linha 94: | ||
[[Arquivo:Lixo-exemplo-bug-ilustra1.png|miniaturadaimagem|exemplo de https://test.osm.codes/BR-PB-SaoJoaoCariri~53]] | [[Arquivo:Lixo-exemplo-bug-ilustra1.png|miniaturadaimagem|exemplo de https://test.osm.codes/BR-PB-SaoJoaoCariri~53]] | ||
Em alguns casos como SaoJoaoCariri ainda cabe o uso de uma cobertura-base mais densa: neste caso com 31 celulas. E talvez avaliar de um pouco mais de 100 m2 ajude a descartar celulas de poeira. | Em alguns casos como SaoJoaoCariri ainda cabe o uso de uma cobertura-base mais densa: neste caso com 31 celulas. E talvez avaliar de um pouco mais de 100 m2 ajude a descartar celulas de poeira. | ||
== Grade científica municipal == | |||
Para apenas um caracter, como o último dígito não é hexadecimal, apenas 834 municípios contemplam. Para 2 caracteres (''covers_frstdigit''), incluem-se mais 3787-834=2953 municípios. Ainda bom já que as coberturas possuem 5, então economizam o prefixo de 5-2=3 dígitos através do nome abreviado do município. | |||
Todos os restantes apresentam coberturas municipais com mais de 16 células, de modo que precisam ser primeiro aglutinadas, ver segunda query. | |||
<syntaxhighlight lang="sql"> | |||
CREATE VIEW tmp_br_gradecientifica_direta16 AS | |||
SELECT *, cardinality(covers_frstdigit)=n_covers AS is_eq | |||
FROM ( | |||
select isolabel_ext, length(covers[1]) len, | |||
array_text_to_distright(covers,2) as covers_frstdigit, -- para 1 só usar array_text_to_distright(covers) | |||
cardinality(covers) n_covers | |||
from ( | |||
select isolabel_ext, array_agg( natcod.vbit_to_baseh(substring(cbits,11),16,true) order by cbits) AS covers | |||
from osmc.coverage | |||
where not(is_overlay) and isolabel_ext like 'BR-%-%' | |||
group by 1 | |||
) t1 where cardinality(covers)<=16 | |||
) t2 | |||
WHERE cardinality(covers_frstdigit)=n_covers | |||
ORDER BY 5 desc,1 | |||
; | |||
-- restantes 1783 municípios resolvidos fazendo agregação parcial com corte do último dígito. Em média cortamos 3 dígitos com o prefixo | |||
SELECT *, cardinality(covers_frstdigit) AS n_covers2 | |||
FROM ( | |||
select isolabel_ext, length(covers[1]) len, | |||
array_text_to_distleft( array_text_to_distright(covers,3), 2) as covers_frstdigit, -- para 1 só usar array_text_to_distright(covers) | |||
cardinality(covers) n_covers | |||
from ( | |||
select isolabel_ext, array_agg( natcod.vbit_to_baseh(substring(cbits,11),16,true) order by cbits) AS covers | |||
from osmc.coverage | |||
where not(is_overlay) and isolabel_ext like 'BR-%-%' | |||
group by 1 | |||
) t1 where cardinality(covers)>16 | |||
) t2 | |||
ORDER BY 5 desc,1 | |||
; | |||
</syntaxhighlight> | |||
Exemplos:<pre> | |||
isolabel_ext | len | covers_frstdigit | n_covers | is_eq | |||
--------------------------------+-----+-------------------------+----------+------- | |||
BR-AL-Belem | 6 | {J,K,N,P,S,T,Y,Z} | 8 | t | |||
BR-AL-Canapi | 5 | {H,M,R,V} | 4 | t | |||
BR-AL-CoqueiroSeco | 6 | {J,N,P,T,Y} | 5 | t | |||
BR-AL-PaoAcucar | 5 | {H,M,R,V} | 4 | t | |||
BR-AL-Paripueira | 6 | {J,K,N,P,S,T,Z} | 7 | t | |||
BR-AL-Penedo | 5 | {H,M,R,V} | 4 | t | |||
BR-AL-SantaLuziaNorte | 6 | {J,K,N,P} | 4 | t | |||
BR-AL-Satuba | 6 | {J,K,P,S,Y,Z} | 6 | t | |||
BR-AM-Jurua | 4 | {G,Q} | 2 | t | |||
BR-BA-Abaira | 5 | {H,M} | 2 | t | |||
BR-BA-Alagoinhas | 5 | {H,M,R,V} | 4 | t | |||
... | |||
BR-TO-PortoAlegreTocantins | 5 | {H,R} | 2 | t | |||
BR-TO-PresidenteKennedy | 5 | {H,M,R,V} | 4 | t | |||
BR-TO-RioBois | 5 | {H,M,R,V} | 4 | t | |||
BR-TO-TaipasTocantins | 5 | {H,M,R,V} | 4 | t | |||
BR-TO-Tupirama | 5 | {H,M,R} | 3 | t | |||
BR-TO-Tupiratins | 5 | {H,M,R,V} | 4 | t | |||
(834 rows) | |||
isolabel_ext | len | covers_frstdigit | n_covers | |||
---------------------------------+-----+---------------------------------------------------+--------- | |||
BR-AC-Acrelandia | 5 | {1H,1R,1V,3H,3M,4R,6H} | 7 | |||
BR-AC-AssisBrasil | 5 | {1H,8R,8V,9R,aH,aM,aR,aV,bH,bM,bR,dV,fM} | 13 | |||
BR-AC-Brasileia | 5 | {1M,aM,bH,bM,bR,bV,cR,cV,eH,eM,eR} | 11 | |||
BR-AC-Bujari | 5 | {2H,5R,5V,7H,7M,7R,7V,dH,dM} | 9 | |||
BR-AC-Capixaba | 5 | {0H,5M,aR,aV,fV} | 5 | |||
BR-AC-CruzeiroSul | 4 | {2Q,3Q,8G,9G} | 4 | |||
BR-AC-Epitaciolandia | 5 | {cV,dR,eH,eM,eV,fH} | 6 | |||
BR-AC-Feijo | 4 | {3G,3Q,6Q,9G,cG} | 5 | |||
BR-AC-Jordao | 5 | {0V,1R,2M,2V,3H,3M,3R,3V,8M,9H,9M,9R,9V} | 13 | |||
... | |||
BR-TO-TaipasTocantins | 5 | {6H,6M,6R,6V} | 4 | |||
BR-TO-Talisma | 5 | {4H,4M,4R,4V,5H,5R,6M,7H,7M} | 9 | |||
BR-TO-Tocantinia | 5 | {2H,2M,2R,2V,8H,8M} | 6 | |||
BR-TO-Tocantinopolis | 5 | {1M,bH,bM,bR,bV} | 5 | |||
BR-TO-Tupirama | 5 | {8R,aH,aM} | 3 | |||
BR-TO-Tupiratins | 5 | {0H,0M,aR,aV} | 4 | |||
BR-TO-Wanderlandia | 5 | {8M,8V,9H,9R,aM} | 5 | |||
BR-TO-Xambioa | 5 | {8R,aH,aR,dV,fM} | 5 | |||
(3787 rows) | |||
isolabel_ext |len | covers_frstdigit |n_covers | n_covers2 | |||
-----------------------+----+------------------------------------------------+---------+----------- | |||
BR-AP-LaranjalJari | 5 | {23,29,2f,33,36,4a,83,84,85,...,8d,98} | 29 | 15 | |||
BR-MT-Querencia | 5 | {07,0d,0f,10,11,12,13,14,16,18,19,1a,bb} | 29 | 13 | |||
BR-AC-Tarauaca | 5 | {38,39,3a,3b,3c,3d,3e,3f,90,91,94,95} | 28 | 12 | |||
BR-AM-Beruri | 5 | {14,b1,b2,b3,b6,b8,b9,bb,bc,bd,be,bf} | 28 | 12 | |||
BR-MS-RibasRioPardo | 5 | {07,0c,0d,0e,0f,12,18,1a,24,25,27,30} | 29 | 12 | |||
... | |||
BR-PR-Marumbi | 6 | {6b,6e,c4} | 17 | 3 | |||
BR-RN-SaoVicente | 6 | {de,df,f5} | 17 | 3 | |||
BR-RS-Cidreira | 6 | {a3,a4,a6} | 17 | 3 | |||
BR-SC-Mondai | 6 | {54,56,57} | 17 | 3 | |||
BR-SC-SaoJoseCedro | 6 | {73,76,77} | 18 | 3 | |||
(1783 rows) | |||
</pre> | |||
==Ver também== | ==Ver também== |
Edição das 13h19min de 13 de fevereiro de 2024
![](/w/images/thumb/d/de/CoverSample-CO-15001.png/300px-CoverSample-CO-15001.png)
Conceitos de cobertura-base e cobertura-overlay. Nas ilustrações tomaremos o exemplo de Tunja, primeiro municipio da Colômbia a adotar os OSMcodes.
Para que o osmCode logístico possa fazer uso de um prefixo mnemônico, que conforme o país será baseado no nome ISO (ex. BR-SP-Campinas
) ou no código oficial do município (ex. CO-15001
); é necessário que o sufixo, baseado em grade, seja totalmente compatível com a geometria do município.
Grade de referência
Em países pequenos, conforme destacado nas decisões soberanas sobre área territorial do país, apenas a grade científica é usada (geocódigos base16h orientados a dígitos de 4 bits).
Em países maiores, é necessário usar um geocódigo mais compacto, com dígitos de 5 bits (notação de base 32). Para tanto é eleito um subconjunto da grade científica que seja compativel com 5 bits a partir da grade de 1 metro. Esse subconjunto é denominado Grade logística. Apesar de ser compatível entre diferentes municípios do país, ele não é utilizado como "grade nacional", apenas como "grade municipal", justamente porque seu geocódigo parte do prefixo mnemônico da jurisdição municipal.
Cobertura-base
É o conjunto de células maiores da grade logística municipal: elas não possuem "células-mãe". Se der sorte de o município ter mais que 25% do seu território coberto por uma única célula, a indexação e a cobertura-base serão dispensadas, mas isso é muito raro de ocorrer. Numa situação típica elege-se o nível de grade com 2 a 30 células.
Ver também osmc:Convenções/Coberturas municipais/Algoritmos#Cobertura-base.
Cobertura-overlay
Se a cobertura-base não gastou muitas células (menos que 30) e se o município não é dominado por áreas urbanas, pode-se otimizar os geocódigos do núcleo urbano com células de cobertura menores.
Acima a construção da cobertura-overlay de Tunja a partir da grade científica, buscando-se as áreas urbanas contíguas a partir do núcleo; e seu resultado já indexado em complemento à cobertura-base. O núcleo urbano do município é definido pela Wikipedia: no caso de Tunja fixou-se geo:5.5333,-73.3667.
A finalidade da cobertura-overlay é proporcionar maior encurtamento de geocódigo nas áreas urbanas ou mais densamente povoadas, atendendo melhor a um número maior de usuários. Devido à alta concentração em pequenas regiões, pode relevante. Na ilustração a distribuição populacional da Colômbia, destacando grandes vazios e picos de densidade populacional.
A estratégia de privilegiar essas regiões foi usada em outros geocódigos, tais como CEP, ZIP code, Mapcod e PlusCode. Em particular a estratégia de coberturas heterogêneas adotada, para reduzir dígitos, é muito parecida com a Mapcod.
Visualização
Quando o município faz uso de cobertura-overlay, a melhor forma de mostrar a grade de referência é destacando a distribuição de geocódigos com e sem overlay.
Grade logistica incial de Tunja, onde se percebe a redução em 1 dígito nas áreas urbanas centrais (contorno azul), devido ao uso de overlay. A reserva pode ser utilizada tanto para resolver problemas de alteração de borda, como para expandir a área urbana (no caso uma segunda zona de crescimento urbano já perceptível).
No exemplo abaixo a cobertura completa de BR-SP-Campinas, onde, supondo estabilidade, a opção foi por adotar o máximo de overlays, tendo em vista que a cobertura-base é mais grosseira. Toda a área urbana, presente e "futura" está contemplada.
Estabilidade e reserva
Quando uma cobertura municipal é criada, a recomendação é deixar uma reserva de pelo menos 2 células. Elas serão adicionadas com novos índices em caso de expansão ou mudança territorial.
Importante lembrar que mudanças "por equivoco" não ocorrem devido ao "projeto OSM Stable", e os índices (primeiro dígito) não mudam mais depois que a cobertura é homologada com os representantes da jurisdição.
As seguintes situações, com respectivos riscos de ocorrência e impactos, podem ocorrer sobre o geocódigo logístico, quando oficialmente utilizado como código postal:
Situação | Risco | Impacto nos geocódigos |
---|---|---|
Mudança de nome | baixo | Nenhum se o país não usa nome, como no caso da Colômbia (usa DIVIPOLA). Baixo se usa nome. Requer gestão de transição do prefixo, como no caso do Brasil. |
Mudança territorial por imprecisão cartográfica | médio | Baixo. A mudança "sutil" de fronteiras é bem documentada no OpenStreetMap. No OSMcodes são gerenciadas por períodos de estabilidade através do "projeto OSM-Stable", no git. O impacto maior é a troca de município em endereços próximos da fronteira, portanto troca de prefixo e/ou de dígito indexador. O sufixo, mesmo de endereços da cidade vizinha, não é afetado, justamente por regra de construção do OSMcodes Logístico, todo baseado na mesma grade. |
Aumento acentuado percentual urbano | médio condicional | Mínimo. Os moradores de áreas recém-urbanizadas recebem positivamente o impacto de novos overlays, que proporcionam geocódigos mais curtos (tipicamente impacto da troca de 2 dígitos pelo indexador). Em seguida, com o consumo da reserva, não haverá mais esse benefício, mas ao contrário, não há pressão da população por esse benefício, justamente por haver pressão maior por estabilidade. Condição de risco: quanto maior o município, menor o risco de aumento percentual de área urbanizada. No Brasil, p. ex., o risco maior é nos 8% de municípios com menos de 100 km2. |
Mudança territorial por demarcação | baixo | Baixo se absorvido por coberturas de reserva, com impacto análogo ao caso da mudança por imprecisão. Alto se não-absorvido. A mudança por demarcação é arbitrária, podem ocorrer desmembramentos ou acréscimos, até mesmo extinção de municípios. Cabe à jurisdição afetada gerenciar o impacto. |
A noção mais realista da estabilidade territorial das unidades jurídicas de um país vem da estatística aplicada ao histórico principalmente jurídico. O número médio anos que ficou sem uma mudança, dentro de uma amostra de 20 anos, e a média de mudanças por ano, são indicadores do risco.
Alguns indícios podem ser levantados com apoio do OSM e da Wikidata, mas o ideal é realizar o levantamento com apoio do órgão local (por ex. IBGE no caso do Brasil e DANE no caso da Colômbia). o levantamento de evidências e a estimativa de risco/estabilidade é pré-requisito para a assinatura de acordos, principalmente quando envolvendo o compromisso de uso do OSMcodes como código postal oficial.
(Pendências)
Overlay:
- https://github.com/osm-codes/GGeohash/issues/20
- https://github.com/osm-codes/GGeohash/issues/24
- https://github.com/osm-codes/GGeohash/issues/25
- https://github.com/osm-codes/CO_new/issues/22
- https://wiki.addressforall.org/doc/dg_talk:Stable
Algoritmo de overlay:
- cobrir area urbana;
- ordenar células overlay por % de área urbana que contém;
- Ficar com as que cobrem maior area, até limite de 30 celulas.
Humanos calibrando valor de resto e de poeira
Em alguns casos como SaoJoaoCariri ainda cabe o uso de uma cobertura-base mais densa: neste caso com 31 celulas. E talvez avaliar de um pouco mais de 100 m2 ajude a descartar celulas de poeira.
Grade científica municipal
Para apenas um caracter, como o último dígito não é hexadecimal, apenas 834 municípios contemplam. Para 2 caracteres (covers_frstdigit), incluem-se mais 3787-834=2953 municípios. Ainda bom já que as coberturas possuem 5, então economizam o prefixo de 5-2=3 dígitos através do nome abreviado do município.
Todos os restantes apresentam coberturas municipais com mais de 16 células, de modo que precisam ser primeiro aglutinadas, ver segunda query.
CREATE VIEW tmp_br_gradecientifica_direta16 AS
SELECT *, cardinality(covers_frstdigit)=n_covers AS is_eq
FROM (
select isolabel_ext, length(covers[1]) len,
array_text_to_distright(covers,2) as covers_frstdigit, -- para 1 só usar array_text_to_distright(covers)
cardinality(covers) n_covers
from (
select isolabel_ext, array_agg( natcod.vbit_to_baseh(substring(cbits,11),16,true) order by cbits) AS covers
from osmc.coverage
where not(is_overlay) and isolabel_ext like 'BR-%-%'
group by 1
) t1 where cardinality(covers)<=16
) t2
WHERE cardinality(covers_frstdigit)=n_covers
ORDER BY 5 desc,1
;
-- restantes 1783 municípios resolvidos fazendo agregação parcial com corte do último dígito. Em média cortamos 3 dígitos com o prefixo
SELECT *, cardinality(covers_frstdigit) AS n_covers2
FROM (
select isolabel_ext, length(covers[1]) len,
array_text_to_distleft( array_text_to_distright(covers,3), 2) as covers_frstdigit, -- para 1 só usar array_text_to_distright(covers)
cardinality(covers) n_covers
from (
select isolabel_ext, array_agg( natcod.vbit_to_baseh(substring(cbits,11),16,true) order by cbits) AS covers
from osmc.coverage
where not(is_overlay) and isolabel_ext like 'BR-%-%'
group by 1
) t1 where cardinality(covers)>16
) t2
ORDER BY 5 desc,1
;
Exemplos:
isolabel_ext | len | covers_frstdigit | n_covers | is_eq --------------------------------+-----+-------------------------+----------+------- BR-AL-Belem | 6 | {J,K,N,P,S,T,Y,Z} | 8 | t BR-AL-Canapi | 5 | {H,M,R,V} | 4 | t BR-AL-CoqueiroSeco | 6 | {J,N,P,T,Y} | 5 | t BR-AL-PaoAcucar | 5 | {H,M,R,V} | 4 | t BR-AL-Paripueira | 6 | {J,K,N,P,S,T,Z} | 7 | t BR-AL-Penedo | 5 | {H,M,R,V} | 4 | t BR-AL-SantaLuziaNorte | 6 | {J,K,N,P} | 4 | t BR-AL-Satuba | 6 | {J,K,P,S,Y,Z} | 6 | t BR-AM-Jurua | 4 | {G,Q} | 2 | t BR-BA-Abaira | 5 | {H,M} | 2 | t BR-BA-Alagoinhas | 5 | {H,M,R,V} | 4 | t ... BR-TO-PortoAlegreTocantins | 5 | {H,R} | 2 | t BR-TO-PresidenteKennedy | 5 | {H,M,R,V} | 4 | t BR-TO-RioBois | 5 | {H,M,R,V} | 4 | t BR-TO-TaipasTocantins | 5 | {H,M,R,V} | 4 | t BR-TO-Tupirama | 5 | {H,M,R} | 3 | t BR-TO-Tupiratins | 5 | {H,M,R,V} | 4 | t (834 rows) isolabel_ext | len | covers_frstdigit | n_covers ---------------------------------+-----+---------------------------------------------------+--------- BR-AC-Acrelandia | 5 | {1H,1R,1V,3H,3M,4R,6H} | 7 BR-AC-AssisBrasil | 5 | {1H,8R,8V,9R,aH,aM,aR,aV,bH,bM,bR,dV,fM} | 13 BR-AC-Brasileia | 5 | {1M,aM,bH,bM,bR,bV,cR,cV,eH,eM,eR} | 11 BR-AC-Bujari | 5 | {2H,5R,5V,7H,7M,7R,7V,dH,dM} | 9 BR-AC-Capixaba | 5 | {0H,5M,aR,aV,fV} | 5 BR-AC-CruzeiroSul | 4 | {2Q,3Q,8G,9G} | 4 BR-AC-Epitaciolandia | 5 | {cV,dR,eH,eM,eV,fH} | 6 BR-AC-Feijo | 4 | {3G,3Q,6Q,9G,cG} | 5 BR-AC-Jordao | 5 | {0V,1R,2M,2V,3H,3M,3R,3V,8M,9H,9M,9R,9V} | 13 ... BR-TO-TaipasTocantins | 5 | {6H,6M,6R,6V} | 4 BR-TO-Talisma | 5 | {4H,4M,4R,4V,5H,5R,6M,7H,7M} | 9 BR-TO-Tocantinia | 5 | {2H,2M,2R,2V,8H,8M} | 6 BR-TO-Tocantinopolis | 5 | {1M,bH,bM,bR,bV} | 5 BR-TO-Tupirama | 5 | {8R,aH,aM} | 3 BR-TO-Tupiratins | 5 | {0H,0M,aR,aV} | 4 BR-TO-Wanderlandia | 5 | {8M,8V,9H,9R,aM} | 5 BR-TO-Xambioa | 5 | {8R,aH,aR,dV,fM} | 5 (3787 rows) isolabel_ext |len | covers_frstdigit |n_covers | n_covers2 -----------------------+----+------------------------------------------------+---------+----------- BR-AP-LaranjalJari | 5 | {23,29,2f,33,36,4a,83,84,85,...,8d,98} | 29 | 15 BR-MT-Querencia | 5 | {07,0d,0f,10,11,12,13,14,16,18,19,1a,bb} | 29 | 13 BR-AC-Tarauaca | 5 | {38,39,3a,3b,3c,3d,3e,3f,90,91,94,95} | 28 | 12 BR-AM-Beruri | 5 | {14,b1,b2,b3,b6,b8,b9,bb,bc,bd,be,bf} | 28 | 12 BR-MS-RibasRioPardo | 5 | {07,0c,0d,0e,0f,12,18,1a,24,25,27,30} | 29 | 12 ... BR-PR-Marumbi | 6 | {6b,6e,c4} | 17 | 3 BR-RN-SaoVicente | 6 | {de,df,f5} | 17 | 3 BR-RS-Cidreira | 6 | {a3,a4,a6} | 17 | 3 BR-SC-Mondai | 6 | {54,56,57} | 17 | 3 BR-SC-SaoJoseCedro | 6 | {73,76,77} | 18 | 3 (1783 rows)
Ver também
- ...