将笛卡尔(X,Y)转换为坐标GPS(经度和纬度)

问题描述 投票:0回答:1

我需要将坐标X,Y转换为纬度和经度。我已经阅读了维基百科地图投影,类似的stackoverflow论坛,应用了我的自定义解决方案,但仍然无法正常工作。

我从公式中获得的坐标是错误的,经度是可以接受的,但纬度是不可接受的。我看不到我的计算错误的地方。

[X,Y点是从JLayeredPane以背景Map图像的大小获取的,一旦在此Map图像上释放了较小的图像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个回答
0
投票

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

Long = (p.getX() - MapWidth/2)*LongitudeRange/MapWidth  +MG.getLongi(); 
Lat = (p.getY() - MapHeight/2)*LatitudeRange/MapHeight + MG.getLati());
© www.soinside.com 2019 - 2024. All rights reserved.