Closed crebollobr closed 1 year ago
Eu adicionei o README e o reproducibility.sh para facilitar o suporte.
A função any_load tem o trecho de código
SELECT *
FROM a0
WHERE ST_IsClosed(geom) = TRUE OR GeometryType(geom) IN ('LINESTRING','MULTILINESTRING')
e o trecho
SELECT file_id, gid, properties, geom, B'000100000000' AS error
FROM a0
WHERE ST_IsClosed(geom) = FALSE AND GeometryType(geom) NOT IN ('LINESTRING','MULTILINESTRING')
Esses trechos tem por objetivo detectar e marcar polígonos não fechados.
Obviamente, linhas não são fechadas. Então o problema está no tipo da geometria do layer e nos tipos de linhas que levamos em conta nos trechos de código mencionados acima. Veja
ingest1=# SELECT ST_IsClosed(geom) FROM pk7600010601101_p1_via LIMIT 1;
st_isclosed
-------------
f
(1 row)
ingest1=# SELECT GeometryType(geom) FROM pk7600010601101_p1_via LIMIT 1;
geometrytype
------------------
MULTILINESTRINGM
(1 row)
Em resumo, o problema decorre da falta de 'MULTILINESTRINGM'
nos trechos de código.
@ppKrauss o que fazer com linhas que possuem vértices com de mais de duas dimensões?
@crebollobr alguma informação sobre como interpretar a dimensão extra nos vértices das linhas?
O caminho adotado para essa situação será:
O caminho adotado para essa situação será:
* forçar 2 coordenadas com https://postgis.net/docs/ST_Force2D.html; * usar um dos dois bits reserva na _error_mask_ para indicar que foi descartada a 3 dimensão; * apesar disso a geometria **não** será descartada.
Não foi adotado esse caminho.
'LINESTRINGM','MULTILINESTRINGM'
foram adicionados conforme o commit https://github.com/digital-guard/preserv/commit/140196d990a9776f8d1b78616fecb4898b73d250.
O motivo de não aplicar ST_Force2D foi que ST_SimplifyPreserveTopology e ST_ReducePrecision aplicadas por default em todas as geometrias ingeridas já ignoram a terceira coordenada. Isso pode ser visto aplicado as funções diretamente nas geometrias de pk7600010601101_p1_via
:
SELECT GeometryType(ST_SimplifyPreserveTopology( -- remove collinear points
ST_ReducePrecision( -- round decimal degrees of SRID 4326, ~1 meter
geom
,0.000001
),
0.00000001
)) FROM pk7600010601101_p1_via LIMIT 10;
geometrytype
--------------
LINESTRING
MULTILINESTRING
...
(10 rows)
Output da ingestão após a mudança:
psql postgres://postgres@localhost/ingest42 -c "SELECT ingest.any_load('shp2sql','/tmp/sandbox/_pk7600010601_001/Export_Output.shp','via_full','pk7600010601101_p1_via','7600010601101','b1cc16e9070aa2c624d1eeebde8a00e4b9bea471fb76a79c4f8ec5902c250c3e.rar',array['NOME as via'],5,1)"
any_load
---------------------------------------------------------------------------------------------------
Statistics from file_id=581 (via_full of 7600010601101 of BR-PR-Londrina) in ingest.feature_asis.+
+
Originals: 6096 items. +
+
Not Intersecs: 2 items. +
+
Invalid: 0 items. +
+
Not simple: 80 items. +
+
Empty: 7 items. +
+
Small: 24 items. +
+
Null: 0 items. +
+
Invalid geometry type: 0 items. +
+
Not closed: 0 items. +
+
Large: 0 items. +
+
Deduplication: 4 items. +
+
Resulting in feature_asis: 5983. +
+
Resulting in feature_asis_discarded: 110. +
(1 row)
Confira os resultados nas tabelas ingest.donated_packcomponent e ingest.feature_asis.
psql postgres://postgres@localhost/ingest42 -c "DROP TABLE IF EXISTS pk7600010601101_p1_via CASCADE"
DROP TABLE
FIM.
Banco ingest20
Link https://github.com/digital-guard/preserv-BR/tree/main/data/PR/Londrina/_pk0106.01