Как создать буферизованную строку LineString с шириной, определенной в метрах, при использовании GEOSwift?
Я надеюсь найти способ, используя 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