从一个 UTM 区域到其他区域的项目点

Project point from one UTM zone to other

我目前正在做一个项目,我们必须根据两个(用户输入)点的已知位置找出一个点的位置。

现在的问题是用户可以在不同的 UTM 区域提供两个点,所以我们必须将其中一个点投影到另一个系统(至少我们是这样做的。)

我在 Python 中编写了一个参考实现来测试它,现在我们想在 iOS 上的生产中使用此功能。好像唯一的swift proj library here已经过时了,不能用了

我们四处寻找了一下,但没有找到如何在不使用附加软件的情况下将一个点从一个区域投影到另一个区域的说明。

您知道这是否可行,或者是否有 swift 的最新项目库?

Project point from one UTM zone to other

您可能很清楚,由于您已经在 Python 中编写了参考实现,因此分两步完成:

1.将UTM中的一点投影到地理坐标,即从[E,N,Zone,Hemisphere]到纬度、经度(φ,λ);

然后,

2.将得到的Geographic Coordinates投影到UTM(另一个Zone,不同于1),即从纬度,经度(φ,λ)到UTM坐标(E, N).

因为你没有提到任何 Datum conversion, PROJ library becomes overkill to accomplish this task. Besides, the question is not about How to call C from Swift

甚至更多,因为对于大多数主流语言(Java、Javascript、Python、C#),即使在 SO 上也有很多 UTM 实现,或至少可以轻松适应 UTM 的横向墨卡托实现(UTM 系统使用横向墨卡托作为制图投影)。

对于 Swift 我在 SO 上找不到,但是在 GitHub 上我可以找到。

https://github.com/wtw-software/UTMConversion

转换发生在自定义结构 UTMCoordinate 与 CoreLocation 的 CLLocationCoordinate2D 和 CLLocation 之间。

如果您不使用库使用的默认值 WGS84,甚至可以指定自定义数据。

import CoreLocation
import UTMConversion

let utmCoordinate = UTMCoordinate(northing: 7034313, easting: 569612, zone: 32, hemisphere: .northern)
let datum = UTMDatum(equitorialRadius: 6378137, polarRadius: 6356752.3142)
let coordinate = utmCoordinate.coordinate(datum: datum)

可以通过将库输出与 Python 实施的结果进行比较来获得准确性。

如果您对结果不满意,您可以随时修改源代码,特别是以下文件,其中横向墨卡托投影(硬数学)是:

https://github.com/wtw-software/UTMConversion/blob/master/UTMConversion/TMCoordinate.swift