2014-11-20 489 views
0

我看過很多類似SO的帖子,但目前爲止還沒有人幫助過我。我正在用Javascript做這個。我需要使用LeapMotion軟件以矢量(X,Y,Z)的形式將屏幕上的位置轉換爲一個位置,並將其轉換爲一個以座標(緯度,經度)。我正在嘗試計算閏年動作手勢(將其視爲屏幕上的光標)與標記顯示在Google Maps API上的距離。目前我的公式是:如何將矢量(X,Y)位置轉換爲緯度/經度座標? Javascript

function convertToLatLng(x, y){ 
    // retrieve the lat lng for the far extremities of the (visible) map 
    var latLngBounds = map.getBounds(); 
    var neBound = latLngBounds.getNorthEast(); 
    var swBound = latLngBounds.getSouthWest(); 

    // convert the bounds in pixels 
    var neBoundInPx = map.getProjection().fromLatLngToPoint(neBound); 
    var swBoundInPx = map.getProjection().fromLatLngToPoint(swBound); 

    // compute the percent of x and y coordinates related to the div containing the map; in my case the screen 
    var procX = x/window.innerWidth; 
    var procY = y/window.innerHeight; 

    // compute new coordinates in pixels for lat and lng; 
    // for lng : subtract from the right edge of the container the left edge, 
    // multiply it by the percentage where the x coordinate was on the screen 
    // related to the container in which the map is placed and add back the left boundary 
    // you should now have the Lng coordinate in pixels 
    // do the same for lat 
    var newLngInPx = (neBoundInPx.x - swBoundInPx.x) * procX + swBoundInPx.x; 
    var newLatInPx = (swBoundInPx.y - neBoundInPx.y) * procY + neBoundInPx.y; 

    // convert from google point in lat lng and have fun :) 
    var newLatLng = map.getProjection().fromPointToLatLng(new google.maps.Point(newLngInPx, newLatInPx)); 

    return newLatLng; 
} 

我發現從另一個SO帖子,但我得到的距離總是錯誤的。例如,如果我在地圖上有兩個標記,無論我在哪裏放置閏秒運動光標,我的函數都會告訴我最接近的是標記B.

任何幫助將矢量(X,Y )和拉特/長將不勝感激,謝謝!

+0

你是如何得到距離?我們如何重現這個問題?請提供[最小,完整,測試和可讀的示例](http://stackoverflow.com/help/mcve)。 – geocodezip 2014-11-20 21:32:12

+0

我試圖提供較少的信息,以防人們不熟悉Leap Motion。我還在很多地方打印了控制檯消息,這些消息使我相信我所得到的所有信息都是準確的,除非進行計算(即轉換數據)時,某些事情是不準確的。但是如果你熟悉Leap Motion,那麼我得到的距離是keyTapGesture.position [0](對於X,對於Y是[1])。然後,我試圖將這些距離轉換爲經度和緯度。 – user3727351 2014-11-21 18:20:29

回答

1

因此,它似乎是你想隔離,調試,並確保工作的第一步是這樣的:確保你對快速移動位置座標轉換爲屏幕像素座標的方式感到滿意。

這在2d中可能有點棘手,因爲通常我們會丟棄z維,然後引入線性比例因子將mm轉換爲px。

你試過這個例子嗎? https://developer.leapmotion.com/libraries/screenposition-plugin

的源代碼:https://github.com/leapmotion/leapjs-plugins/tree/master/main/screen-position

有了這一點,你可以插入你的像素座標需要(通常鼠標)屏幕位置的任何API。

+0

我看了一下這個例子,我對它們是如何從跳躍位置座標到屏幕像素座標有點困惑。我想我會看到它使用的基準比例爲6,基準偏移爲-100。這些數字來自哪裏?對不起,我還是這個新手。感謝您的幫助,雖然 – user3727351 2014-11-21 18:57:47

+0

這些數字是隨意的 - 對於Leap來說,使用您的應用感覺很好。 – 2014-11-21 22:24:09

+0

例如,x座標的公式是:(window.innerWidth/2)+(hand.palmPosition [0] * scale)'。這將使飛躍的中間與窗口中間對齊 – 2014-11-21 22:25:52

相關問題