前台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);
}
转载于:https://blog.51cto.com/340411305/1722085