17 Oct 2016

百度地图开发小结-移动端

开发之前我们需要引用百度地图的js

<script type="text/javascript" src="//api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils.js"></script>
<script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=indoIhs26rpCLkg5A5ojdtsG&s=1"></script>

第一个是解析用的,如果用不到可以不解析,第二个是百度地图的。

首先,创建一个地图的实例

  var position_point = new BMap.Point(121.481139,31.235301);
  // 创建Map实例,设置地图允许的最小/大级别  缩放级别:V2.0之前支持(3-18),V2.0之后多一级(3-19)
  var map = new BMap.Map("map",{minZoom:5,maxZoom:19}); 
  map.centerAndZoom(position_point,17);

当然,我们还可以为它添加一些控制器,比如

  map.addControl(new BMap.NavigationControl());//放大缩小指示器
  map.addControl(new BMap.ScaleControl());//放大尺寸显示
  map.addControl(new BMap.OverviewMapControl());//显示缩略图指示
  map.addControl(new BMap.MapTypeControl());//地图类型装换 地图/卫星/三维

还有一些方法

map.enableScrollWheelZoom();//允许滚轮放大缩小
map.panTo(new BMap.Point(113.262232,23.154345));   //移动地图  移动到广州
map.setZoom(14);//设置缩放寄别 放大到14级

地图定位:

		var geolocation = new BMap.Geolocation();
        geolocation.getCurrentPosition(function(r){
            if(this.getStatus() == BMAP_STATUS_SUCCESS){
                var mk = new BMap.Marker(r.point);
                if(typeof(mk) != "undefined"){
                    var position_point = new BMap.Point(r.point.lng, r.point.lat);
                    map.centerAndZoom(position_point,17);
                    getAroundPosition(r.point);
                    //var myIcon = new BMap.Icon("http://127.0.0.1/positionIcon.png", new BMap.Size(20,30));
                    //var marker = new BMap.Marker(position_point,{icon:myIcon}); // 创建标注
                    //map.addOverlay(marker);// 将标注添加到地图中
                    //marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
                    //marker.enableDragging();//设置标注可拖拽
                }
            }
        });

信息检索:

var ac = new BMap.Autocomplete(    //建立一个自动完成的对象
	{"input" : "suggestId"
	,"location" : map
});

选中一条信息

		var myValue;
        ac.addEventListener("onconfirm", function(e) {    //鼠标点击下拉列表后的事件
            var _value = e.item.value;
            myValue = _value.city +  _value.district +  _value.street +  _value.business;
            searchInfo("confirm");//根据结果获取周围信息的自定义方法
        });
        function searchInfo(action){
            function myFun(){
                var localResult = local.getResults();
                //console.log(localResult);
                var pp = localResult.getPoi(0).point;    //获取第一个智能搜索的结果
                if(action == "confirm") {//关闭地图窗口
                    $($page).find("input[name='address-s']").val(localResult.keyword);
                    $($page).find("input[name='addressInfo-address']").val(myValue);
                    $($page).find("input[name='addressInfo-lat']").val(pp.lat);
                    $($page).find("input[name='addressInfo-lng']").val(pp.lng);
                    $.closeModal(".popup-map");
                }
                map.centerAndZoom(pp, 18);
                getAroundPosition(pp);//检索信息
            }
            var local = new BMap.LocalSearch(map, { //智能搜索
                onSearchComplete: myFun
            });
            local.search(myValue);	
        }
        function getAroundPosition(point){
            var point_string = point.lat + "," + point.lng;
            geoc.getLocation(point, function(rs){
                var addComp = rs.addressComponents;
                $("input[name='addressInfo-cityName']").val(addComp.city);
                $("input[name='addressInfo-districtName']").val(addComp.district);
            });
            $.ajax({
                type:'POST',
                url:'action/api.php',
                data:{
                    'action':'getBmapPositionInfo',
                    'query':'写字楼$小区$学校',
                    'location':point_string,
                    'radius':'2000'
                },
                dataType:'json',
                success:function(data){
                    if(data.status == 0 && data.results){
                        var results = data.results;
                        var resultsLength = results.length;
                        if(resultsLength>0){//处理返回的结果
                            var html = '';
                            for(var i = 0; i<resultsLength;i++){
                                var res = results[i];
                                html += '<li class="address-map-relatePosition-item">';
                                html += '<i></i>';
                                html += '<span>'+res['name']+'</span>';
                                html += '<input type="hidden" name="address-map-item-name" value="'+res['name']+'">';
                                html += '<input type="hidden" name="address-map-item-address" value="'+res['address']+'">';
                                html += '<input type="hidden" name="address-map-item-lat" value="'+res['location']['lat']+'">';
                                html += '<input type="hidden" name="address-map-item-lng" value="'+res['location']['lng']+'">';
                                html += '</li>';
                            }
                            $(".address-map-relatePosition-list").html(html);
                        }
                    }else{
                        $(".address-map-relatePosition-list").html("");
                    }
                }
            });
        }

php调用百度接口的代码:

    //百度地图获取位置信息
	public function getBmapPositionInfo(){
		$query = $_POST['query'];//查询条件
		$location  = $_POST['location'];//以某个点开始
		$radius  = $_POST['radius'];//检索范围
		$output  = 'json';//返回数据格式
		$scope = 2;
		$filter = "sort_name:distance|sort_rule:1";//条件筛选,此处是按距离排序,从近到远
		$page_size = 20;//返回的数据条数
		$ak  = 'K79XEmKkbtOGh3f5HE2HZtwF';
		$url ='http://api.map.baidu.com/place/v2/search?query='.$query.'&location='.$location.'&radius='.$radius.'&scope='.$scope.'&filter='.$filter.'&page_size='.$page_size.'&output='.$output.'&ak='.$ak;
		$ch = curl_init($url) ;
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
		curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
		$output = curl_exec($ch) ;
		return $output;
	}

重新定位:

		//拖动结束事件
        map.addEventListener("dragend",function(){
            locate();
        });
        //缩放结束事件
        map.addEventListener("zoomend", function () {
            locate();
        });
        //定位中心点
        function locate(){
            var centerPoint=map.getCenter();
            getAroundPosition(centerPoint);
        }

Tags:
Stats:
0 comments


Share: