Я надеюсь найти способ, используя 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