【发布时间】:2016-12-09 11:37:31
【问题描述】:
我有一张以色列地图。
我需要创建一个获取两个双参数(经度和纬度)的函数,并且该函数应在地图图像的该区域上绘制一个小圆圈。
我有以下关于地图的信息:
- 地图的宽度(以像素为单位)
- 地图的高度(以像素为单位)
- 地图上的纬度/经度位置至少有一个坐标
- 每个度数之间的像素距离
我需要根据该图像将我得到的坐标转换为像素 X、Y。
有以下地图图片:
例如(不是一个准确的例子,只是一个例子,所以你明白我的意思),左上角坐标是33.5,34,它的X,Y是0, 0 在地图上。
如何将这些坐标转换为 X、Y 坐标?
我尝试了this answer,但它并没有真正起作用,它显示在31.5, 34.5 而不是33, 34。
更新:这是另一个问题的虚拟快速代码示例;
public class MapRenderer extends JFrame {
public static void main(String... args) throws IOException {
new MapRenderer();
}
public MapRenderer() throws IOException {
setSize(new Dimension(614, 1141));
add(new TestPane());
setVisible(true);
}
}
class TestPane extends JPanel {
private BufferedImage image;
public TestPane() throws IOException {
File file = new File("israel_map.jpg");
BufferedImage image = ImageIO.read(file);
this.image = image;
}
@Override
public void paintComponent(Graphics g) {
double lon = 34;
double lat = 33;
int mapW = 614;
int mapH = 1141;
double x = (lon + 180) * (mapW / 360);
double latRad = lat * Math.PI / 180;
double mercN = Math.log( Math.tan( (Math.PI / 4) + (latRad / 2)) );
double y = (mapH / 2) - (mapW * mercN / (2 * Math.PI));
System.out.println("[lon: " + lon + " lat: " + lat + "]: X: " + x + " Y: " + y);
g.drawImage(image, 0, 0, null);
g.setColor(Color.RED);
g.drawOval((int) x, (int) y, 5, 5);
}
}
输出:
[lon: 34.0 lat: 33.0]: X: 214.0 Y: 510.3190109117399
截图:
【问题讨论】:
-
它是平面地图吗?所有经纬线都是平行的(忽略地球曲率)?
-
@Drgabble 是的,它完全平坦
-
你能发布你的代码吗?如果现有答案有效,则表明您的代码中有错字
-
谷歌:点坡形式。
标签: java math maps coordinates