digital-guard / preserv

Digital Preservation Project
http://git.digital-guard.org/preserv
Apache License 2.0
0 stars 0 forks source link

Buffer em geometrias de jurisdições. #83

Closed 0e1 closed 2 years ago

0e1 commented 2 years ago

Atualmente, as geometrias das jurisdições são obtidas do OpenStreetMap obtidos em Fevereiro/2022. Especificamente, do pacote de dados https://github.com/digital-guard/preserv-BR/tree/main/data/_pk0004.03. As geometrias, no caso do Brasil tem origem em dados do IBGE, majoritariamente. Ao longo do tempo sofrem modificações pela comunidade. É de se esperar diferença entre geometrias do OSM e as utilizadas pelos doadores de dados.

Assim, será aplicado um buffer às geometrias do OSM por default. Opcionalmente, poderá ser aplicado um buffer maior ou não aplicar nenhum.

Passos a seguir, sendo utilizada a geometria de Porto Alegre/RS como caso:

0e1 commented 2 years ago

Foi criada função buffer_geom para aplicar buffer_type à geometria da jurisdição.

buffer_type considerados:

buffer_type: 1, valor default, aplica um buffer de aproximadamente 50 metros. Não é necessário informá-lo no _makeconf.yaml. É inserido automaticamente pela função jsonb_mustache_prepare caso não seja informado. buffer_type: 0, sem buffer. Para utilizá-lo, deve-se informá-lo no _makeconf.yaml buffer_type: 2, aplica um buffer de aproximadamente 500 metros. Para utilizá-lo, deve-se informá-lo no respectivo layer do _makeconf.yaml

Função buffer_geom:

CREATE OR REPLACE FUNCTION ingest.buffer_geom(geom geometry, buffer_type integer )
RETURNS geometry AS $f$
    SELECT
        CASE
        WHEN buffer_type=0 THEN geom                   -- no buffer
        WHEN buffer_type=1 THEN ST_Buffer(geom,0.0005) --  ~50m
        WHEN buffer_type=2 THEN ST_Buffer(geom,0.005)  -- ~500m
        ELSE geom                                      -- no buffer
        END
$f$ LANGUAGE SQL IMMUTABLE;
ppKrauss commented 2 years ago

Parece que tudo resolvido, e já esta sendo útil para detectar problemas de SRID e mistura de jurisdições. Se precisar (agora com @crebollobr), acrescentar mais um buffer_type=3 de 5 km, util para jurisdições continentais (ex. limites do Brasil).