Zaimportowałem niektóre dane z bazy danych Postgis, a niektóre geometrie zostały zgłoszone jako nieprawidłowe (ST_IsValidReason zgłasza samo-skrzyżowanie lub samo-skrzyżowanie pierścienia).
Wydaje się, że na zapytania, które wykonuję, nie ma wpływu nieprawidłowy aspekt tych geometrii (używam tylko zapytań ST_Distance).
Jakie rzeczy psują się, gdy geometrie są nieprawidłowe?
Czy naprawianie tych geometrii „automatycznie” (bufor (geom, 0) lub ST_SimplifyPreserveTopology (geom, 0.0001)) jest opcją?
źródło
ST_Buffer(the_geom, 0.0000001)
może załatwić sprawę na skrzyżowaniu. Używaj go tylko wtedy, gdy konsekwencje nieco większej geometrii nie są poważne.ST_Buffer(the_geom, 0.0000001)
Trik zdecydowanie pomaga.MULTIPOLYGON
z dwóch wielokątów, a nie jako pojedynczyPOLYGON
. Spróbuj uzyskać oryginalny WKT, jeśli to możliwe.Możesz przede wszystkim zapobiegać przedostawaniu się nieprawidłowych geometrii do bazy danych. Dla użytkowników PostgreSQL / PostGIS jest to proste w przypadku ograniczeń sprawdzania . Rozważmy na przykład tabelę
public.my_valid_table
z kolumną geometrii wielokątówgeom
, użyj następującego kodu SQL / DDL:Uwaga: ta tabela musi mieć prawidłowe wielokąty przed wymuszeniem ograniczenia.
Jeśli następnie spróbujesz wstawić / dodać nieprawidłową geometrię, zobaczysz błąd:
źródło