Qt編寫地圖綜合應用13-獲取邊界點

## 一、前言

獲取邊界點一般和行政區劃搭配起來使用,比如用戶輸入一個省市的名稱,然後自動定位到該省市,然後對該輪廓獲取所有邊界點集合輸出到js文件,最後供離線使用,獲取邊界點還有一個功能就是獲取當前區域內的左下角右上角等經緯度座標,這個主要是供離線地圖下載使用的,百度地圖很好的提供了bdary.get(cityname, function(rs)的函數來獲取行政區劃的邊界點集合,其中rs.boundaries就是所有的邊界點集合,估計他是服務器上存儲好的每個區域的集合,查詢到了立即返回,可能早期也是人工的一點點圈起來連線好存到到數據庫的,按照此方式其實可以搞一個程序自動將全國的所有省市邊界點集合數據全部扒下來,給離線地圖使用,測試了下貌似只支持到縣城級別,不支持具體到鄉鎮。

## 二、功能特點

1. 同時支持在線地圖和離線地圖兩種模式。

2. 同時支持webkit內核、webengine內核、IE內核。

3. 支持設置多個標註點,信息包括名稱、地址、經緯度。

4. 可設置地圖是否可單擊、拖動、鼠標滾輪縮放。

5. 可設置協議版本、秘鑰、主題樣式、中心座標、中心城市、地理編碼位置等。

6. 可設置地圖縮放比例和級別,縮略圖、比例尺、路況信息等控件的可見。

7. 支持地圖交互,比如鼠標按下獲取對應位置的經緯度。

8. 支持查詢路線,可設置起點位置、終點位置、路線模式、路線方式、路線方案(最少時間、最少換乘、最少步行、不乘地鐵、最短距離、避開高速)。

9. 可顯示點線面工具,可直接在地圖上劃線、點、矩形、圓形等。

10. 可設置行政區劃,指定某個城市區域繪製圖層,在線地圖自動輸出行政區劃邊界點集合到js文件給離線地圖使用。

11. 可靜態或者動態添加多個覆蓋物。支持點、折線、多邊形、矩形、圓形、弧線、點聚合等。

12. 函數接口友好和統一,使用簡單方便,就一個類。

13. 支持js動態交互添加點、刪除點、清空點、重置點,不需要刷新頁面。

14. 支持任意Qt版本、任意系統、任意編譯器。

## 三、體驗地址

國內站點:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)

國際站點:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)

## 四、效果圖


Qt編寫地圖綜合應用13-獲取邊界點


## 五、相關代碼

<code>void MapBaiDu::getBounds(QStringList &

list

) {

list

<< QString(

" function getBounds() {"

);

list

<< QString(

" var bs = map.getBounds();"

);

list

<< QString(

" var bssw = bs.getSouthWest();"

);

list

<< QString(

" var bsne = bs.getNorthEast();"

);

list

<< QString(

" var bsce = bs.getCenter();"

);

list

<< QString(

" var rect = bssw.lng + ',' + bssw.lat + ',' + bsne.lng + ',' + bsne.lat + ',' + bsce.lng + ',' + bsce.lat + ',' + map.getZoom();"

);

list

<< QString(

" window.%1('bounds', rect);"

).arg(callFun);

list

<< QString(

" }"

); } void MapBaiDu::getBoundary(QStringList &

list

) {

list

<< QString(

" function getBoundary() {"

);

list

<< QString(

" for (var i = 0; i < polygons.length; i++) {"

);

list

<< QString(

" var polyline = polygons[i];"

);

list

<< QString(

" var pts = polyline.getPath();"

);

list

<< QString(

" var result = '';"

);

list

<< QString(

" for (var j = 0; j < pts.length; j++) {"

);

list

<< QString(

" result += pts[j].lng + ', ' + pts[j].lat + ';';"

);

list

<< QString(

" }"

);

list

<< QString(

" window.%1('newboundary', result);"

).arg(callFun);

list

<< QString(

" }"

);

list

<< QString(

" }"

); }/<code>


分享到:


相關文章: