在我知道三个角(或任何三个非对齐点)的坐标(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)
但看起来我错过了什么?
答案 0 :(得分:0)
这取决于地图,但线性变换很简单。您还可以使用Kavrayskiy转换。我也发现相反:Get latitude and longitude from X and Y coordinates。以下是有关mercantor投影的问题:Convert lat/lon to pixel coordinate?。
答案 1 :(得分:0)
如果您想获得准确的转换,则需要使用国家/地区的本地投影,这些坐标属于。你可以通过查找谷歌地图中的一个坐标(假设整个坐标集不跨越一个巨大的区域)轻松识别出来,这将告诉你坐标在哪个国家/地区。从那里,您可以查找该国家/地区使用的本地投影系统。除非此处的目的是为您自己提供转换算法/实用程序,否则您可以使用一些库来实现所有需要的计算,以便从多个投影系统重新投影坐标:
答案 2 :(得分:0)
你是对的,你错过了什么。你的公式(我没有深入研究过)看起来是线性的,因此似乎只适用于仿射变换。地图不是(通常)从(lat,lon)到(x,y)的仿射变换。
如果事情那么简单,即使你知道10x10平方的点(0,0),(10,0)和(5,10)的坐标,你也可以确定转换 - 但你不能,因为x方向可以保存距离或经度或其他东西(当纬度,即y变化时),你不能区分这些情况。您将不得不使用其他信息。