Как расширить полигон на определенное расстояние? - PullRequest
0 голосов
/ 20 сентября 2018

Как расширить полигон на определенное расстояние?Я создаю выпуклый корпус вокруг мультиточки.Но мне нужно расширить радиус действия до нескольких километров.По крайней мере, в теории.

http://img.radiokot.ru/files/21274/1oykzc5pez.png

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Предполагая, что вы можете получить выпуклый корпус (который, возможно, вы используете ConvexHullAggregate!), STBuffer() должен делать то, что вы хотите.

declare @hull geography = «your value here»;
select @hull.STBuffer(10000); -- 10 km buffer

Примечание: 10000 возможно, потребуется изменить в зависимости от используемого вами SRID, поскольку в SRID заложены единицы измерения расстояния.Но SRID 4326 - это то, что используется в документах чаще всего, и нативная единица для этого SRID - метры.Итак, 10 км → 10000 м.

0 голосов
/ 20 сентября 2018

Построить вектор внешней биссектрисы в каждой вершине (как сумма нормализованных нормалей na и nb двух соседних ребер) и нормализовать его

enter image description here

bis = na + nb
bis = bis / Length(bis)

Сделать длину биссектрисы, чтобы обеспечить необходимое расстояние, как

 l = d / Cos(fi/2)

, где d - это смещение, а fi - угол между векторами na и nb.

 fi = atan2(crossproduct(na,nb), dotproduct(na,nb))

или без тригонометрических функций:

l = d / Sqrt(1 + dotproduct(na,nb))

И найти смещенную вершину многоугольника:

 P' = P + l * bis
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...