區域地址搜索是指某一地址或某些地址是否在指定的區域範圍內。區域範圍通常有圓形、矩形和多邊形,利用百度地圖API提供的數據接口,能夠提取中國,各省、市、區,甚至是小區或商圈的邊界經緯度座標(多邊形)。這樣,就能夠根據判斷任意經緯度所在區域,在地址分類以及和地址相關指標的分類和插值算法中有普遍用途。javascript
本文判別計算須要引入百度地圖API類庫:css
<script type="text/javascript" src="http://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js"></script>
類BMapLib.GeoUtils提供的都是靜態方法,勿需實例化便可使用。方法列表以下:html
方法 | 返回值 | 描述 |
---|---|---|
BMapLib.GeoUtils.degreeToRad(Number) | Number | 將度轉化爲弧度 |
BMapLib.GeoUtils.radToDegree(Number) | Number | 將弧度轉化爲度 |
BMapLib.GeoUtils.getDistance(Point, Point) | Number | 計算經緯度之間的距離 |
BMapLib.GeoUtils.getPolygonArea(polygon) | Number | 計算多邊形面或點數組構建圖形的面積 |
BMapLib.GeoUtils.getPolylineDistance(polyline) | Number | 計算折線或者點數組的長度 |
BMapLib.GeoUtils.isPointInCircle(point, circle) | Boolean | 判斷點是否在圓形內 |
BMapLib.GeoUtils.isPointInPolygon(point, polygon) | Boolean | 判斷點是否多邊形內 |
BMapLib.GeoUtils.isPointInRect(point, bounds) | Boolean | 判斷點是否在矩形內 |
BMapLib.GeoUtils.isPointOnPolyline(point, polyline) | Boolean | 判斷點是否在折線上 |
這裏,「點」指某一地址或經緯度座標,區域指園形、矩形、多邊形或當前地圖可視區域。點與區域之間的關係是指點在區域內或區域外。java
圓心經度 圓心緯度 圓半徑 (米) 算法
矩形左下角經度 矩形左下角緯度
矩形右上角經度 矩形右上角緯度 api
數組
工具
通常狀況下行政區域邊界爲多邊形,判斷一些點是否在給定多邊形區域內這種技巧應用比較普遍。學習
商圈是指以店鋪座落點爲核心向外延伸必定距離而造成的一個方圓範圍,是店鋪吸引顧客的地理區域。百度地圖只提供了部分發達城市的商圈區域邊界經緯度。ui
經緯度座標列表
經緯度座標數組
注:可在省(直轄市)、市、區(縣)和商圈名稱列表中選擇區域(能夠只選省份名稱或城市名稱),點擊「獲取輪廓線」按鈕得到區域邊界經緯度
代碼樣例
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>獲取地區輪廓線</title> <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script> <style type="text/css"> body{font-size:13px;margin:10px} #container{width:800px;height:500px;border:1px solid gray} </style> </head> <body> <div id="container"></div> <br /> 輸入省、直轄市或縣名稱:<input type="text" id="districtName" style="width:80px" value="重慶市"> <input type="button" onclick="getBoundary()" value="獲取輪廓線"> <script type="text/javascript"> var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 5); map.addControl(new BMap.NavigationControl({type: BMAP_NAVIGATION_CONTROL_SMALL})); map.enableScrollWheelZoom(); function getBoundary(){ var bdary = new BMap.Boundary(); var name = document.getElementById("districtName").value; bdary.get(name, function(rs){ //獲取行政區域 map.clearOverlays(); //清除地圖覆蓋物 var count = rs.boundaries.length; //行政區域的點有多少個 for(var i = 0; i < count; i++){ var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000"}); //創建多邊形覆蓋物 map.addOverlay(ply); //添加覆蓋物 map.setViewport(ply.getPath()); //調整視野 } }); } </script> </body> </html>
百度和高德等地圖API提供的區域邊界經緯度座標通常只到區(縣)一級,農村的鄉、村和城市的小區區域邊界經緯度座標則須要項目開發者本身根據項目需求本身標註。另外還有城市綠地、農村耕地、天然湖泊等區域邊界經緯度座標等也須要自行標註。標註方法及工具參見後續文章。
在住宅房地產價格批量評估技術中,因爲同一小區同類房地產價格相近,一般須要根據小區內出售的房地產平均價格作爲小區的基準價格。所以,首先根據天然小區或價格相似的區域把一座城市劃分爲幾百或幾千個基準價格分區(大部分是天然小區、小部分爲人工合併的小區),而後以小區房地產平均價格小區基準價格(沒有銷售數據或銷售量不多的小區須要評估師估價或用近鄰小區自動估價)。這樣,
以哈爾濱市爲例,爲了進行住宅房地產價格批量評估,首先劃分出2000多個基準價格分區(標註出小區邊界經緯度座標,本文只列出約100個小區),這樣對任一地址(哈爾濱市道里區通達街號棟單元室)的房地產,估價步驟以下:
I、將地址轉換爲經緯度; II、運用點與區域之間的關係判斷改地址所屬基準價格分區,從而獲得基準價; III、根據樓層、朝向和麪積等個別特性調整基準價,最後獲得估價。
在批量估價過程當中,地址批量解析、小區邊界經緯度座標標註、小區銷售價格採集等工做在規模較大城市將耗費大量人力、物力和財力。
經緯度座標列表
經緯度座標數組
本文提供的各類區域經緯度邊界工具僅用於我的學習或教學研究用途,不支持大批量商業用途的區域邊界經緯度座標提取(因爲百度地圖key的限制)。