頁面嵌入百度地圖

地圖能夠先作好靜態頁面在嵌入到jsp中。javascript

在頁面上引入百度地圖js文件,通常如今的html5頁面最好用2.0版本的api,不然可能會出如今部分瀏覽器中地圖出不來的狀況,還有就是申請密鑰
html

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你須要申請的密鑰"></script>

html文件中的body中設置div,用來肯定地圖畫在哪裏html5

<span id="city" class="addrres-difang">${city }</span>
<input id="searchtext" type="text" class="wp60"  value="${street }" placeholder=""/>
<span id="searchbt" class="addrres-search" onclick="serachlocal()" style="cursor:pointer">搜索</span>
<!-- 地圖填充 -->
<div style="width:600px;height:550px;border:#ccc solid 1px;font-size:12px" id="map"></div>

再就是寫js控制百度地圖的生成,和定製了java

var key='你申請的百度地圖密鑰';
var map = new BMap.Map("map"); // 建立地圖實例(注意這個map和上面那個div中的id值是同樣的)   
var point; // 建立點座標   
//這裏的globalLng, globalLat是我從數據庫拿來的經緯度,商戶一進來若是有座標就自動定位到本身以前設置位置,
//能夠進行個判斷沒值就給個默認座標值
point = new BMap.Point(globalLng, globalLat);
map.centerAndZoom(point, 15); // 初始化地圖,設置中心點座標和地圖縮放級別
map.addControl(new BMap.NavigationControl());
map.addControl(new BMap.ScaleControl());     
map.enableScrollWheelZoom();//滾輪縮放事件  
map.enableContinuousZoom(); // 開啓連續縮放效果  
map.enableInertialDragging(); // 開啓慣性拖拽效果
//自定義圖標(覆蓋物)
var customerIcon = new BMap.Icon(baseUrl + "img/baiduMap/baiduMapCustomerInco2.png", new BMap.Size(50,80));
var preMarker = new BMap.Marker(point, {icon:customerIcon});
map.addOverlay(preMarker);
//設置標註可拖拽
preMarker.enableDragging();
//跳動的動畫
preMarker.setAnimation(BMAP_ANIMATION_BOUNCE);

//標註拖拽後的位置
preMarker.addEventListener("dragend", function (e) {
   //alert("當前位置:" + e.point.lng + ", " + e.point.lat);
   ajaxDragend(e.point.lng, e.point.lat);
});
function ajaxDragend(lng, lat) {
    var targetUrl='http://api.map.baidu.com/geocoder/v2/?ak='+key+'&location='+lat+','+lng+'&output=json&pois=0';
    jQuery.ajax({
        url:targetUrl,
        type:"get",
        async : false,
        dataType:'jsonp',
        beforeSend:function(){
          //alert(targetUrl);  
        },
        success:function(data,status){
            //alert(status);
            if(status=='success' && data.status==0){                
                content = "<div>地址:" + data.result.formatted_address + "</div>";
                /*content += '<form action="" method="post"><input type="hidden" name="lng" value="'
                    + data.result.location.lng+'"><input type="hidden" name="lat" value="'+data.result.location.lat 
                    + '"><input onclick="tempSaveLocation("' + data.result.formatted_address + '", "' + lng + '", "' + lat + '")" type="button" value="我在這裏"></form>';*/
                content += '<input type="hidden" name="lng" value="' + data.result.location.lng+'">' 
                    + '<input type="hidden" name="lat" value="'+data.result.location.lat + '">' 
                    + '<input class="iamthere" onclick="iAmThereOfDragend(this, ' + lng + ', ' + lat + ')" type="button" value="我在這裏">';
                var info=new BMap.InfoWindow(content);
                preMarker.openInfoWindow(info);
            }
        },
        error:function(XMLHttpRequest, textStatus, errorThrown){
            //alert(XMLHttpRequest.status);
            //alert(XMLHttpRequest.readyState);
            //alert(textStatus);
            //alert(errorThrown);
        }
    });
}

//搜索定位
function serachlocal(){
    var markerArray=new Array();
    var local = new BMap.LocalSearch(map, {     
    renderOptions: {     
        map: map,     
        //panel: "results",//結果容器id  
        autoViewport: true,   //自動結果標註  
        selectFirstResult: false   //不指定到第一個目標  
    },     
    pageCapacity: 8,
    //自定義marker事件
    onMarkersSet:function(pois){
        for(var i=0; i<pois.length; i++){
            (function(){
                var index = i;
                var curPoi = pois[i];
                var curMarker = pois[i].marker;
                markerArray[i] = curMarker;
                var content = "<h3>" + curPoi.title + "</h3>";
                //content += "<div>地址:" + curPoi.address + "</div>";
                content += '<form action="" method="post">' 
                    + '<input type="hidden" name="province" value="'+ curPoi.province + '">'
                    + '<input type="hidden" name="city" value="'+ curPoi.city + '">'
                    + '<input type="hidden" name="address" value="'+ curPoi.title + '">'
                    + '<input type="hidden" name="lng" value="'+ curPoi.point.lng + '">' 
                    + '<input type="hidden" name="lat" value="' + curPoi.point.lat+ '">' 
                    /*+ '<input onclick="tempSaveLocation(' + curPoi.province + curPoi.city + curPoi.address + ', ' + curPoi.point.lng + ', ' + curPoi.point.lat + ')" type="button" value="我在這裏"></form>';*/
                    + '<input onclick="iAmThereOfSearch(this, ' + curPoi.point.lng + ', ' + curPoi.point.lat + ')" type="button" value="我在這裏"></form>';
                curMarker.addEventListener('click',function(event){
                    //showAtrributes(event);
                    var info = new BMap.InfoWindow(content);
                    curMarker.openInfoWindow(info);
                    var position = curMarker.getPosition();
                    //document.getElementById("mapx").innerHTML="點擊搜索圖標經度:"+position.lng;  
                    //document.getElementById("mapy").innerHTML="點擊搜索圖標緯度:"+position.lat;  
                    //document.getElementById("level").innerHTML="縮放等級:"+this.getZoom();  
                    
                });
            })();
        }
    },
    //自定義搜索回調數據
    onSearchComplete:function(results){
        if(local.getStatus() == BMAP_STATUS_SUCCESS){
           
        }
    },
    });
    //alert(jQuery("#city").text() + document.getElementById("searchtext").value);
    local.search(jQuery("#city").text() + document.getElementById("searchtext").value);  
}

//點擊拖拽事件"我在這裏"(不能傳中文參數,很坑爹的)
function iAmThereOfDragend(obj, lng, lat) {
    /*alert("lng : " + lng);
    alert("lat : " + lat);
    alert(jQuery(".BMap_bubble_content div").text());*/
    var location = jQuery(".BMap_bubble_content div").text();
    if (location != null && location.length != 0) {
        var locaArr = location.split(":");
//        jQuery("#storeAddress").val(locaArr[1]);
        if (locaArr[1].indexOf("市") >= 0) {
            var cityArr = locaArr[1].split("市");
            jQuery("#searchtext").val(cityArr[1]);
        }
        jQuery("#lng").text(lng);
        jQuery("#lat").text(lat);
        dialog("已更換位置:" + locaArr[1] + ", 您可經過提交修改進行保存");
    }
}
//點擊搜索事件"我在這裏"(不能傳中文參數)
var addressOfSearch;
function iAmThereOfSearch(obj, lng, lat) {
    var province = jQuery(".BMap_bubble_content form input:eq(0)").val();
    var city = jQuery(".BMap_bubble_content form input:eq(1)").val();
    var address = jQuery(".BMap_bubble_content form input:eq(2)").val();
    /*alert(province);
    alert(city);
    alert(address);*/
    decideMunicipalities(province, city, address);
//    jQuery("#storeAddress").val(addressOfSearch);
    if (addressOfSearch.indexOf("市") >= 0) {
        var cityArr = addressOfSearch.split("市");
        jQuery("#searchtext").val(cityArr[1]);
    }
    jQuery("#lng").text(lng);
    jQuery("#lat").text(lat);
    dialog("已更換位置:" + addressOfSearch + ", 您可經過提交修改進行保存");
}
//判斷省市是不是同樣的(直轄市是同樣的)
function decideMunicipalities(province, city, address) {
    if (province == city) {
        /*
         * 判斷完直轄市(省和市相同)以後,再判斷下市和街
         * eg: city : 深圳市, address : 深圳市華強北街道辦
         */
        var index = address.indexOf(city);
        if (index != -1) {
            var addressArr = address.split(city);
            if (addressArr.length >= 2) {
                address = addressArr[1];
            } else {
                address = " ";
            }
        }
        addressOfSearch = address;
    } else {
        /*
         * 判斷完直轄市(省和市相同)以後,再判斷下市和街
         * eg: city : 深圳市, address : 深圳市華強北街道辦
         */
        var index = address.indexOf(city);
        if (index != -1) {
            var addressArr = address.split(city);
            if (addressArr.length >= 2) {
                address = addressArr[1];
            } else {
                address = " ";
            }
        }
        addressOfSearch = province + city + address;
    }
}
//保存地理位置和座標到頁面上,以供修改保存使用(點擊"我在這裏觸發")
function tempSaveLocation(address, lng, lat) {
//    jQuery("#storeAddress").val(address);
    if (address.indexOf("市") >= 0) {
        var cityArr = address.split("市");
        jQuery("#searchtext").val(cityArr[1]);
    }
    jQuery("#lng").text(lng);
    jQuery("#lat").text(lat);
    dialog("已更換位置:" + address + ", 您可經過提交修改進行保存");
}

上面一大段js核心就前面幾句js,後面的一系列都是根據業務需求寫的函數,還有保存座標,判斷直轄市等一系列坑爹的方法,直接複製個人代碼是不能運行的,須要慢慢理解。也就是首先調用百度api申明地圖(new BMap.Map("map")),再描點(var point = new BMap.Point(116.4135540000,39.9110130000); ),再作初始化地圖(map.centerAndZoom(point, 15);), 再申明覆蓋物(var marker = new BMap.Marker(point);), 再把覆蓋物添加到那個point點上去(map.addOverlay(marker);)。基礎差很少就這些吧。git

百度有些官方示例:http://developer.baidu.com/map/jsdemo.htm#a1_2
ajax


再者就是肯定員工位置了,我作的是在頁面上用html5進行定位數據庫

引用的是W3C資料:http://www.w3school.com.cn/html5/html_5_geolocation.aspjson

var x=document.getElementById("demo");
function getLocation()
  {
  if (navigator.geolocation)
    {
    navigator.geolocation.getCurrentPosition(showPosition);
    }
  else{x.innerHTML="Geolocation is not supported by this browser.";}
  }
function showPosition(position)
  {
  x.innerHTML="Latitude: " + position.coords.latitude + 
  "<br />Longitude: " + position.coords.longitude;    
  }

有個要注意的地方,這裏獲取的座標是GPS座標,然而以前保存的商戶座標百度座標,這兩個是不一樣的,須要轉換一下。我選擇的是把員工的GPS座標轉成百度座標再計算距離。api

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的百度地圖密鑰"></script>
<script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
var globalGPSLongitude;
var globalGPSLatitude;
var globalBaiDuLongitude;
var globalBaiDuLatitude;
BMap.Convertor.translate(new BMap.Point(globalGPSLongitude, globalGPSLatitude), 0, initMap); //轉換座標
function initMap(point){
    globalBaiDuLatitude = point.lat;
    globalBaiDuLongitude = point.lng;
}

上面的globalBaiDuLongitude, globalBaiDuLatitude是GPS座標轉換成的百度座標。瀏覽器

相關文章
相關標籤/搜索