日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

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

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

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

?????? 由于目前的一個(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ò)修改寫(xiě)了一個(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(百度開(kāi)發(fā)平臺(tái))

http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html(百度地圖JavaScript API v2.0類參考)

總結(jié)

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

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