У меня есть несколько перекрывающихся полигонов, и я пытаюсь разделить пространство, чтобы избежать перекрывающихся. Я думаю, что моя проблема довольно проста. Используя некоторый продукт ESRI и http://arcscripts.esri.com/details.asp?dbid=16700, мой коллега вычислил его за 48 секунд.
Я пытаюсь сделать это с помощью postgis, используя http://s3.opengeo.org/postgis-power.pdf#page=24 (угадывая детали, используя http://trac.osgeo.org/postgis/wiki/UsersWikiSimplifyPreserveTopology как вдохновение) но это так медленно, что я не могу сделать это с более чем 10 полисами (у меня есть 800 из них, чтобы разделить). Медленная часть - это ST_Union, я пробовал разные вещи, но ни одна из них не была успешной, вот текущее состояние дел:
select geom from
(select st_linemerge(st_union(geom)) as geom from
(select st_exteriorring((st_dumprings((st_dump(t.geom)).geom)).geom) as geom from
(SELECT geometry AS geom, id
FROM tt
WHERE campaign_id = 204
ORDER BY id limit 200) t) t2) t3
это было вычисление в течение 26 минут (linemerge () на самом деле нет). Polys - это MultiPolygons на случай, если st_dump вас не устраивает.
У вас есть совет? St_union () линейной работы - очень медленная часть.
Спасибо,
Нико.
PS: вот некоторые числа: 852 мультиполигона, что приводит к 14880 полигонам, что приводит к 21467 линейным строкам, что составляет 315513 вершин.
источник
Ответы:
Этот ответ может не помочь @nraynaud напрямую, но, мы надеемся, поможет пролить свет на эту тему.
В spatiaLite <4.0 существует аналогичная проблема из-за проблемы с GEOS. Смотрите эту ссылку для обсуждения вопроса.
Обходной путь должен заменить функцию ST_Union () на ST_UnaryUnion (ST_Collect ()). К сожалению, ST_UnaryUnion не доступен до PostGIS 2.0 (насколько я могу судить.)
источник
Какую версию PostGIS вы используете? Объединение происходит намного медленнее, если вы используете PostGIS <1.4 или GEOS <3.2. Гораздо быстрее объединение было введено в 1.4, но также требует GEOS 3.2+. Итак, сначала, если вы используете версию ниже 1.4, я бы обновился как минимум до 1.5.
Проверить.
Также вы намерены сохранить исходные края полигонов. Если вы просто хотите растворить перекрывающиеся области,
Сделал бы трюк.
источник