Google map API 經緯度與地址間的轉換
Google Geocoding API (地理編碼)
用於"經緯度"與"地址"間的轉換。例如輸入 25.047908,121.517315 可以得到台北車站的地址 100台灣台北市中正區北平西路3號http://maps.googleapis.com/maps/api/geocode/json?latlng=25.047908,121.517315&sensor=false&language=zh-tw反之亦可
http://maps.googleapis.com/maps/api/geocode/json?address=100台灣台北市中正區北平西路3號&sensor=false&language=zh-twReturn 回來的格式可選 json 或 xml,經過 parse 後使用者可以根據自己需要的層級去截取,例如想要拿到城市的名字可以從 administrative_area_level_2 下手。
$json ='
{
"results" : [
{
"address_components" : [
{
"long_name" : "高鐵台北站",
"short_name" : "高鐵台北站",
"types" : [ "train_station", "transit_station", "establishment" ]
}
],
"formatted_address" : "100台灣台北市中正區高鐵台北站"
}
]
,
"status" : "OK"
}';
php
$url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=25.047908,121.517315&sensor=false&language=zh-tw"; $json = file_get_contents($url); $arr_json = json_decode($json); echo $arr_json->results[1]->formatted_address;100台灣台北市中正區台北火車站
反向地理編碼 (地址查閱)
JS
var geocoder; function initialize() { geocoder = new google.maps.Geocoder(); codeLatLng() ; } function codeLatLng() { var lat = 25.047908; var lng = 121.517315; var latlng = new google.maps.LatLng(lat, lng); geocoder.geocode({'latLng': latlng}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { alert(results[1].formatted_address); // echo results[1]->address_components[3]->long_name; // "long_name" : "台北市", } }); }100台灣台北市中正區台北火車站
Draggable directions
function codeLatLng() { var latLng_to_address; var lat = 25.047908; var lng = 121.517315; var latlng = new google.maps.LatLng(lat, lng); geocoder.geocode({'latLng': latlng}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { latLng_to_address = results[1].formatted_address; calcRoute(latLng_to_address); //計算路線 } }); return retval; } function calcRoute(latLng_to_address) { var request = { origin: '台北市新光三越', // 'Sydney, NSW' destination: latLng_to_address,//'Sydney, NSW', //100台灣台北市中正區台北火車站 waypoints:[],//[{location: 'Bourke, NSW'}, {location: 'Broken Hill, NSW'}], travelMode: google.maps.DirectionsTravelMode.DRIVING }; directionsService.route(request, function(response, status) { if (status == google.maps.DirectionsStatus.OK) { directionsDisplay.setDirections(response); } }); } function computeTotalDistance(result) { var total = 0; var time= 0; var myroute = result.routes[0]; for (var i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i].distance.value; time +=myroute.legs[i].duration.text; } total = total / 1000. document.getElementById('total').innerHTML = total + ' km'; time = time.replace('hours','H'); time = time.replace('mins','M'); document.getElementById('duration').innerHTML = time ; }
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。