digital-guard / preserv

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

Delete de SRID. Conflito entre srid_proj e codec: srid #131

Closed 0e1 closed 1 year ago

0e1 commented 1 year ago

Ingerir BR-ES-CachoeiroItapemirim/_pk0091.01 provocou DELETE FROM spatial_ref_sys WHERE srid=31984 e inviabilizou a ingestão de BR-ES-VilaVelha/_pk0091.01 e BR-MG-GovernadorValadares/_pk0091.01.

Confira os resultados nas tabelas ingest.donated_packcomponent e ingest.feature_asis.
psql postgres://postgres@localhost/ingest42 -c "DROP  TABLE IF EXISTS pk7600009101301_p3_nsvia CASCADE"
DROP TABLE
Delete SRID 31984 configurado via PROJ.4 string:
+proj=longlat +datum=WGS84 +no_defs
psql postgres://postgres@localhost/ingest42 -c "DELETE FROM spatial_ref_sys WHERE srid=31984;"
DELETE 1
FIM.

BR-ES-CachoeiroItapemirim/_pk0091.01 usa a chave srid_proj que define um srid global e fake, que é apagado ao final da ingestão de cada camada conforme o template common001_pgAny_load.

No entanto a camada nsvia sobreescreve o srid global:

srid_proj: +proj=longlat +datum=WGS84 +no_defs

layers:
  nsvia:
    codec: SHP~Latin1;srid=31984

que acaba sendo apagado. Esse é um comportamento não esperado.

Possível solução: usar flag para indicar a sobreescrição e impedir o delete.

0e1 commented 1 year ago

Em https://github.com/digital-guard/preserv/commit/6f41d8f4eb5ed640c4081579aff270da52b9f23a foi utilizada flag para controlar o delete e baseado em

dl05s_main=# SELECT postgis_full_version();
                                                                        postgis_full_version                                                                        
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
 POSTGIS="3.3.2 4975da8" [EXTENSION] PGSQL="140" GEOS="3.10.2-CAPI-1.16.0" PROJ="8.2.1" LIBXML="2.9.13" LIBJSON="0.15" LIBPROTOBUF="1.3.3" WAGYU="0.5.0 (Internal)"
(1 row)

dl05s_main=# select version();
                                                                version                                                                 
----------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 14.8 (Ubuntu 14.8-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0, 64-bit
(1 row)

foi recuperado o srid 31984 de _/usr/share/postgresql/14/contrib/postgis-3.3/spatial_refsys.sql

com

INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) VALUES
(31984, 'EPSG', 31984, 'PROJCS["SIRGAS 2000 / UTM zone 24S",GEOGCS["SIRGAS 2000",DATUM["Sistema_de_Referencia_Geocentrico_para_las_AmericaS_2000",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6674"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4674"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-39],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","31984"]]', '+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ')

ON CONFLICT DO NOTHING;

Com isso, foi feita a ingestão de BR-ES-VilaVelha/_pk0091.01 e de BR-MG-GovernadorValadares/_pk0091.01.