2010-11-21 63 views

回答

1

緯度/經度是一個測地座標系(WGS84),這意味着它是繞地球的曲線座標 - 圖像平坦,這意味着通常您不能直接在兩者之間直接移動。但是,您的房子圖像可能很小,因此計算誤差會很小,可以忽略不計(取決於您的需要)。

要做你想做的事情,你需要找到一個「每像素度數」的值,這意味着你需要知道你的圖像的頂部/左側和右下角的經度/緯度。如果你知道這很簡單。 這是假設你在北半球是:

var degreesPerPixelX = bottomX - topX/imageWidth; 
var degreesPerPixelY = bottomY - topY/imageHeight; 

和事件處理程序(該 getEventOffsetFromImageXXX沒有顯示)。

function onClick (evt) { 
    var x = getEventOffsetFromImageLeft(evt); 
    var y = getEventOffsetFromImageTop(evt); 

    var clickedLon = topX + x * degreesPerPixelX; 
    var clickedLat = bottomY + y * degreesPerPixelY; 
} 

縮放級別會影響左上/右下/右/緯度,因此計算需要相應調整。

當Google Maps計算x/y到lon/lat時,它們在內部始終首先將lon/lat轉換爲座標系Spherical Mercator(EPSG:900913),然後執行該系統中的操作,然後再轉換回來。但是球形墨卡託具有固定的縮放級別,這可能不適合您。儘管如此,這是非常值得一讀的。

http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

注: degreesPerPixel在google talk中被稱爲分辨率爲,單位爲米/像素儀表是球面墨卡託投影機的單位,大致可以轉換爲赤道儀表,但距離您獲得的更遠的北/南距離米遠。

+0

喜thanx的快速reply..while笏搜索我想要的我降落在這裏http://stackoverflow.com/questions/1019997/in-javascript-convert -lat-longs-to-xy座標我查看了mercator投影的例子,並用google earth對輸出進行了瀏覽,它對我來說似乎確實無疑..但是想要知道這裏使用的longitude_shift的含義 – user514955 2010-11-21 09:10:42

+0

另外,如果我想顯示經度的緯度,而懸停在每個像素位置如何在這個方向移動..我的意思是,雖然懸停我得到像素位置現在我想將其轉換爲緯度經度動態...假設我只有經緯度緯度,所以如何獲得it..t hough m不贊成在這樣一個基本階段提供縮放功能.Wat你採取在上面的鏈接中使用的公式,我已經在評論 – user514955 2010-11-21 09:14:48

+0

中提到的公式嗨,我不認爲我看到與longitude_shift的鏈接 - 它是否缺少? – 2010-11-21 14:23:23

0

人怎麼生根粉此代碼段

function longToX(longitudeDegrees) 
{ 
var longitude=longitudeDegrees-baselong; 
longitude =degreesToRadians(longitude); 
return (radius * longitude); 
} 
function latToY(latitudeDegrees) 
{ 
var latitude=latitudeDegrees-baselat; 
latitude =degreesToRadians(latitude); 
var newy = radius/2.0 * 
Math.log((1.0 + Math.sin(latitude))/
(1.0 - Math.sin(latitude))); 
return newy; 
} 
function xToLong(xx) 
{ 
var longRadians = xx/radius; 
var longDegrees = radiansToDegrees(longRadians); 
var rotations = Math.floor((longDegrees + 180)/360) 
var longitude = longDegrees - (rotations * 360) 
return longitude+baselong; 
} 
function yToLat(yo) 
{ 
var latitude = (Math.PI/2) - (2 * Math.atan(Math.exp(-1.0 * yo /this.radius))); 
return radiansToDegrees(latitude)+baselat; 
} 
相關問題