Кільцеві перехрестя в PostGIS


10

Це далі з попереднього запитання . Ви побачите, що я новий користувач PostGIS.

Я вивчив обґрунтованість топології в своїх даних і виявив близько 1700 проблем з топологією в наборі даних про обкладинку (полігон). Це все "Самозаймання кільця".

Користуючись корисною інформацією в цій презентації Пола Рамсая (стор. 20), я спробував відповідно завантажувати свої дані:

ОНОВЛЕННЯ schema.data Встановіть_geom = буфер (the_geom, 0.0) WHERE isvalid (the_geom) = false та isvalid (буфер (the_geom, 0.0)) = true;

Але я отримую відповідь:

ПОВІДОМЛЕННЯ: Самостійне перехрестя дзвінка в точці або біля неї (відредаговано) ПОМИЛКА: новий рядок для відношення "sgm_buffer" порушує контрольне обмеження "прымушення_геотип_те_геома"

********** Помилка **********

ПОМИЛКА: новий рядок для відношення "sgm_buffer" порушує контрольне обмеження "Execuce_geotype_the_geom" Стан SQL: 23514

Я також спробував просто:

ОНОВЛЕННЯ csgn.sgm_buffer НАЛАШТУВАТИ буфер_geom = (the_geom, 0.0)

і отримуй:

ПОМИЛКА: новий рядок для відношення "sgm_buffer" порушує контрольне обмеження "Execuce_geotype_the_geom"

********** Помилка **********

ПОМИЛКА: новий рядок для відношення "sgm_buffer" порушує контрольне обмеження "Execuce_geotype_the_geom" Стан SQL: 23514

Тож я припускаю, що ця буферна методика не працюватиме на мої проблеми? Або я роблю щось не так?

Тоді містер Рамсей продовжує роботу в тому ж документі, щоб запропонувати додаткову техніку поводження з полігонами "цифра 8". Я не зовсім розумію, як написати це повністю в коді (або що він робить і чи допоможе мені):

ВИБІРТЕ ST_BuildArea (ST_Union ('ЛІНІСТРІНГА ПОМОЩА', ST_ExteriorRing ('ПОЛІГОН ((...))'

Отже .... може хтось допоможе? Це є справжнім кошмаром з моїми жорсткими часовими рамками та обмеженими навичками в PostGIS.


1
що повертає "select geometry_type (the_geom) з sgm_buffer limit 1"? Також, пов’язані із часом 40 годин, про який йдеться в іншому запитанні, чи є на вашому столі просторові індекси?
diciu

Можливо, вам потрібно ST_Multi()буде змусити всі багатокутники бути MULTIPOLYGONs (це припущення)
Mike T

Дякую за коментарі - diciu Я думаю, що є індекси, вони здаються видимими в pgAdminIII, але, можливо, мені потрібно їх оновити? Я міг би знайти рішення для прискорення запиту - я не знаю, який би розумний час для його запуску? Landcover має приблизно 20 мільйонів функцій.
ESRIHelp

Відповіді:


12

Я думаю, що відбувається, що ваші самопересічні багатокутники стають МНОГОПОЛІГОНАМИ при буферизації.

у вас є два варіанти:

1 видаліть обмеження "Execuce_geotype_the_geom", ви можете зробити це в pgAdmin
2, помістивши результат у нову таблицю замість оновлення старої. це часто хороший спосіб робити речі, тому що ви нічого не змінюєте у своїй початковій таблиці. запит може виглядати приблизно так:

CREATE TABLE new_buffered_table as
SELECT ST_Buffer(the_geom,0.0) as the_geom, gid FROM original_table;

звичайно, ви можете захотіти принести більше полів до вашої нової таблиці.

спершу спробуйте трюк буфера. У другому підході Пол може сказати собі, що впливає на порожню лінію рядків. Я не пам'ятаю, як відбувається ця магія.


0

У мене були ті ж самі проблеми кілька місяців тому. У мене в базі даних були багатокутники з великою кількістю самопересічень. Я використовував метод Niklas Aven, але це не спрацювало. Я також використовував інші методи.

Мій метод полягає у видаленні самоперетину з моїх багатокутників. Ось запит SQL, який я використовував:

     -- Create the new polygons 

SELECT ST_GeomFromText(polygone) as geom

   from (

    SELECT st_astext(ST_MakePolygon(linear)) as polygone

        from (
              SELECT st_astext
                ((ST_dump
                   (st_boundary
                      (ST_MakeValid
                     (ST_Transform
                        (ST_SETSRID
                           (geometry,4326),32631))))).geom) 
                          as linear from tables_name)
        as query2)

  as query1

where ST_area(polygone) > 1

Я обчислив площу багатокутника та самоперехрестя, і я буду тримати лише багатокутники, які мають площу> 1. 1- це допуск, оскільки площа самоперехрестя дуже мала. Також зауважте, що перетворення SRID в метри є важливим, якщо у вас є дані в градусах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.