js百度地图计算点与折线最短距离
生活随笔
收集整理的這篇文章主要介紹了
js百度地图计算点与折线最短距离
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
百度地圖Android SDk中的方法,用js重寫,原理不懂,實際使用時感覺有明顯誤差,但誤差可以接受。
/*** * @param linesPoint 折線點列表 Point(lng,lat)* @param point 計算最短距離點* @param map 百度地圖實例,用于計算兩點間距離* @returns {{distance: number, point: (*)}} 最短距離,點*/ function getNearestPointFromLine(linesPoint, point, map) {var lineBeginPoint = linesPoint[0];var linePointSize = linesPoint.length;var closestPoint;var closestDistance = Infinity;for (var i = 1; i <= linePointSize - 1; i++) {var lineEndPoint = linesPoint[i];var closestPointByLine = getClosestPoint(point, lineBeginPoint, lineEndPoint);var distance = parseInt(map.getDistance(point, closestPointByLine));if (distance < closestDistance) {closestDistance = distance;closestPoint = closestPointByLine;}lineBeginPoint = lineEndPoint;}return {point: closestPoint, distance: closestDistance}; }function getClosestPoint(target, lineBegin, lineEnd) {var p1 = (lineEnd.lng - lineBegin.lng) * (target.lng - lineBegin.lng) +(lineEnd.lat - lineBegin.lat) * (target.lat - lineBegin.lat);if (p1 <= 0.0) {return lineBegin;} else {var p2 = (lineEnd.lng - lineBegin.lng) * (lineEnd.lng - lineBegin.lng) +(lineEnd.lat - lineBegin.lat) * (lineEnd.lat - lineBegin.lat);if (p1 >= p2) {return lineEnd;} else {var p3 = p1 / p2;var p4 = lineBegin.lng + (lineEnd.lng - lineBegin.lng) * p3;var p5 = lineBegin.lat + (lineEnd.lat - lineBegin.lat) * p3;return new BMap.Point(p4, p5);}} }總結
以上是生活随笔為你收集整理的js百度地图计算点与折线最短距离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Golang 见证 godoc 的强大(
- 下一篇: 易语言多线程封装线程启动返回句柄