将 GPS 坐标转换为 Mapbox 地图的金属层坐标

问题描述 投票:0回答:1

我正在尝试使用 Metal 在 Mapbox iOS SDK 的 CustomLayer 上绘制一个连接柏林、基辅和赫尔辛基(或任何此类位置)的三角形。当地图缩放或拖动时,三角形应随地图和这些城市移动。

这些位置的坐标是经度和纬度。虽然在 Metal 中绘制任何内容都需要中心位于屏幕中间的坐标,从 BottomLeft(-1, -1) 到 TopRight(1, 1)。我的绘图需要将经度和纬度转换为 Metal GL 绘图坐标系。类似的东西-

let berlin: simd_float2 = MapboxUtil.MercatorCoordinate(fromLongitude: 13.403,
                                                             latitude: 52.562)

我想我可以做一些数学运算,将 360 度经度和纬度转换为 Metal 画布可以理解的 2.0 单位比例。但这需要考虑缩放级别、屏幕上可见的地图部分等。就像 @nauti 在 this 答案中所做的那样。每次渲染地图时都会进行此计算(每秒 60 次),并且当移动地图或更改缩放级别时也会发生相同的计算。看来要进行大量的计算。理想情况下,SDK 中应该有一种方法可以做到这一点,或者至少有一些实用方法。

长话短说,我是否以错误的方式处理这个问题?有人做过类似的事情吗?如何将坐标从一种系统转换为另一种系统?什么部分位于着色器内部。

当然,我会在最终的应用程序中绘制一些更复杂的对象。连接城市的三角形只是为了我的理解。

我正在尝试通过 Swift 在 iOS 上使用 Mapbox iOS SDK。

ios swift mapbox mapbox-ios maplibre-gl
1个回答
0
投票

MKMapPoint
是同一个坐标系吗?

import MapKit

let berlin = CLLocationCoordinate2D(latitude: 13.403, longitude: 52.562)
let p = MKMapPoint(berlin)
print("(x,y)=(\(p.x), \(p.y))")

(x,y)=(173410795.8840889, 124131311.78095224)

© www.soinside.com 2019 - 2024. All rights reserved.