Closed 0e1 closed 1 year ago
Sobre BR-PB-JoaoPessoa/_pk0072.01, usando reproducibility.sh do layer via obtemos
SELECT ST_Transform(geom,4326) FROM pk7600007201201_p2_via;
ERROR: transform: Point outside of projection domain (2050)
Utilizando a função descrita em Find geometries with coordinates that do not belong in projection obtemos o gid com problema
SELECT gid, nome_logr, ST_AsText(geom) FROM pk7600007201201_p2_via WHERE transform_safe(geom,4326) IS NULL AND geom IS NOT NULL;
WARNING: XX000: transform: Point outside of projection domain (2050)
gid | nome_logr | st_astext
-------+-------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
21751 | RUA SEM NOME 7561 | MULTILINESTRING((NaN 9204702.09840553,NaN 9204702.965978181,NaN 9204713.37684997,NaN 9204684.313166225,NaN 9204669.130644867,NaN 9204668.263072219,NaN 9204650.044046588,NaN 9204646.57375599))
(1 row)
Assim, excluindo tal gid podemos usar ST_Transform(geom,4326) sem problemas.
Sobre BR-AM-Manaus/_pk0071.01 usando reproducibility.sh do layer geoaddress e a mesma função citada anteriormente
SELECT gid, ST_AsText(geom) FROM pk7600007101101_p1_geoaddress WHERE transform_safe(geom,4326) IS NULL AND geom IS NOT NULL;
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
WARNING: XX000: transform: Point outside of projection domain (2050)
gid | st_astext
-------+--------------------------------------------------------
15703 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
15767 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
15780 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
15879 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
15937 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
16211 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
16395 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
18290 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
18420 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
18449 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
18450 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
18704 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
18874 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
18931 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
18932 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
19198 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
19199 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
19203 | POINT(-1.797693134862316e+308 -1.797693134862316e+308)
(18 rows)
Excluindo tais gid, podemos usar a ST_Transform.
Necessário avaliar forma de excluir gids antes de aplicar a função _anyload. Verificar se a chave after_extract
utilizada em CO/_pk0006.02 pode ser usada nesse caso.
Outra possibilidade é remover as features problemáticas logo no inicio da _anyload, antes da aplicação da ST_Transform. Podendo ainda atribuir um bit na error_mask para indicar esse problema (temos ainda 2 bits de reserva). Trecho onde é aplicada a ST_Transform na _anyload:
q_query := format(
$$
WITH
scan AS (
SELECT %s AS file_id,
CASE
WHEN %s THEN gid
ELSE gid+COALESCE((SELECT MAX(feature_id) FROM ingest.feature_asis WHERE file_id=%s),0)
END AS gid,
properties,
CASE
WHEN ST_SRID(geom)=0 THEN ST_SetSRID(geom,4326)
WHEN %s AND ST_SRID(geom)!=4326 AND %s THEN ST_Transform(geom,4326)
ELSE geom
END AS geom
FROM (
SELECT %s, -- feature_id_col
%s as properties,
%s -- geom
FROM %s %s
) t
),
a0 AS (
SELECT *
FROM scan
WHERE ST_IsValid(geom)
),
Avaliar ainda a utilização de sql_view
no lugar de sql_select
, de maneira que se exclua as features problemáticas. Necessário conhecer os gid e que exista um identificador na camada.
BR-RS-PortoAlegre/_pk0018.01 é um exemplo de uso com sql_view
complexo.
Avaliar ainda a utilização de
sql_view
no lugar desql_select
, de maneira que se exclua as features problemáticas. Necessário conhecer os gid e que exista um identificador na camada.BR-RS-PortoAlegre/_pk0018.01 é um exemplo de uso com
sql_view
complexo.
Solução aplicada para BR-PB-JoaoPessoa/_pk0072.01 no commit https://github.com/digital-guard/preserv-BR/commit/77c61c3944f3dd263e3a686d5bf6e60637d5b8e9.
Solução aplicada para BR-AM-Manaus/_pk0071.01 no commit https://github.com/digital-guard/preserv-BR/commit/a930e7820bd1a1424b6d99fe0e595f9e8348fa3c.
Arquivos filtrados dos dois pacotes de dados já estão disponíveis em https://github.com/digital-guard/preserv-BR/issues/144. Arquivos para o CutGeo ainda sendo gerados.
A ingestão de BR-AM-Manaus/_pk0071.01 resultou no erro
erro semelhante resultou a tentativa de ingestão de BR-PB-JoaoPessoa/_pk0072.01