百度地圖之多點步行路徑連線問題

來源:互聯網
上載者:User

標籤:style   blog   http   color   java   使用   os   io   

最近項目需要結合用到百度地圖,需求是在地圖實現多個點步行連線問題;因為百度有提供兩點之間的步行路徑圖,以及沿線的座標點資訊;初步設想是首先把各個點的步行路徑畫出來,然後得到這條線路的座標資訊集合,然後通過百度地圖的另外一個做直線介面重新把完整線路繪畫出來;

如果你對百度地圖的API知識不是很瞭解,可以查看http://developer.51cto.com/art/201110/298662.htm,裡面有比較詳細的介紹;

百度地圖API開發人員地址:http://developer.baidu.com/map/jshome.htm

 

一:通過結合下面兩個百度執行個體來實現我們所要求的功能;

1:兩點間步行執行個體:http://developer.baidu.com/map/jsdemo.htm#i6_1 

<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><style type="text/css">body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}</style><script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰"></script><title>步行導航檢索</title></head><body><div id="allmap"></div></body></html><script type="text/javascript">var map = new BMap.Map("allmap");map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);var walking = new BMap.WalkingRoute(map, {renderOptions:{map: map, autoViewport: true}});walking.search("天壇公園", "故宮");</script>

 

2:折線執行個體:http://developer.baidu.com/map/jsdemo.htm#c1_5

<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><style type="text/css">body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}</style><script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰"></script><title>折線</title></head><body><div id="allmap"></div></body></html><script type="text/javascript">var map = new BMap.Map("allmap");var point = new BMap.Point(116.404, 39.915);map.centerAndZoom(point, 15);var polyline = new BMap.Polyline([  new BMap.Point(116.399, 39.910),  new BMap.Point(116.405, 39.920),  new BMap.Point(116.425, 39.900)], {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5});map.addOverlay(polyline);</script>

 

二:多點步行路徑連線執行個體(完整的代碼如下,都有相應說明,執行個體定義三個點)

<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    <title></title>    <style type="text/css">        body, html        {            width: 100%;            height: 100%;            overflow: hidden;            margin: 0;        }        #allmap        {            height: 50%;            width: 40%;            float: left;            border-right: 2px solid #bcbcbc;        }        #r-result        {            height: 100%;            width: 55%;            float: left;        }    </style>    <script src="jquery-1.3.2.min.js" type="text/javascript"></script>    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=nLpN5iKztxIWsPqgwsyrruUG"></script>    <script type="text/javascript">    </script></head><body>    <input id="btn_show" type="button" value="button" />    <div id="allmap">    </div>    <%--style="display:none"--%>    <div id="r-result">    </div></body></html><script type="text/javascript">    //定義集合用來存放沿線的座標值    var chartData = [];    //載入地圖    var map = new BMap.Map("allmap");    map.centerAndZoom(new BMap.Point(118.10000, 24.46667), 11);    var walking = new BMap.WalkingRoute(map, { renderOptions: { map: map, autoViewport: true} });    var startpoint = new BMap.Point(118.112917, 24.435153);    var endpoint = new BMap.Point(118.1086487, 24.439108);    walking.search(startpoint, endpoint);    //通過setSearchCompleteCallback回調事件可以把步行間的座標資訊擷取    walking.setSearchCompleteCallback(function (rs) {        var pts = walking.getResults().getPlan(0).getRoute(0).getPath();        for (var i = 0; i < pts.length; i++) {            chartData.push(new BMap.Point(pts[i].lat, pts[i].lng));        }    });    //另外兩點的步行路線    var walkings = new BMap.WalkingRoute(map, { renderOptions: { map: map, autoViewport: true} });    var twoPoint = new BMap.Point(118.1286555, 24.4491888);    walkings.search(endpoint, twoPoint);    walkings.setSearchCompleteCallback(function (rs) {        var pts = walkings.getResults().getPlan(0).getRoute(0).getPath();        for (var i = 0; i < pts.length; i++) {            chartData.push(new BMap.Point(pts[i].lat, pts[i].lng));        }    });    //用來存放途經點的座標    var viaRouteData = [];    viaRouteData.push(endpoint);    $(function () {        $("#btn_show").click(function () {            //這邊故意讓它晚一秒運行,因為上面擷取座標資訊是比較慢又是非同步            setTimeout(ShowRoute, 1000);        });    });    function ShowRoute() {        var firstPoint;        var endPoint;        var newChartData = [];        //對座標點重新定義        $.each(chartData, function (item, value) {            newChartData.push(new BMap.Point(value.lat, value.lng));        });        //為了獲得起點及終點的座標值,方便對它進行文文書處理        firstPoint = newChartData[0];        endPoint = newChartData[newChartData.length - 1];        //載入地圖        var maps = new BMap.Map("r-result");        maps.centerAndZoom(new BMap.Point(118.10000, 24.46667), 15);        //把步行線路的座標集合轉化成折線        var polyline = new BMap.Polyline(newChartData, { strokeColor: "red", strokeWeight: 6, strokeOpacity: 0.5 });        maps.addOverlay(polyline);        //對起點、終點、途經點做一個簡單的處理,泡泡跟文字提示        var m1 = new BMap.Marker(firstPoint);        var m2 = new BMap.Marker(endPoint);        maps.addOverlay(m1);        maps.addOverlay(m2);        var lab1 = new BMap.Label("起點", { position: firstPoint });        var lab2 = new BMap.Label("終點", { position: endPoint });        maps.addOverlay(lab1);        maps.addOverlay(lab2);        $.each(viaRouteData, function (item, value) {            var m = new BMap.Marker(value);            maps.addOverlay(m);            var lab = new BMap.Label("途經點", { position: value });            maps.addOverlay(lab);        });    }</script>

左邊是使用步行介面顯示的三點連線地圖,兩點間都會標識起點跟終點,所以要是有多點地圖上就會出現很為起點、終點的標誌;右邊這張是通過修改以後的地圖;

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.