在我知道三个角(或任何三个非对齐点)的坐标(lat / lng)的地图上,我有位于地图上的几个点的坐标(lat / lng)。
我想要的是相对于地图的点的相对坐标(相对于左上角的x / y)。
我也对其他转换感兴趣(x / y到lat / lng)。
我的地图非常小(小于10公里x 10公里)我需要使用投影系统还是我可以假设我的表面是完全平坦的并使用线性转换?
编辑:我不知道(我无法知道)我的背景地图使用哪个投影。我只知道3个地理参考点。
解决方案是使用线性转换:
如果我的三个点是A(xA,yA),B(xB,yB),C(xC,yC)和我想要定位X(x,y)的点。
我可以在lat / lng参考中计算a
和b
作为AX = aAB + bAC
然后
x = xA + a * (xB-xA) + b * (xC - xA)
y = yA + a * (yB-yA) + b * (yC - yA)
但看起来我错过了一些东西?
这取决于地图,但线性变换很简单。您还可以使用Kavrayskiy转换。我也发现了反面:Get latitude and longitude from X and Y coordinates。这是一个关于mercantor投影的问题:Convert lat/lon to pixel coordinate?。
你是对的,你错过了什么。你的公式(我没有深入研究过)看起来是线性的,因此似乎只适用于仿射变换。地图(通常)不是从(lat,lon)到(x,y)的仿射变换。
如果事情那么简单,你就可以确定变换,即使你知道10x10平方的点(0,0),(10,0)和(5,10)的坐标 - 但你不能,因为x方向可以保存距离或经度或其他东西(当纬度,即y变化时),你不能区分这些情况。您将不得不使用其他信息。