【问题标题】:how to convert latitude and longitude to pixels如何将纬度和经度转换为像素
【发布时间】:2017-06-07 23:22:44
【问题描述】:

我有两组 Lat 和 Long 值对应于矩形的两个角(左上角和右下角)。我想在矩形中加载图像,当用户单击矩形/图像上的位置时,它应该返回纬度和经度(从检测到的像素的坐标)。考虑到上述输入点,将像素转换为纬度和经度的计算应该是什么。

【问题讨论】:

  • 这是你想要的吗? stackoverflow.com/a/4249711/8085668
  • 我假设您能够从鼠标单击事件中获取像素坐标。然后您可以以相当线性的方式处理地理坐标:以像素为单位的总宽度表示左右经度之间的差异:lon_pixel = lon_left + click.x / width * (lon_right - lon_left)
  • Lat/Long 不是线性 2D 网格...如果您的图像覆盖任何“实质性”区域,那么您将需要考虑行星的曲率,以及图像/地图的投影
  • 我的地图对应一个500m×500m的小区域,所以我猜这种情况下曲率可以忽略
  • @Sourav 重要的不是网格的大小,而是位置。如果该位置靠近北极或南极,则简单的线性变换不起作用 - 除非在 bizarro world 上;-)。

标签: c qt math


【解决方案1】:

您应该知道创建该地图所使用的大地投影以及直角坐标与地理坐标的对应关系。

对于小地图块,您可以使用线性近似,因此可以使用线性插值计算坐标。

x 坐标和经度示例:

Lon = LonLeft + X * (LonRight - LonLeft) / Width 

【讨论】:

  • void pixel_to_coordinates(int _xlength, int _ylength, double& _latt, double& _longg) { _longg = longg_top_left + (double)_ylength * (longg_bottom_right - longg_top_left)/ (601); _latt = latt_top_left + (double)_xlength * (latt_bottom_right - latt_top_left )/ (341); }
  • 我试过这个代码,这与实际位置相差太大。我做错了什么吗?
  • 什么是_ylength和_xlength?如果它们是点击坐标 - 交换它们(x 表示经度)
【解决方案2】:

假设线性插值足以满足您的目的,您可以使用以下公式:

out = (in - inMin) * (outMax - outMin) / (inMax - inMin) + outMin

其中in* 是图像坐标,out* 是地图坐标。

你必须使用两次公式;水平坐标一次,垂直坐标一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2011-03-28
    • 2012-06-16
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多