Это продолжение предыдущего вопроса . Вы увидите, что я новый пользователь PostGIS.
Я посмотрел на достоверность топологии в моих данных и нашел около 1700 проблем топологии в наборе данных наземного покрова (полигона). Это все "Кольцо Self_intersection".
Используя некоторую полезную информацию в этой презентации Пола Рамсея (стр. 20), я попытался соответствующим образом буферизовать свои данные:
ОБНОВЛЕНИЕ schema.data SET the_geom = buffer (the_geom, 0.0) WHERE isvalid (the_geom) = false и isvalid (buffer (the_geom, 0.0)) = true;
Но я получаю ответ:
ВНИМАНИЕ: Кольцо самопересечения в точке или около нее (отредактировано). ОШИБКА: новая строка для отношения "sgm_buffer" нарушает проверочное ограничение "forcece_geotype_the_geom"
********** Ошибка **********
ОШИБКА: новая строка для отношения «sgm_buffer» нарушает проверочное ограничение «forcece_geotype_the_geom» Состояние SQL: 23514
Я также попробовал просто:
ОБНОВЛЕНИЕ csgn.sgm_buffer SET the_geom = buffer (the_geom, 0.0)
и получить:
ОШИБКА: новая строка для отношения "sgm_buffer" нарушает проверочное ограничение "forcece_geotype_the_geom"
********** Ошибка **********
ОШИБКА: новая строка для отношения «sgm_buffer» нарушает проверочное ограничение «forcece_geotype_the_geom» Состояние SQL: 23514
Так я предполагаю, что этот метод буфера не будет работать на моих проблемах? Или я что-то не так делаю?
Затем г-н Рамсей продолжает в том же документе предлагать дополнительную технику для работы с полигонами «фигуры 8». Я не совсем понимаю, как написать это полностью в коде (или что он делает и поможет ли это мне):
SELECT ST_BuildArea (ST_Union ('LINESTRING EMPTY', ST_ExteriorRing ('POLYGON ((...))'
Так .... может кто-нибудь помочь? Это доказывает настоящий кошмар из-за моих сжатых сроков и ограниченных навыков в PostGIS.
ST_Multi()
заставить все полигоны быть MULTIPOLYGON
s (это предположение)