ios 将Map框Map的GPS坐标转换为Metal图层坐标

1u4esq0p  于 2023-10-21  发布在  iOS
关注(0)|答案(1)|浏览(124)

我试图画一个三角形连接柏林,基辅和赫尔辛基(或任何这样的位置)上的CustomLayer与Mapbox iOS SDK使用金属。当Map缩放或拖动时,三角形应随Map和这些城市移动。
这些位置的坐标是经度和纬度。而在Metal中绘制任何东西都需要坐标,其中中心是屏幕的中间,从BottomLeft(-1,-1)到TopRight(1,1)。我的图纸需要转换的长期和横向到金属GL图纸坐标系。就像-

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

我想我可以做一些数学和转换360度长和横向到2.0单位的规模,金属的画布可以理解。但这需要考虑到缩放级别,屏幕上可见的Map部分等。类似于@nauti在this中所做的回答。每次渲染Map时都会进行此计算(每秒60次),移动Map或更改缩放级别时也会进行相同的计算。似乎有很多计算。理想情况下,SDK中应该有一种方法可以做到这一点,或者至少有一些实用方法。
长话短说,我处理问题的方法是错误的吗?有人做过类似的事情吗?如何将坐标从一个系统转换到另一个系统?哪个部分进入着色器。
当然,我将在最后的应用程序中绘制一个稍微复杂一点的对象。连接城市的三角形只是我的理解。
我尝试在iOS上使用Mapbox iOS SDK与Swift。

z18hc3ub

z18hc3ub1#

也许你可以使用从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)
因此,要从这些坐标得到从BottomLeft(-1,-1)到TopRight(1,1)的Map中的坐标,我想你只需要知道Map两个对角的x,y坐标(假设Map是线性投影的)。

相关问题