用asp.net mvc 3加載 百度地圖數據(結合百度API)

前言:百度地圖標註物數據加載結合百度API(http://openapi.baidu.com/map/jsdemo.htm) 和百度拾取座標系統(http://dev.baidu.com/wiki/static/map/API/tool/getPoint/)二者缺一不可,下面就來說說詳細的調用和實現方法.(說明:用的是asp.net mvc 3)

1.前端頁面代碼

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <title>地圖展示</title>
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="http://api.map.baidu.com/api?v=1.2&services=true" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/web/jquery.baidu.map.js")" type="text/javascript"></script>
    <style type="text/css">
        body, html,#container {width: 100%;height: 100%;overflow: hidden;margin:0;}
    </style>
</head>
<body>
    <!--地圖顯示DIV-->
    <div id="container">
    </div>
</body>

</html>

2.後臺control實現代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Text;

namespace Map.Controllers
{
    public class MapController : Controller
    {
        //
        // GET: /Map/

        public ActionResult Index()
        {
            return View();
        }

        [HttpGet]
        //默認加載數據
        public ActionResult SearchMap()
        {
            //默認有兩個標註
            List<Map> mapList = new List<Map>() {
                new Map(){ CenterLat=113.929963M, CenterLng=22.530031M, Zoom=12},
                new Map(){ CenterLat=113.925076M, CenterLng=22.498781M, Zoom=12}
            };
            StringBuilder str = new StringBuilder();
            foreach (Map map in mapList)
            {
                str.Append(string.Format("{0},{1},{2};",
                       map.CenterLat,
                       map.CenterLng,
                       map.Zoom
                      ));
            }
            return Json(str.ToString(), JsonRequestBehavior.AllowGet);
        }
    }

    //標註實體
    public class Map
    {
        /// <summary>
        /// 經度
        /// </summary>
        public decimal? CenterLng { get; set; }

        /// <summary>
        /// 緯度
        /// </summary>
        public decimal? CenterLat { get; set; }

        /// <summary>
        /// 比列尺
        /// </summary>
        public decimal? Zoom { get; set; }

    }
}

2.js實現代碼

var enableScrollWheelZoom = true;
var map = null;
var zoom = 15;
var mapPoint = null;
var enableKeyboard = true;
var enableContinuousZoom = true;
var enableInertialDragging = true;
var CommunityList = [];//座標數據集合
var MarkerList = [];

function initCommunityList(data) {
    CommunityList.length = 0;
    if ($.trim(data) != "") {
        var strCommunityList = data.split(";");
        $.each(strCommunityList, function (i, item) {
            if ($.trim(item) != "") {
                var instance = item.split(",");
                var community = new Object();
                community.CenterLng = instance[0];//橫座標
                community.CenterLat = instance[1];//豎座標
                community.Zoom = instance[2];     //比列尺
                //如果沒有座標,則不加入標註數據
                if (community.CenterLat != -1000 && community.CenterLng != -1000) {
                    CommunityList[CommunityList.length] = community;
                }
            }
        });
    }
}

// 編寫自定義函數,創建標註
function addMarker(commuinity) {
    var marker = _createNormalMarker(commuinity);
    map.addOverlay(marker);
    MarkerList[MarkerList.length] = marker;
}

//刷新地圖標註,以及地圖定位
function RefreshMarker() {
    ClearMarker();
    if (CommunityList.length > 0) {
        for (var index = 0; index < CommunityList.length; index++) {
            var community = CommunityList[index];
            addMarker(community);
        }
        var commuinty = CommunityList[0];
        var firstpoint = new BMap.Point(commuinty.CenterLng, commuinty.CenterLat);
        map.centerAndZoom(firstpoint, Number(community.Zoom));
    } else {
        map.centerAndZoom(mapPoint, zoom);                 // 初始化地圖,設置中心點座標和地圖級別  
    }
}

//清除歷史標註
function ClearMarker() {
    if (MarkerList.length > 0) {
        map.clearOverlays();
        for (i in MarkerList) {
            MarkerList[i] = null;
        }
        MarkerList.length = 0;
    }
}

//創建詳細標註
function _createNormalMarker(commuinity) {
    var point = new BMap.Point(commuinity.CenterLng, commuinity.CenterLat);
    var marker = new BMap.Marker(point, { offset: new BMap.Size(0, 13) });
    marker.addEventListener("click", function (e) {
        var opts = {
            width: 400,
            height: 250,
            title: "<h3>標題</h3>"
        }
        var infoWindow = null;
        var content = "點擊標註,成功顯示純文本信息窗口!!!";
        infoWindow = new BMap.InfoWindow(content, opts);
        map.openInfoWindow(infoWindow, e.point);

    });
    marker.tag = commuinity;
    map.addOverlay(marker);
    return marker;
}

window.onload = function () {
    try {
        mapPoint = new BMap.Point(114.131, 22.649);
        if (map == null)
            map = new BMap.Map("container", { mapType: BMAP_HYBRID_MAP });
        map.centerAndZoom(mapPoint, zoom);  // 初始化地圖,設置中心點座標和地圖級別  
        if (enableScrollWheelZoom)
            map.enableScrollWheelZoom();  // 開啓鼠標滾輪縮放  
        if (enableKeyboard)
            map.enableKeyboard();         // 開啓鍵盤控制  
        if (enableContinuousZoom)
            map.enableContinuousZoom();   // 開啓連續縮放效果  
        if (enableInertialDragging)
            map.enableInertialDragging(); // 開啓慣性拖拽效果 

        var strUrl = "/Map/SearchMap";
        //默認加載標註數據
        $.getJSON(strUrl, null,
            function (data) {
                initCommunityList(data);
                RefreshMarker();
            });
    }
    catch (err) {
        alert("百度地圖加載失敗,請確保你的電腦能訪問百度地圖!!");
    }
 
}

下載地址:http://www.kuaipan.cn/file/id_99609865076342785.htm

最終實現效果如圖






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章