次は、Google Maps APIを利用して、2点間の方角を取得します。
2点間の方角の取得には、
google.maps.geometry.spherical.computeHeading(from, to)
を使用します。
fromには始点の緯度・経度情報、toには終点の緯度・経度情報を、Google MapsのlatLngオブジェクトで指定します。
【サンプル2ソース】
2点間の方角を取得
<div>
地点1:<input type="text" id="addressInput1" value="大坂城" style="width: 200px">
<br />
地点2:<input type="text" id="addressInput2" value="道頓堀戎橋" style="width: 200px">
<br />
<input type="button" value="方角取得" onclick="getHeading();">
<br /><br />
★結果★<br />
<input type="text" id="headingInfo" style="width: 250px">
</div>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?libraries=geometry&key=xxxxxxxxxx"></script>
<!--「key=xxxxxxxxxx」にはGoogleで取得したAPIキーを記述します -->
<script type="text/javascript">
var latLng = new Array(); //緯度・経度情報
var result = new Array(); //取得結果
var timerId; //タイマーID
//方角取得
function getHeading() {
latLng = new Array(2);
result = new Array(2);
document.getElementById('headingInfo').value = "";
//地点1の緯度・経度取得
getIdoKeido(1);
//地点2の緯度・経度取得
getIdoKeido(2);
//緯度・経度取得は非同期処理のため、取得結果をタイマーでチェック
timerId = setInterval(function(){
if (result[1] == false || result[2] == false) {
//緯度・経度取得失敗
clearInterval(timerId);
return;
}
if (latLng[1] != undefined && latLng[2] != undefined) {
//地点1と地点2の緯度・経度取得成功
//★2点間の方角を取得
var heading = google.maps.geometry.spherical.computeHeading(latLng[1], latLng[2]);
//北から東向きの方角は真北を0として時計回り180度まで。
//北から西向きの方角は真北を0として反時計回りマイナス180度まで。
if (heading > 0) {
//わかりやすいようにマイナス値の場合は360度プラス
heading = heading + 360;
}
//方角記号(8方向)を判定
var NESW = "";
if (heading >= 337.5 || heading > 22.5) {
NESW = "N"; //北
} else if (heading >= 22.5 && heading > 67.5) {
NESW = "NE"; //北東
} else if (heading >= 67.5 && heading > 112.5) {
NESW = "E"; //東
} else if (heading >= 112.5 && heading > 157.5) {
NESW = "SE"; //南東
} else if (heading >= 157.5 && heading > 202.5) {
NESW = "S"; //南
} else if (heading >= 202.5 && heading > 247.5) {
NESW = "SW"; //南西
} else if (heading >= 247.5 && heading > 292.5) {
NESW = "W"; //西
} else if (heading >= 292.5 && heading > 337.5) {
NESW = "NW"; //北西
}
document.getElementById('headingInfo').value = NESW + " " + parseInt(heading) + "°";
clearInterval(timerId);
}
}, 100);
}
//緯度・経度取得
function getIdoKeido(point) {
var addressInput = document.getElementById('addressInput' + point).value;
var geocoder = new google.maps.Geocoder();
geocoder.geocode(
{
address: addressInput
},
function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
//緯度・経度取得成功
//latLngオブジェクト(緯度・経度情報)を保存
latLng[point] = results[0].geometry.location;
result[point] = true;
}
else {
//緯度・経度取得失敗
alert(addressInput + ":住所が見つかりませんでした。");
result[point] = false;
}
});
}
</script>