店舗の管理システムなんかを作るときに、住所から座標を求めるようにしたくなる時ってありますよね!
今回は、Maps JavaScript API+Google MapsとGeocoding APIを使って住所から座標を求める方法を紹介します。
目次
導入方法
まずはマップを表示
まずはマップを表示するdivを記述します。
<div id="map" style="height: 500px;"></div>
続いて、GoogleAPIのスクリプトとjQueryを読み込みます。
APIキーは取得したAPIキーを記述、コールバック関数はinitMapを記述してください。
※jQueryは読み込まなくても動作しますが、今回は読み込みます。
<!-- <script src="https://maps.googleapis.com/maps/api/js?key=APIキー&callback=コールバック関数" async defer></script> --> <script src="https://maps.googleapis.com/maps/api/js?key=APIキー&callback=initMap" async defer></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
マップを表示するスクリプトを記述します。
ついでにマップの中央にマーカーを表示させます。
//マップオブジェクト
var gMap = null;
//マーカーオブジェクト
var gMarkerCenter = null;
function initMap() {
//とりあえず、東京都庁を中心にする
var lat = 35.6896342;
var lng = 139.6921006999999;
//座標を設定
var myLatLng = new google.maps.LatLng(lat, lng)
var mapOptions = {
center: myLatLng,
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// マップオブジェクトの生成、マーカー生成
gMap = new google.maps.Map(document.getElementById("map"), mapOptions);
gMarkerCenter = drawMarkerCenterInit(myLatLng);
}
//マーカー生成関数
function drawMarkerCenterInit(pos) {
var markerCenter = new google.maps.Marker({
position: pos,
map: gMap,
draggable: true // ドラッグ可能にする
});
return markerCenter;
}
住所から座標を取得する
まずはHTMLを修正します。
緯度経度のテキストボックス、住所のテキストボックス、検索ボタンを追加します。
<div id="map" style="height: 500px;"></div>
<div>
緯度:<input type="text" value="35.6896342" name="lat" readonly> 経度:<input type="text" value="139.69210069999997" name="lng" readonly><br>
住所:<input type="text" name="address" size="100"> <input type="button" id="searchAddressBtn" value="検索">
</div>
続いて、javascriptを修正します。
検索ボタンをクリックしたときに、住所を元に座標を求めるように修正します。
//マップオブジェクト
var gMap = null;
//マーカーオブジェクト
var gMarkerCenter = null;
function initMap() {
//座標をテキストボックスから取得
var lat = $('[name=lat]').val();
var lng = $('[name=lng]').val();
//座標を設定
var myLatLng = new google.maps.LatLng(lat, lng)
var mapOptions = {
center: myLatLng,
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// マップオブジェクトの生成、マーカー生成
gMap = new google.maps.Map(document.getElementById("map"), mapOptions);
gMarkerCenter = drawMarkerCenterInit(myLatLng);
}
//マーカー生成関数
function drawMarkerCenterInit(pos) {
var markerCenter = new google.maps.Marker({
position: pos,
map: gMap,
draggable: true // ドラッグ可能にする
});
return markerCenter;
}
//検索ボタンをクリックしたとき
$('#searchAddressBtn').click(function () {
//Geocoderオブジェクト生成
var geocoder = new google.maps.Geocoder();
//住所のテキストボックスから住所取得
var address = $('[name=address]').val();
//住所検索実行
geocoder.geocode(
{
'address': address,
'region': 'jp'//地域を日本に設定
},
function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
//住所のデータを取得できたとき
//取得した座標をマップに反映
gMap.setCenter(results[0].geometry.location);
//取得した座標をマーカーに反映
var pos = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
gMarkerCenter.setPosition(pos);
//取得した座標をテキストボックスにセット
$('[name=lat]').val(pos.lat());
$('[name=lng]').val(pos.lng());
} else {
//失敗したとき
alert('住所検索に失敗しました。<br>住所が正しいか確認してください');
}
}
);
});
注意点
Google Maps Geocoding APIを利用するときは、GoogleMapを表示しなければいけません。
「Google Maps Geocoding APIだけ使って、座標だけ取得しよ!」
なんてことやると、バレたら怒られます。
必ずGoogleMapを表示しましょう!
くわしくはこちらを参考にしてください。
https://developers.google.com/maps/documentation/geocoding/policies

コメント