0

我想制作一个映射室内场所(例如商场)的地图应用程序。我需要能够计算特定地图上任何点的纬度和经度(即知道特定商店的纬度和经度)。我知道地图可能已旋转并且未与真北对齐,因此我首先需要提供有关几个点的信息以进行“校准”,以便知道地图的方向,如果您明白我的意思的话.

我的地图将被格式化为网格/坐标系。我将提供地图上三个特定点的纬度和经度。提供此信息后,如何计算地图上任何其他点的纬度和经度?例如,我有一张地图,我告诉我的程序(0, 0)、(5, 5)和(10, 12)的经纬度数据。然后我输入 (3, 5),程序应该告诉我该点的纬度和经度。

这可能吗?我将如何为此编写算法?此外,是否可以通过用户仅向程序提供两个点的位置来做到这一点?谢谢!

4

2 回答 2

1

假设您的商场足够小,您可以认为 Lat 和 Long 是线性的,即与 X 和 Y 相同,那么只需应用缩放和旋转变换矩阵即可。

如果你的数学有点弱,你可能想试试这个简单的介绍

您还需要能够在纬度/经度和米(或英尺或像素)之间进行转换。纬度(北/南多远)很容易 - 因为通过两极绘制的圆圈长度相同,所以纬度始终是相同的米数(您的准确度)。经度比较棘手,因为随着您向北走,围绕地球绘制的圆圈会变小 - 请参阅Expressing_latitude_and_longitude_as_linear_units

或者,如果您知道已知点(例如角)的纬度/经度,您可以直接从度数缩放到米/英尺/像素。请记住,NS 量表与 EW 量表不同。

于 2012-07-07T00:43:23.900 回答
0

这是可能的,你只需要两点的位置。如果面积足够小,您不必担心平面倾斜或地球是圆的。

假设您在地图坐标中有两个点 X1,Y1 和 X2,Y2(如果您有扫描的地图,像素就可以。或毫米。或其他)。

在这两个点中,您还知道 UTM 中的坐标,并将它们设为 x1,y1 和 x2,y2。

从这些信息中,您可以得出从 UTM 更改为地图所需的旋转和缩放,反之亦然。

此时,如果您知道地图坐标 X3、Y3 的任何其他点,则可以计算其 UTM 坐标。

假设 X 和 Y 轴具有相同的 UTM 参考方向(为此,您需要管理旋转,这更复杂 - 涉及一点三角函数),

 x2-x1 = Zx * (X2-X1)
 x3-x1 = Zx * (X3-X1)

因此

 Zx = (X2-X1)/(x2-x1)

 x3 = x1 + Zx * (X3-X1)

最后

 x3 = x1 + (X3-X1)*[  (X2-X1)/(x2-x1)   ]

(在您确定两个点的位置后,方括号中的部分不会改变 - 这将是一种校准常数)。

y3 和 Y3 也是如此。请注意,Y 轴可能与 y 具有相反的符号。

对于非常小的区域,您可以将纬度和经度转换为任意单位,考虑 1 度等于 60 分钟,1 分钟等于 60 秒,1 秒等于 1000 毫秒。然后从纬度(或经度)转换为毫秒。你得到的数字意义不大——你不知道“毫秒”是什么——但是一旦你计算出,比如以毫秒为单位的 x3,你就可以把它恢复为经度而忘记毫秒;并且该经度将是可用的并且大致正确。如果你离你的两点不远;如果你不把它们拉得太远。一个大商场还可以,一个城市……不太好。

该算法非常基本,我预计很快就会被一群愤怒的制图师和数学家私刑处死(这是我应得的),但对于允许将地球视为局部平坦的小区域,它可能会起作用。

于 2012-07-07T00:57:17.287 回答