百度地图——判断一个点是否在一个区域内?
?????? 由于目前的一個(gè)項(xiàng)目涉及離線地圖,經(jīng)過(guò)查找資料論證,最終還是決定采用百度地圖。在項(xiàng)目過(guò)程中,遇到一個(gè)比較實(shí)際的問(wèn)題:怎么判斷地圖上的一個(gè)點(diǎn)(經(jīng)緯坐標(biāo)下)在一個(gè)多邊形區(qū)域內(nèi)?
????? 由于我采用的是百度地圖JavaScript API v2.0接口,同時(shí)由于要做的是離線地圖,百度地圖離線版有一些功能函數(shù)是不能用的。針對(duì)上述問(wèn)題,在網(wǎng)上查資料發(fā)現(xiàn),百度的BMapLib.GeoUtils里面有一個(gè)函數(shù)isPointInPolygon可以用于解決這個(gè)問(wèn)題,但是很遺憾,我用的接口函數(shù)版本并不能用這個(gè)函數(shù),所以我研究了一下,經(jīng)過(guò)修改寫了一個(gè)滿足條件的函數(shù)。下面是代碼部分:
function isInsidePolygon(point, polygon) { if(!(point instanceof BMap.Point) || !(polygon instanceof BMap.Polygon)){return false;}var polygonBounds = polygon.getBounds();if(!polygonBounds.containsPoint(point)){return false;}var pts = polygon.getPath();var N = pts.length;var boundOrVertex = true; var intersectCount = 0;var precision = 2e-10; var p1, p2;//neighbour bound verticesvar p = point; p1 = pts[0];//left vertex for(var i = 1; i <= N; ++i) //check all rays { if(p.equals(p1)){return boundOrVertex; //p is an vertex} p2 = pts[i % N];//right vertex if(p.lat < Math.min(p1.lat, p2.lat) || p.lat > Math.max(p1.lat, p2.lat)) //ray is outside of our interests { p1 = p2; continue;//next ray left point}if(p.lat > Math.min(p1.lat, p2.lat) && p.lat < Math.max(p1.lat, p2.lat)){if(p.lng <= Math.max(p1.lng, p2.lng)){ if(p1.lat == p2.lat && p.lng >= Math.min(p1.lng, p2.lng)){return boundOrVertex;}if(p1.lng == p2.lng){ if(p1.lng == p.lng){return boundOrVertex;}else{++intersectCount;} }else{ var xinters = (p.lat - p1.lat) * (p2.lng - p1.lng) / (p2.lat - p1.lat) + p1.lng; if(Math.abs(p.lng - xinters) < precision){return boundOrVertex;}if(p.lng < xinters){++intersectCount;} }}}else{ if(p.lat == p2.lat && p.lng <= p2.lng){ var p3 = pts[(i+1) % N]; //next vertex if(p.lat >= Math.min(p1.lat, p3.lat) && p.lat <= Math.max(p1.lat, p3.lat)){++intersectCount;}else{intersectCount += 2;}}} p1 = p2;//next ray left point}if(intersectCount % 2 == 0){//偶數(shù)在多邊形外return false;} else { //奇數(shù)在多邊形內(nèi)return true;} }參考資料:
http://api.map.baidu.com/library/GeoUtils/1.2/docs/symbols/BMapLib.GeoUtils.html(百度開發(fā)平臺(tái))
http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html(百度地圖JavaScript API v2.0類參考)
總結(jié)
以上是生活随笔為你收集整理的百度地图——判断一个点是否在一个区域内?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 金典训练数学八上电子版谁有,练习册我弄丢
- 下一篇: 一个长方体的高截去二点五厘米表面积就减少