【问题标题】:Convert Cartesian (X,Y) to coordinates GPS (Latitude & Longitude)将笛卡尔 (X,Y) 转换为坐标 GPS(纬度和经度)
【发布时间】:2020-07-04 17:44:54
【问题描述】:

我需要将坐标 X、Y 转换为纬度和经度。我已经阅读了 wikipedia map projections、类似的 stackoverflow 论坛,应用了我的自定义解决方案,但仍然无法正常工作。

我从公式中得到的坐标是错误的,经度是可以接受的,但纬度不是。我看不出我的计算有什么问题。

X,Y 点取自具有背景地图图像大小的 JLayeredPane,一旦在此地图图像上发布较小的图像,the point is taken

public void mouseReleased(MouseEvent e) {               
    DM.setUpCoordinates(layeredPane.getComponent(index-1).getLocation());       
}

在此之后,我正在尝试正确计算纬度和经度投影。我拥有的数据是:

  1. 地图中的 X,Y 坐标
  2. 地图的总宽度和高度
  3. 地图居中的纬度和经度

到目前为止我所尝试的:

尝试Equirectangular projection

public void setUpCoordinates(Point p) {     
    //Equirectangular projection: optimal for small streets 
    Long = ((p.getX())/(6371000*Math.cos(MG.getLati())))+MG.getLongi(); 
    Lat = (((p.getY())/6371000)+MG.getLati());
}

我还尝试从this link 实现墨卡托投影,但几乎没有成功。

我知道我没有在我的公式中使用地图的总宽度和高度,这可能是错误,但我不知道如何使用它!

任何帮助如何从(x,y)转换为(纬度,经度)?

谢谢,

【问题讨论】:

  • 除了“它不起作用”之外,您没有提到您的方法有什么问题。

标签: java math maps projection


【解决方案1】:

您需要按中心位置移动像素坐标,还需要使用地图比例 - 经度和纬度范围(我假设伸长 Math.cos(MG.getLati()) 系数以经度比例计)

Long = (p.getX() - MapWidth/2)*LongitudeRange/MapWidth  +MG.getLongi(); 
Lat = (p.getY() - MapHeight/2)*LatitudeRange/MapHeight + MG.getLati());

【讨论】:

  • 首先感谢您的回答。我的 Lat 从 -90 到 90,我的 Long 从 -180 到 180,但是这个公式不起作用,让我们看一个例子: clickedXY: (409,330) Map:(1280,700) central coords: lat:41.469999999999985 long:2.0699999999999985 ,解决方案:lat:41.470 long:2.051----------------------------Long = (p.getX()-MapWidth/2)*LongitudeRange/MapWidth+MG.getLongi(); ------------ --------------- 长 = (409-(1280/2))*(360/1280)+2.0699999999999985 = -62.89 =! 2.051----------- Lat = (p.getY()-MapHeight/2)*LatitudeRange/MapHeight+MG.getLati()); 纬度 = 36.327 != 41.470
  • Emm...你刚才在屏幕上看到了整个地球表面??我认为您必须对地图可见部分的度数宽度使用实际值,而不是全部 360 范围。
  • 嗨,我纠正了我的错误,它起作用了,我使用了错误的经纬度,正如你所说,非常感谢你,我支持你,但我没有声誉,所以它不可见
  • @Ravi Kumar Ravanam 我不明白 X 和 Y 是什么意思
  • 您的问题应该包含所有需要的信息。目前还不清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
相关资源
最近更新 更多