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 ;
}
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。