osmc:Convenções/Coberturas municipais/Algoritmos: mudanças entre as edições

→‎Cobertura-base: reformat com syntaxhighlight
(poeira)
(→‎Cobertura-base: reformat com syntaxhighlight)
Linha 1: Linha 1:


== Cobertura-base ==
== Resumo das conclusões ==
Na verdade é um conjunto de regras heurísticas. Aplica-se à grade associada ao geocódigo logístico, ou seja, base32 caso em uso.
Dos estudos e evidências a seguir, concluíu-se para Brasil e Colômbia o seguinte:
* xxx
* yyy
 
== CoberturaBase ==
Na verdade é um conjunto de regras heurísticas. Aplica-se à grade associada ao geocódigo logístico. Em geral a '''base32''' em uso: vamos assumir a seguir apenas casos com base32, fica pendente o desenvolvimento similar para base16.


Objetivo:
Objetivo:
# Minimizar '''tamanho do geocódigo''' cientifico da cobertura, minimizando o '''tamanho  das células''' de cobertura-base.
# Minimizar '''tamanho do geocódigo''' cientifico da cobertura, minimizando o '''tamanho  das células''' de cobertura-base.


Possibilidades, com  ''p''=quantidade total de células na cobertura
Possibilidades,   ''p''=quantidade total de células na cobertura
# Cobertura-base, p=1; (dispensa indexacao se nao houver demanda overlay)
# ''CoberturaBase'' com ''p=1''; (dispensa indexação se nao houver demanda ''overlay'')
# Cobertura-base, p>1;
# ''CoberturaBase'' com ''p>1'';
# Cobertura-base + cobertura-overlay em parte da área do município;
# ''CoberturaBase'' + ''coberturaOverlay''.


Limitantes:
Limitantes:
# '''p <= 32''';
# '''p <= 31''';
# '''32-p = q,''' onde 0<q<32. q é a reserva.
# '''32-''p'' = ''q'',''' onde 1 &lt; ''q'' &lt; 32. q é a reserva.
# Level<sub>célula coberturaBase</sub> - Level<sub>célula coberturaOverlay</sub> = 2.5
# Level<sub>coberturaBase</sub> - Level<sub>coberturaOverlay</sub> = 2.5


Casos:
Casos:
Linha 24: Linha 29:
## qual o valor de p da cobertura que resulta em códigos curtos do tamanho que defini? dado q, 32-p>=q? Se sim, usar a cobertura-base encontrada;  
## qual o valor de p da cobertura que resulta em códigos curtos do tamanho que defini? dado q, 32-p>=q? Se sim, usar a cobertura-base encontrada;  
## Se 32-p<q, reduzir 1 digito na cobertura encontrada mantendo as células da cobertura anterior que interceptarem o perímetro urbano. A quantidade de células nessa nova cobertura satisfaz 32-p'>=q? Se sim, usar cobertura-base + overlay. Se não satisfaz, reduzir um digito da definição de 'curto' utilizada e repetir.
## Se 32-p<q, reduzir 1 digito na cobertura encontrada mantendo as células da cobertura anterior que interceptarem o perímetro urbano. A quantidade de células nessa nova cobertura satisfaz 32-p'>=q? Se sim, usar cobertura-base + overlay. Se não satisfaz, reduzir um digito da definição de 'curto' utilizada e repetir.


=== Algumas estatísticas sobre não indexação: ===
=== Algumas estatísticas sobre não indexação: ===


A consulta
A consulta
<pre>
<syntaxhighlight lang="sql">
SELECT *
SELECT *
FROM optim.jurisdiction
FROM optim.jurisdiction
Linha 35: Linha 39:
     AND (info->'area_km2')::int <= 1
     AND (info->'area_km2')::int <= 1
     AND (info->'area_km2')::int >  0;
     AND (info->'area_km2')::int >  0;
</pre>
</syntaxhighlight>


não produz resultados em Brasil e Colômbia. Produz resultados no Uruguai. Porém, geometrias de jurisdições no Uruguai ainda não estão boas. Então, não foi testado se jurisdições cabem numa célula de 1km de lado. Que produziriam, sem indexação, geocódigos de tamanho 4.
não produz resultados em Brasil e Colômbia. Produz resultados no Uruguai. Porém, geometrias de jurisdições no Uruguai ainda não estão boas. Então, não foi testado se jurisdições cabem numa célula de 1km de lado. Que produziriam, sem indexação, geocódigos de tamanho 4.


Já a consulta
Já a consulta
<pre>
<syntaxhighlight lang="sql">
SELECT *
SELECT *
FROM optim.jurisdiction
FROM optim.jurisdiction
Linha 48: Linha 51:
     AND (info->'area_km2')::int >  0
     AND (info->'area_km2')::int >  0
     AND jurisd_base_id IN (76,170)
     AND jurisd_base_id IN (76,170)
</pre>
</syntaxhighlight>


resulta em 51 municípios em Brasil e Colômbia.
resulta em 51 municípios em Brasil e Colômbia.
Linha 54: Linha 57:
No entanto, apenas 1 município cabe dentro de uma célula com lado 5.7km:
No entanto, apenas 1 município cabe dentro de uma célula com lado 5.7km:


<pre>
<syntaxhighlight lang="sql">
SELECT *
SELECT *
FROM
FROM (
(
     SELECT isolabel_ext,
     SELECT isolabel_ext,


Linha 72: Linha 74:
) r
) r
WHERE st_containsproperly IS TRUE;
WHERE st_containsproperly IS TRUE;
     isolabel_ext    | st_containsproperly  
--    isolabel_ext     | st_containsproperly  
----------------------+---------------------
--  BR-MG-SantaCruzMinas | t
  BR-MG-SantaCruzMinas | t
(1 row)
(1 row)
</pre>
</syntaxhighlight>


Avançando mais um pouco, considerando células de 32km de lado, a consulta
Avançando mais um pouco, considerando células de 32km de lado, a consulta


<pre>
<syntaxhighlight lang="sql">
SELECT *
SELECT *
FROM
FROM
(
(
     SELECT isolabel_ext,
     SELECT isolabel_ext,
             ST_ContainsProperly(ST_GeomFromGeoJSON(((CASE split_part(isolabel_ext,'-',1)
             ST_ContainsProperly(ST_GeomFromGeoJSON(((CASE split_part(isolabel_ext,'-',1)
             WHEN 'BR' THEN osmc.encode_scientific_br(ST_Transform(ST_PointOnSurface(geom),952019),19000,0)
             WHEN 'BR' THEN osmc.encode_scientific_br(ST_Transform(ST_PointOnSurface(geom),952019),19000,0)
             WHEN 'CO' THEN osmc.encode_scientific_co(ST_Transform(ST_PointOnSurface(geom),  9377),19000,0)
             WHEN 'CO' THEN osmc.encode_scientific_co(ST_Transform(ST_PointOnSurface(geom),  9377),19000,0)
             END)->'features')[0]->'geometry'),geom)
             END)->'features')[0]->'geometry'),geom)  
           
     FROM optim.vw01full_jurisdiction_geom
     FROM optim.vw01full_jurisdiction_geom
     WHERE isolevel=3
     WHERE isolevel=3
Linha 98: Linha 97:
) r
) r
WHERE st_containsproperly IS TRUE;
WHERE st_containsproperly IS TRUE;
</pre>
</syntaxhighlight>
Resulta que 603 municípios brasileiros e colombianos têm área que cabem dentro de uma célula de 32km de lado. Se não houver indexação os geocódigos resultantes teriam tamanho 6 em 1m. Aproximadamente, menos de 10% dos municípios.
Resulta que 603 municípios brasileiros e colombianos têm área que cabem dentro de uma célula de 32km de lado. Se não houver indexação os geocódigos resultantes teriam tamanho 6 em 1m. Aproximadamente, menos de 10% dos municípios.
Evidente que esses municípios podem ser cobertos por células de 5,7km de lado com indexação, onde teríamos os mesmos 6 dígitos.
Evidente que esses municípios podem ser cobertos por células de 5,7km de lado com indexação, onde teríamos os mesmos 6 dígitos.


A consulta a seguir mostra que, de fato, 467 municípios estão dentro de uma célula com código de 3 dígitos na base 32nvu. Importante notar que foi compatibilizado as grades logísticas entre Brasil e Colômbia, implicando que geocódigos de mesmo tamanho equivalem a células de mesmo lado.  
A consulta a seguir mostra que, de fato, 467 municípios estão dentro de uma célula com código de 3 dígitos na base 32nvu. Importante notar que foi compatibilizado as grades logísticas entre Brasil e Colômbia, implicando que geocódigos de mesmo tamanho equivalem a células de mesmo lado.  
<pre>
<syntaxhighlight lang="sql">
drop table lix; create table lix as  SELECT * FROM osmc.tmpvwcellContainsProperly;
drop table lix; create table lix as  SELECT * FROM osmc.tmpvwcellContainsProperly;
select * from lix where length(cellcontainsproperly)>=3  order by 1;
select * from lix where length(cellcontainsproperly)>=3  order by 1;
</syntaxhighlight>
<pre>
...
...
  BR-MG-SantaCruzMinas          | C1J9
  BR-MG-SantaCruzMinas          | C1J9
Linha 132: Linha 133:
  CO-SAN-Guapota                | D7W
  CO-SAN-Guapota                | D7W
(467 rows)
(467 rows)
</pre>
</pre>


Linha 147: Linha 147:


As consultas a seguir mostram que aproximadamente 1913 municípios brasileiros podem ser cobertos com coberturas de células de 5.7km de lado, tal que q>8, por exemplo http://osm.codes/BR-AL-BarraSantoAntonio. Se considerarmos q=2, 90% de 2551 podem ser cobertos com cobertura-base de 5.7km de lado.
As consultas a seguir mostram que aproximadamente 1913 municípios brasileiros podem ser cobertos com coberturas de células de 5.7km de lado, tal que q>8, por exemplo http://osm.codes/BR-AL-BarraSantoAntonio. Se considerarmos q=2, 90% de 2551 podem ser cobertos com cobertura-base de 5.7km de lado.
<pre>
<syntaxhighlight lang="sql">
-- número de municípios com cobertura-base com células de 5.7km de lado:
-- número de municípios com cobertura-base com células de 5.7km de lado:
  SELECT COUNT (*)
  SELECT COUNT (*)
Linha 157: Linha 157:
) a
) a
WHERE lgth_prefix = 4 and isolabel_ext like 'BR%';
WHERE lgth_prefix = 4 and isolabel_ext like 'BR%';
count
-- count   2551
-------
   2551
(1 row)


-- percentil 75 , 90 :
-- percentil 75 , 90 :
Linha 172: Linha 169:
) a
) a
WHERE lgth_prefix = 4 and isolabel_ext like 'BR%' order by 1;
WHERE lgth_prefix = 4 and isolabel_ext like 'BR%' order by 1;
percentile_75 | percentile_90  
</syntaxhighlight>
 
<pre> percentile_75 | percentile_90  
---------------+---------------
---------------+---------------
             25 |            30
             25 |            30
(1 row)
</pre>
</pre>


=== Poeira ===
=== Poeira ===
A consulta a seguir retorna as células de cobertura (base ou overlay) que possuem area menor que cem metros quadrados:
A consulta a seguir retorna as células de cobertura (base ou overlay) que possuem area menor que cem metros quadrados:
<pre>
<syntaxhighlight lang="sql">
select * from osmc.tmpvwpoeira;
select * from osmc.tmpvwpoeira;


Linha 187: Linha 184:


(75 rows)
(75 rows)
</pre>
</syntaxhighlight>


[[Categoria:OSMcodes]]
[[Categoria:OSMcodes]]
2 402

edições