我需要将坐标X,Y转换为纬度和经度。我已经阅读了维基百科地图投影,类似的stackoverflow论坛,应用了我的自定义解决方案,但仍然无法正常工作。
我从公式中获得的坐标是错误的,经度是可以接受的,但纬度是不可接受的。我看不到我的计算错误的地方。
[X,Y点是从JLayeredPane以背景Map图像的大小获取的,一旦在此Map图像上释放了较小的图像the point is taken。
public void mouseReleased(MouseEvent e) {
DM.setUpCoordinates(layeredPane.getComponent(index-1).getLocation());
}
此后,我试图正确计算纬度和经度投影。我拥有的数据是:
到目前为止我尝试过的内容:
正在尝试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)转换为(纬度,经度)?
谢谢,
您需要按中心位置移动像素坐标,还需要使用地图比例尺-经度和纬度范围(我假设伸长率Math.cos(MG.getLati())
系数是在经度比例中计算的)
Long = (p.getX() - MapWidth/2)*LongitudeRange/MapWidth +MG.getLongi();
Lat = (p.getY() - MapHeight/2)*LatitudeRange/MapHeight + MG.getLati());