Я импортировал некоторые данные в базу данных Postgis, и некоторые геометрии были объявлены неверными (ST_IsValidReason сообщает о самопересечении или кольцевом самопересечении).
На запросы, которые я выполняю, похоже, не влияет неверный аспект этих геометрий (я использую только запросы ST_Distance).
Какие вещи ломаются, когда геометрия неверна?
Является ли исправление этих геометрий «автоматическим» (буфер (geom, 0) или ST_SimplifyPreserveTopology (geom, 0.0001)), как вариант?
источник
ST_Buffer(the_geom, 0.0000001)
может сделать трюк для самопересечения. Используйте его только в том случае, если последствия немного большей геометрии не являются серьезными.ST_Buffer(the_geom, 0.0000001)
Трюк определенно помогает.MULTIPOLYGON
два полигона, а не как одинPOLYGON
. Попробуйте получить оригинальный WKT, если это возможно.Вы можете предотвратить попадание неверной геометрии в вашу базу данных. Для пользователей PostgreSQL / PostGIS это просто сделать с проверочными ограничениями . Например, рассмотрим таблицу
public.my_valid_table
со столбцом геометрии многоугольникаgeom
, используйте следующий SQL / DDL:Примечание: эта таблица должна иметь допустимые полигоны, прежде чем применять ограничение.
Если вы затем попытаетесь вставить / добавить неверную геометрию, вы увидите ошибку:
источник