我擁有紐約市紐約市的緯度/經度值; 40.7560540,-73.9869510和地球的平面圖像,1000px×446px。將經緯度轉換爲X/Y座標
我希望能夠使用JavaScript將Lat/Long轉換爲X,Y座標,其中點將反映位置。
因此,X,Y座標形成圖像的左上角將是; 289,111
注意事項:
- 不用擔心的使用何種投影,使自己的 假設或者你知道去的問題 可能工作
- X,Y可以要形成圖像的任何一個角落
- 積分爲 在PHP中相同的解決方案(但我 真的需要JS)
我擁有紐約市紐約市的緯度/經度值; 40.7560540,-73.9869510和地球的平面圖像,1000px×446px。將經緯度轉換爲X/Y座標
我希望能夠使用JavaScript將Lat/Long轉換爲X,Y座標,其中點將反映位置。
因此,X,Y座標形成圖像的左上角將是; 289,111
注意事項:
在JS的基本轉換功能將是:
MAP_WIDTH = 1000;
MAP_HEIGHT = 446;
function convert(lat, lon){
var y = ((-1 * lat) + 90) * (MAP_HEIGHT/180);
var x = (lon + 180) * (MAP_WIDTH/360);
return {x:x,y:y};
}
這將返回的像素的數量從左上方。 此函數假設如下:
謝謝,如何扭轉這種情況?那麼從X和Y到lat/long以及指定的邊界框座標? – user3408380 2015-03-21 20:20:07
如果你有整個地球的照片,投影總是很重要。但也許我只是不明白你的問題。
你是對的,但在這種情況下,我會很樂意使用適當的圖像來匹配特定投影的工作解決方案。 – donohoe 2009-06-21 00:47:40
您使用的投影會改變一切,但是這將工作假設墨卡託投影:
<html>
<head>
<script language="Javascript">
var dot_size = 3;
var longitude_shift = 55; // number of pixels your map's prime meridian is off-center.
var x_pos = 54;
var y_pos = 19;
var map_width = 430;
var map_height = 332;
var half_dot = Math.floor(dot_size/2);
function draw_point(x, y) {
dot = '<div style="position:absolute;width:' + dot_size + 'px;height:' + dot_size + 'px;top:' + y + 'px;left:' + x + 'px;background:#00ff00"></div>';
document.body.innerHTML += dot;
}
function plot_point(lat, lng) {
// Mercator projection
// longitude: just scale and shift
x = (map_width * (180 + lng)/360) % map_width + longitude_shift;
// latitude: using the Mercator projection
lat = lat * Math.PI/180; // convert from degrees to radians
y = Math.log(Math.tan((lat/2) + (Math.PI/4))); // do the Mercator projection (w/ equator of 2pi units)
y = (map_height/2) - (map_width * y/(2 * Math.PI)) + y_pos; // fit it to our map
x -= x_pos;
y -= y_pos;
draw_point(x - half_dot, y - half_dot);
}
</script>
</head>
<body onload="plot_point(40.756, -73.986)">
<!-- image found at http://www.math.ubc.ca/~israel/m103/mercator.png -->
<img src="mercator.png" style="position:absolute;top:0px;left:0px">
</body>
</html>
這也適用於我,是一個很好的答案。我確實在這一行上將'lng'更改爲'parseInt(lng,10)': x =(map_width *(180 + lng)/ 360 + longitude_shift)%map_width; 這將工作時,我手動調用函數,把數組的傳遞值返回NaN的x 謝謝! – donohoe 2009-06-21 02:32:29
我認爲 x =(map_width *(180 + lng)/ 360 + longitude_shift)%map_width; 應該是 x =((map_width *(180 + lng)/ 360)%map_width)+ longitude_shift; 否則日本和澳大利亞東海岸(包括我在內)會被「包裹」到太平洋中。 :P – 2009-10-15 11:20:26
有一個好的Javascript庫,PROJ4JS,它允許你在不同的投影之間進行轉換。
我寫了一個適用於墨卡托地圖的函數。特別是如果你的圖像沒有覆蓋整個世界,意味着它也可以用於裁剪地圖:https://stackoverflow.com/a/10401734/730823
「不要擔心......使用什麼投影」我們怎麼知道XY共同映射將會?我可以剛剛說X是Lat,Y是Long,並且可能會滿足你,因爲結果顯然不需要任何意義或與真實世界投影相關。 – 1owk3y 2017-08-30 04:31:18