Как создать буферизованную строку LineString с шириной, определенной в метрах, при использовании GEOSwift? - PullRequest
0 голосов
/ 13 февраля 2019

Я надеюсь найти способ, используя GEOSwift, взять серию пользовательских LatLng, создать линейную строку и буферизовать ее, чтобы она всегда была шириной 30 метров независимо от местоположения пользователя.Я чувствую, что должен быть более простой путь, чем путь, по которому я иду, и любая помощь будет признательна.

Справочная информация:

Из того, что я могу сказать,Параметр ширины буферных функций в настоящее время определяется в десятичных градусах, поскольку моя система координат - EPSG 4326, что затрудняет вычисление ширины в метрах.Я могу получить приблизительную оценку метров на десятичный градус как для долготы, так и для широты с помощью формулы Хаверсайна.

У меня проблема в том, что ряд точек может двигаться как в продольном, так и в продольном направлении.Таким образом, ширина буфера, которая мне нужна в этих случаях, лежит где-то между ThirtyMetersInLatDegrees и ThirtyMetersInLngDegrees.И в этом случае ширина для подачи в буферную функцию становится странным приближением / усреднением общего продольного и широтного перемещения пользователя по всей линейке, связанной с ThirtyMetersInLngDegrees и ThirtyMetersInLatDegrees.

, т. Е. При условии, что ThirtyMetersInLngDegrees является максимальным:

ThirtyMetersInLatDegrees <= bufferWidth <= ThirtyMetersInLngDegrees

Как мне лучше это сделать?

Вот как я рассчитываю метры на десятичный градус:

//Earth’s radius
let R=6378137.0

let deviceLatitude = 37.535997
let OneMeterInLatDegrees = 1/R * (180/Double.pi)
let OneMeterInLngDegrees = 1/(R*cos(Double.pi*deviceLatitude/180)) * (180/Double.pi)
let ThirtyMetersInLatDegrees = 30 * latDegreesPerMeter
let ThirtyMetersInLngDegrees = 30 * lngDegreesPerMeter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...