@豆奶 同學給我出了題目. 題目中的一部分可以理解為是獲取某一地區的邊界. 故有此文.
百度有 LBS 的開發者服務, 但是需要注冊開發者並獲取 key, 而我抱着能簡單就簡單的原則, 就不樂意做這樣的事情. 當然如果真有項目的話, 注冊必須的啦. 我在 http://developer.baidu.com/map/jsdemo.htm#c1_10 發現了度娘提供的一個代碼演示, 不用 key 就可以獲得一些簡單的結果.

其代碼為
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 6 <style type="text/css"> 7 body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微軟雅黑";} 8 </style> 9 <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰"></script> 10 <title>添加行政區划</title> 11 </head> 12 <body> 13 <div id="allmap"></div> 14 15 </body> 16 </html> 17 <script type="text/javascript"> 18 // 百度地圖API功能 19 var map = new BMap.Map("allmap"); 20 map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 5); 21 map.enableScrollWheelZoom(); 22 23 function getBoundary(){ 24 var bdary = new BMap.Boundary(); 25 bdary.get("重慶", function(rs){ //獲取行政區域 26 map.clearOverlays(); //清除地圖覆蓋物 27 var count = rs.boundaries.length; //行政區域的點有多少個 28 for(var i = 0; i < count; i++){ 29 var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000"}); //建立多邊形覆蓋物 30 map.addOverlay(ply); //添加覆蓋物 31 map.setViewport(ply.getPath()); //調整視野 32 } 33 }); 34 } 35 36 setTimeout(function(){ 37 getBoundary(); 38 }, 2000); 39 </script>
利用 getBoundary() 獲取 Bourndary 數據並存為 rs.boundaries 里. 話說為什么是默認是重慶呢. 接下來的任務就簡單了, 只要獲取 rs.boundaires 的數據就可以了. 稍稍修改下代碼:
1 <html> 2 <head> 3 // 略 4 </head> 5 <body> 6 <input type='text' name='text1' /> //*** 插入一個輸入文本框 7 <div id="allmap"></div> 8 </body> 9 </html> 10 <script type="text/javascript"> 11 // 略 12 function getBoundary(){ 13 var bdary = new BMap.Boundary(); 14 bdary.get("重慶", function(rs){ //獲取行政區域 15 map.clearOverlays(); //清除地圖覆蓋物 16 var count = rs.boundaries.length; //行政區域的點有多少個 17 document.all.text1.value = rs.boundaries; //***將數據賦給文本框 18 for(var i = 0; i < count; i++){ 19 // 下略 20 </script>
在 HTML 代碼中添加 <input type='text' name='text1' /> //*** 插入一個輸入文本框
並在 js 代碼中添加:
document.all.text1.value = rs.boundaries; //***將數據賦給文本框
運行以后得到:

將上面的文本框內的數據復制到文本編輯器中, 愛怎么搗鼓怎么搗鼓. 其數據格式很簡單, 就是
x坐標, y坐標; x坐標, y坐標; ...... x坐標, y坐標;
挺方便的轉換的. 寫 matlab 代碼如下
function plotmap()
close all; clear all; clc; data = [109.756569, 30.833813; 109.773902, 30.84064; 109.788836, 30.854885; %... 各種數據, 略 109.739207, 30.824822; 109.756569, 30.833813]; myarea.('x') = data(:,1); myarea.('y') = data(:,2); plot(myarea.('x'),myarea.('y'),'linewidth',2,'color',[0.8,0,0]); set(gcf,'color','w') axis off; end
得到圖:

目前有三個問題:
1. 地圖最小行政級別到縣. 直轄市到區.
2. 對於較小行政單位其曲線精度不是太高.
3. 對於附近一部分水域也會算上, 因此不一定符合沿海, 湖周邊地區數據統計需要.
