写真が撮られた位置と被写体の位置をグーグルマップ(v3)マーカーで表示し、写真が撮られた方向を示すために線をトレースしています。カメラ位置からの距離と角度も計算しました。
私が今試しているのは、被写体に向かって30度とすると、三角形が開いた状態でカメラからのビューを表示することです。私には3年生の数学のようですが、25年経ってもわかりません。多角形/三角形の描き方は知っていますが、被写体の両方向の距離が約30度の点を計算する方法はわかりません。もちろん取り入れています。方位角に注意してください。
もうすぐです...
以下で答えた式Redを使用して、関数を作成しました(lat1、lon1、およびベアリングを数学の前にラジアンに変換する必要がありました。
マーカーが変更されるたびにこの関数を呼び出して、三角形のpos1とpos2を再度計算し、パスを変更します再描画します。
今のところ、三角形が表示されますが、適切な方向を除いてすべての種類の方向を向いています。
今の質問は:
Googleは、方位を西に負、東に正(-180/180)で返します。数式には、360度の方位(方位)が必要なようです。現在、CameraView(75)関数は正しく表示されますが、角度を15度ではなく75度として渡します(左に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); }