日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

百度地图——判断一个点是否在一个区域内?

發(fā)布時(shí)間:2025/5/22 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百度地图——判断一个点是否在一个区域内? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?????? 由于目前的一個(gè)項(xiàng)目涉及離線地圖,經(jīng)過查找資料論證,最終還是決定采用百度地圖。在項(xiàng)目過程中,遇到一個(gè)比較實(shí)際的問題:怎么判斷地圖上的一個(gè)點(diǎn)(經(jīng)緯坐標(biāo)下)在一個(gè)多邊形區(qū)域內(nèi)?

????? 由于我采用的是百度地圖JavaScript API v2.0接口,同時(shí)由于要做的是離線地圖,百度地圖離線版有一些功能函數(shù)是不能用的。針對(duì)上述問題,在網(wǎng)上查資料發(fā)現(xiàn),百度的BMapLib.GeoUtils里面有一個(gè)函數(shù)isPointInPolygon可以用于解決這個(gè)問題,但是很遺憾,我用的接口函數(shù)版本并不能用這個(gè)函數(shù),所以我研究了一下,經(jīng)過修改寫了一個(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é)

以上是生活随笔為你收集整理的百度地图——判断一个点是否在一个区域内?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。