【问题标题】:map geo coordinates (lat, lng) to map (x, y)将地理坐标 (lat, lng) 映射到地图 (x, y)
【发布时间】:2010-09-19 01:23:23
【问题描述】:

我有一些城市的地理坐标(纬度和经度),并想获取 x,y 坐标,以便将它们绘制成地图。

地图是标准地图,就像http://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpg 一样。

我尝试了几个我发现的公式,但似乎没有一个真正有效:(。最好是简单的 javascript 代码或 ruby​​ :)

【问题讨论】:

    标签: javascript ruby geocoding proj4js


    【解决方案1】:

    有许多方法可以以不同程度的精确度来解决这个问题。但是,它们都归结为执行与您的地图对应的投影。

    如果您知道您的地图属于墨卡托投影类型,则可以简单地将纬度/经度坐标视为 X/Y,并进行适当的缩放和平移。也就是说,您会找到一个简单的 ax+b 和 cy+d 来完成这项工作。

    如果您的地图不是墨卡托投影(如果它试图使比例保持一致,可能不是,就像这个看起来那样),那么您最好的选择是假设它是“地球相切”投影。 (这适用于小型陆地。)在这种情况下,您需要先将纬度/经度投影到三维坐标系中。

    z=sin(lat)
    x=cos(lat)*sin(long)
    y=cos(lat)*cos(long)
    

    正 z 指向北极。正 y 指向 0、0,正 x 指向 lat 0 long 90(东),正 lat/long 是北和东。当然你必须先转换成弧度。

    所有这些都假设一个球形地球,这并不完全正确,但它足够接近,除非你发射远程迫击炮弹。

    无论如何,一旦有了 XYZ,就需要旋转和缩放地图。要绕 Z 轴旋转,只需在投影到三个维度之前减去基本经度。这样做可以使您的地图以零经度为中心,以实现最简单的数学运算。

    完成此操作后,您只需将地球仪向前旋转,直到原始地图面朝前。在 y-z 轴上进行 2-d 旋转来执行此操作。使用http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections 找出那部分。

    最后,您的 x,z 坐标将与地图的 x,y 坐标很好地对齐,以便如前所述进行适当的缩放/平移。

    【讨论】:

      【解决方案2】:

      除了上述答案之外,还有一个开源的 proj4js 库,它可以在各种地图投影之间进行转换。它由 OpenLayers 内部用于此类事情,并支持许多流行的投影和坐标系。

      【讨论】:

      • 进一步思考,假设您的位图是标准投影,它应该可以工作,但您必须确定自己的投影参数(子午线、缩放比例等)。这应该是可能的,但可能不适合地图投影新手。
      • 谢谢,我能够从提到的库中提取所需的公式 :)
      【解决方案3】:

      也许这会有所帮助,我只使用 javascript 为美国完成了一个实现。

      演示/代码:http://the55.net/_11/sketch/us_map

      【讨论】:

        【解决方案4】:

        使用 Google Maps API,您可以在地图上叠加您的 jpg 并正确定位。

        这是一个例子 http://code.google.com/apis/maps/documentation/javascript/examples/overlay-hideshow.html

        这里是关于叠加层的 api 页面 http://code.google.com/apis/maps/documentation/javascript/overlays.html

        【讨论】:

          【解决方案5】:

          除非您的工作规模非常小(并且靠近赤道),否则您不会发现这很容易。维基百科的Geographic coordinate system 是一个好的开始...

          更简单的方法可能是使用 web mapping 之类的东西并坚持使用您的纬度和经度。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-11-12
            • 2023-04-07
            • 2014-01-16
            • 1970-01-01
            • 2017-09-06
            • 2022-01-03
            • 2016-02-01
            相关资源
            最近更新 更多