我有一張以色列地圖。將經度和緯度座標轉換爲地圖像素X和Y座標的圖像Java
我需要創建一個函數來獲取兩個雙參數(經度和緯度),並且該函數應該在地圖圖像的該區域繪製一個小圓圈。
我對地圖以下信息:
- 地圖的以像素爲單位
- 地圖的以像素爲單位的高度
- 寬度在-至少一個緯度/經度位置座標上每度之間的像素地圖
- 距離
我需要我去像素X,Y BA座標轉換sed在那個圖像上。
有下列地圖圖像:
例如(沒有一個準確的例子,它僅僅是一個例子,所以你明白我的意思),左上角座標爲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
截圖:
https://gyazo.com/5a19dece37ebace496c6b8d68eb9ec3c
其平面地圖?所有的經緯線都是平行的(忽略地球曲率)? – Drgabble
@Drgabble是它的完全平坦的 – Artemkller545
你可以發佈你的代碼嗎?如果存在現有的解決方案,則表明您的代碼中存在拼寫錯誤 – Drgabble