谷歌地图获取经纬度

时间:2024-03-06 11:54:04

一,原理分析

1,录入地址,不管是美食店,还是小区都是有地址。

2,根据地址,通过google map api获取地址的坐标,存到数据库中。

3,在地图上显示时,只要根据坐标,在地图上标出来行。

4,如果要找附近的美食,房子啊,通过算存在数据库中的坐标就可以找出附近房子,美食店。

有人会问,输入地址,直接调用api查不就行了,不需要这么麻烦。这种方式开发起来很简单,但是这种方式是不精确的。如果想做精确,就要按上面的方式来做。

 

二,php读取地址代码

1,方法一,要用到google的map key

 
  1. <?php  
  2. define("MAPS_HOST", "maps.google.com");  
  3. define("KEY", "ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA");  
  4.   
  5. $address = !emptyempty($_POST[\'address\'])?$_POST[\'address\']:"上海徐汇区漕宝70号";  
  6. $base_url = "http://" . MAPS_HOST . "/maps/geo?output=json&oe=utf8&sensor=false&key=" . KEY. "&q=".urlencode($address);  
  7. $data = json_decode(file_get_contents($base_url));  
  8.   
  9. switch($data->Status->code){  
  10.     case 200:  
  11.         $coordinates = $data->Placemark[0]->Point->coordinates;  
  12.         $lat = $coordinates[1];      //北维  
  13.         $lng = $coordinates[0];      //东经  
  14.         break;  
  15.     case 620:  
  16.         echo "请求频率过快";  
  17.         break;  
  18.     case 610:  
  19.         echo "api key不正确";  
  20.         break;  
  21.     case 400:  
  22.         echo "页面编码不正确";  
  23.         break;  
  24.     default:  
  25.         echo "请求失败";  
  26. }  
  27. ?>  

2,方法二

 
  1. <?php  
  2. $address = !emptyempty($_POST[\'address\'])?$_POST[\'address\']:"上海徐汇区漕宝70号";// Google HQ  
  3. $prepAddr = str_replace(\' \',\'+\',$address);  
  4.   
  5. $geocode=file_get_contents(\'http://maps.google.com/maps/api/geocode/json?address=\'.$prepAddr.\'&sensor=false\');  
  6.   
  7. $output= json_decode($geocode);  
  8.   
  9. $lat = $output->results[0]->geometry->location->lat;  
  10. $lng = $output->results[0]->geometry->location->lng;  
  11.   
  12. ?>  

这样就可以得到坐标,只有一对。

三,google map js api根据地理坐标,显示地址

  1. <script type="text/javascript">  
  2.     $(document).ready(function () {  
  3.         initGoogleMap();  
  4.     });      
  5.   
  6. function initGoogleMap(){  
  7.     google.maps.event.addDomListener(window, \'load\', function() {  
  8.     var map = new google.maps.Map(document.getElementById(\'bannerbox\'), {  
  9.       zoom: 13,  
  10.       center: new google.maps.LatLng(<?php echo $lat;?>, <?php echo $lng;?>),  
  11.       mapTypeId: google.maps.MapTypeId.ROADMAP  
  12.     });  
  13.   
  14.     var infoWindow = new google.maps.InfoWindow;  
  15.   
  16.     var onMarkerClick = function() {  
  17.       var marker = this;  
  18.       var latLng = marker.getPosition();  
  19.       infoWindow.setContent("<h3> 输入的位置:</h3><?php echo $address;?><br><h3>坐标 是:</h3><?php echo $lat;?>, <?php echo $lng;?>");  
  20.   
  21.       infoWindow.open(map, marker);  
  22.     };  
  23.     google.maps.event.addListener(map, \'click\', function() {  
  24.       infoWindow.close();  
  25.     });  
  26.   
  27.     var marker1 = new google.maps.Marker({  
  28.       map: map,  
  29.       position: new google.maps.LatLng(<?php echo $lat;?>, <?php echo $lng;?>),  
  30.     });  
  31.   
  32.     google.maps.event.addListener(marker1, \'click\', onMarkerClick);  
  33.   });  
  34. }  
  35. </script>  

具体请参考:php读取坐标,js根据坐标,显示地址

三,从数据库中查找附近的商户,房子等。

 
  1. SELECT address, name, city, state_display, state, postal, lat, lng, phone, country, extra,  
  2. ( 6371 * acos( cos( radians( \'31.8585983\' ) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians( 121.01944720000006 ) ) + sin( radians( 31.8585983 ) ) * sin( radians( lat ) ) ) ) AS distance  
  3. FROM dealer WHERE type = 1  
  4. HAVING distance <5  

上面举个小例子,查找以 31.8585983,121.01944720000006坐标为中心,5公里范围内美食店,type=1表示美食店。数据读取出来,根据坐标,在地图 上显示就行了。6371是什么意思呢,代表千米,比率乘上去,转换成实际距离。如果要用米怎么办呢。3959替换上面的6371就行了。

注:原文链接:http://blog.51yip.com/google/1546.html