我在谷歌地圖(v3)標記中顯示拍攝照片的位置和拍攝對象的位置,並追蹤顯示照片拍攝方向的線條。我也計算了相機位置的距離和角度。谷歌地圖v3 - 繪製多邊形以顯示拍照角度
我現在正在嘗試的是用相機打開一個三角形來展示視角,讓我們說出朝向主體30度。在我看來,這是一個三年級的數學,但25年後無法弄清楚,我知道如何繪製多邊形/三角形,但不知道如何在兩個方向上計算主體距離約30度的點,當然,介意方位角。
幾乎沒有...
使用的公式紅色如下回答創建一個函數(找到我需要轉換:LAT1,lon1和軸承爲弧度數學之前
我每次打電話這個功能時間標記的變化來計算再次POS1和POS2三角形的,改變路徑重新繪製。
事情現在是三角形顯示出來,但面臨着所有類型的方向,但在合適的值。
現在的問題是:
谷歌返回負向西方和負向東(-180/180)的標題,似乎該公式需要方位(標題)在360度?此時功能CameraView(75)正確顯示,但我將角度傳遞爲75度而不是15度(向左看15度,向右15度)。
function getVertex(brng) {
var R = 6366.707;
var d = parseFloat(getObj('GPSDestDistance').value) * 1.5 //distance on form field
//position of Camera
var lat1 = deg2rad(markerCam.getPosition().lat())
var lon1 = deg2rad(markerCam.getPosition().lng())
var lat2 = Math.asin(Math.sin(lat1) * Math.cos(d/R) + Math.cos(lat1) * Math.sin(d/R) * Math.cos(brng));
var lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(d/R) * Math.cos(lat1), Math.cos(d/R) - Math.sin(lat1) * Math.sin(lat2));
lat2 = rad2deg(lat2)
lon2 = rad2deg(lon2)
var pos = new google.maps.LatLng(lat2, lon2)
return pos;
}
function CameraView(angle) {
var brng = deg2rad(parseFloat(getObj('GPSDestBearing').value)); //get heading from form
if(brng<0){
//brng = Math.round(-brng/360 + 180)
}
var pos1 = markerCam.getPosition();
var pos2 = getVertex(brng - angle);
var pos3 = getVertex(brng + angle);
var paths = [ pos1, pos2, pos3 ];
poly.setPath(paths);
}
function deg2rad(x) { return x * (Math.PI/180); }
function rad2deg(x) { return x * (180/Math.PI); }
謝謝紅,它的工作原理。我花了一段時間才意識到座標lat1,lon1應該在之前轉換爲弧度,結果顯然是弧度,並且必須轉換爲十進制。然而我錯過了公式中沒有看到的範圍(r)的東西(如果真的可以給出點2和3的長度以達到主題範圍,那麼老實說並不是真正的想法),現在我正在使用d * 1.5使三角形顯示超出主題點。 – user2033838 2013-03-27 10:41:55
哎呀,忘了指定弧度。也搞砸了我的符號。我已經修復它。公式中的範圍是d,而不是r。如果您試圖將三角形從當前可見的地圖的邊緣移開,則必須查看當前地圖的位置和大小才能計算出它,並且在極點附近或放大時進行大量檢查出。 – RedPeasant 2013-03-27 17:39:43
沒問題紅色,這是一個大推動。很高興知道(r)不是這樣的事情。我編輯了我的問題,以瞭解爲什麼三角形顯示方向相反或錯誤,最終以某種方式糾正了它,因爲我使用的是Google地圖提供的標題,當從Camera到Object的方向爲-180/180時,所以我將其轉換爲它的弧度,然後必須提供-75/+ 75度而不是-15/+ 15的方位,以使得triagle顯示在正確的方向上(我想我應該先做一些事情,例如減去將標題轉換爲360度角或所以,這是正確的嗎?) – user2033838 2013-03-27 18:28:53