Вычисление внешней границы нескольких объектов Geometry в SQL Server 2008 - PullRequest
5 голосов
/ 30 ноября 2011

У меня много Polygons типов данных Geometry в SQL Server 2008. На изображении ниже показано, как визуализируется выборка из всех этих геометрий.

Lots of Geometrys

Что мне нужно сделать, так это создать многоугольник, который представляет внешнюю границу всех этих многоугольников. Поэтому я использовал ответ на предыдущий пространственный вопрос Я попросил создать следующий код:

DECLARE @test TABLE(geom GEOMETRY);

INSERT INTO @test SELECT geom FROM ForceBoundary

DECLARE @geom GEOMETRY
SELECT @geom = (SELECT TOP 1 geom FROM @test)
SELECT @geom = @geom.STUnion(geom) FROM @test

SELECT @geom

Это привело к следующему результату с трещинами из-за дыр между полигонами:

Combined polygons with cracks

Поэтому я обновил свой запрос следующим изменением:

INSERT INTO @test SELECT geom.Reduce(0.001).STBuffer(100) FROM ForceBoundary

Что улучшило результат, но не решило проблему полностью, а также повлияло на точность внешней границы.

Combined polygons with less cracks

Как правильно достичь этого? Просматривая список функций STxxxx, я не смог найти ту, которая, казалось бы, дала нужные мне результаты?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

Ответ предоставлен geographika в GIS StackExchange :

Похоже, вы хотите удалить осколки .Для этого в проекте Пространственные инструменты SQL Server есть функция - FilterArtifactsGeometry .

Сообщение в блоге об использовании функции можно найти здесь .

Имеется опция для фильтрации небольших полонов с помощью параметра ringTolerance :

Удалите все кольца многоугольника тоньше, чем предусмотренный допуск (например, ring.STArea

На практике это позволяет обнаруживать и удалять очень тонкие многоугольные кольца (осколки), оставляя только многоугольные кольца более типичной формы.Предполагается, конечно, что ленты являются нежелательными, но нежелательны кольца без ленты.

0 голосов
/ 01 декабря 2011

Вы пробовали команду [geom] .STExteriorRing ()?

...