前台js

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=密钥"></script>

<!--加载检索信息窗口--> 

<script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.js" ></script>

<link href="http://api.map.baidu.com/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.css" rel="stylesheet">


var map = new BMap.Map("allmap");

var point = new BMap.Point(116.52785,39.920778);

map.addOverlay(new BMap.Marker(point));

map.centerAndZoom(point,15);

map.enableScrollWheelZoom(); // 启用滚轮放大缩小 

var geolocation = new BMap.Geolocation();

geolocation.getCurrentPosition(function(r){

if(this.getStatus() == BMAP_STATUS_SUCCESS){

                var mk = new BMap.Marker(r.point);

  map.addOverlay(mk);

  map.panTo(r.point);

  getShop(r.point.lng,r.point.lat);

  }else {

alert('failed'+this.getStatus());

  }        

})

function getShop(a,b){

$.ajax({

url:"getnearshop",

type:"get",

data:{lng:a,lat:b},

dataType:"json",

success:function(data){

for(var i=0;i<data.length;i++){

(function(i){ //防止循环只显示最后一个结果

var rec = data[i];

var poi = new BMap.Point(rec.position_x,rec.position_y);

var content = '<div style="margin:0;line-height:20px;">' +

'地址:'+rec.address+'<br/>电话:'+rec.mobile+'<br/>简介:' +rec.introduction+

 '</div>';

//创建检索信息窗口对象

var searchInfoWindow = new BMapLib.SearchInfoWindow(map, content, {

title  : rec.shop_name,      //标题

width  : 290,             //宽度

height : 105,              //高度

panel  : "panel",         //检索结果面板

enableAutoPan : true,     //自动平移

searchTypes   :[

BMAPLIB_TAB_SEARCH,   //周边检索

BMAPLIB_TAB_TO_HERE,  //到这里去

BMAPLIB_TAB_FROM_HERE //从这里出发

]

});

var marker = new BMap.Marker(poi); //创建marker对象

marker.enableDragging(); //marker可拖拽

marker.addEventListener("click", function(e){

searchInfoWindow.open(marker);

})

map.addOverlay(marker); //在地图中添加marker

//searchInfoWindow.open(marker); //在marker上打开检索信息串口,如果搜索结果多于一个,不要找开,否则可能会出现结果显示会出错

})(i)

}

}

});

}


服务端计算附近500米内商家:

/**

 * 地图:搜索附近500内商铺

 */

public function actionGetNearShop(){

$half = 6371;//地球半径,平均半径为6371km

$distance = 0.5;//500米

$lat = $_GET['lat'];//y轴

$lng = $_GET['lng'];//x轴

$dlng =  2 * asin(sin($distance / (2 * $half)) / cos(deg2rad($lat)));

$dlng = rad2deg($dlng);

 

$dlat = $distance/$half;

$dlat = rad2deg($dlat);

$fourpoint = array(

'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),

'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),

'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),

'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)

);

//从数据库中查询此范围内商铺

$map['_string'] = "y<>0 and y>".$fourpoint['right-bottom']['lat']." and y<".$fourpoint['left-top']['lat']." and x>".$fourpoint['left-top']['lng']." and x<".$fourpoint['right-bottom']['lng'];

$result = M("shop")->where($map)->select();//echo M("shop")->getLastSql();

    print_r($result);

}