網頁

2013年10月8日 星期二

Google Geocoding API


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-tw
Return 回來的格式可選 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 ;
}

Google maps API getting drive time and road







沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。