使用GEOSwift时,如何创建宽度为米的缓冲LineString?

时间:2019-02-13 15:53:34

标签: ios swift cocoapods geospatial geoswift

我希望找到一种使用GEOSwift来获取一系列用户的LatLng的方法,构造一个线串并将其缓存为30米宽,无论用户身在何处。我觉得必须有比我走的路更简单的方法,我们将不胜感激。

背景

据我所知,由于我的坐标系是EPSG 4326,因此缓冲区函数的width参数当前以十进制度定义,这使得以米为单位的宽度计算变得困难。使用Haversine公式,可以得出经度或纬度的每十进制度米的粗略估计。

我遇到的问题是一系列点可以在纬度和纵向方向上移动。因此,在这些情况下,我需要的缓冲区宽度介于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

0 个答案:

没有答案