百度地图---之---桩号转坐标

备注:正桩号存在db和其对应的坐标点
首先现根据输入桩号去db查询出最近2个点 桩号及其坐标 1210 1211
/**
 * 桩号转化为坐标
 * @param pileNum 输入的桩号 例如:1210.2或者k1210.22
 * @param startStakeCode 起始桩号数 1210
 * @param sPoint 起始桩号坐标 1210对应坐标
 * @param nsPoint 下一桩号坐标 1211 对应的坐标
 * */
function PileToCoordinate(pileNum,startStakeCode,sPoint,nsPoint){
    length_arr = [];
    if (sPoint == null || nsPoint == null) {
        return null;
    }
    pileNum = pileNum+"";
    //开始桩号
    var sPile=sPoint.stakeName;
    //结束桩号
    var ePile=nsPoint.stakeName;
    sPoint = new BMap.Point(sPoint.x, sPoint.y);
    nsPoint = new BMap.Point(nsPoint.x, nsPoint.y);
    var driving = new BMap.DrivingRoute(map);
    // 路径规划完回调函数
    driving.setSearchCompleteCallback(function(results){
    var routePlan = results.getPlan(0);
    //路径规划返回规划点集合
    var pointArr=[];
    //用于存储相邻点间距离
    var len_arr = [];
    //事发起点和路径规划点集合,用于计算个点之间距离
    var tempArr=[];
    tempArr.push(sPoint);
    for (var i = 0; i < routePlan.getNumRoutes() ; i++) {
     var route = routePlan.getRoute(i);
     for ( j in route.getPath()) {
     pointArr.push(route.getPath()[j]);
     tempArr.push(route.getPath()[j]);
     };
     }; 
pointArr.push(nsPoint);
tempArr.push(nsPoint);
//循环遍历取每相邻2个点距离
for ( var j = 0; j < tempArr.length-1; j++) {
len_arr.push(_fnGetDistanceKLD(tempArr[j],tempArr[j+1]));
}
        var po = null;
        if (pileNum.indexOf("k") >= 0 || pileNum.indexOf("K") >= 0) {
            pileNum = pileNum.substring(1, pileNum.length);
        }
        // 输入点与最近起点距离 例如 1210.2-1210
        var arr = parseFloat(pileNum) - parseFloat(startStakeCode);
        //单位千米 换算下
        var offSet = 1000 * parseFloat(parseFloat(arr));
        // 看路径规划后离输入点最近的2个点
        var length = 0;
        var index = 0;
        if (pointArr.length > 2 && offSet>0) {
            for (var i = 0; i < len_arr.length; i++) {
                index = i;
                if (offSet > length && offSet < length + len_arr[i]) {
                    break;
                }
                length += len_arr[i];
            }
            if(length==0)
            {
            po = calculateStakeToPoint((offSet - length), sPoint, pointArr[index]);
            }else{
            po = calculateStakeToPoint((offSet - length), pointArr[index - 1], pointArr[index]);
            }
        } else {
            po = calculateStakeToPoint(offSet, pointArr[0], pointArr[1]);
        }
        if (po != null) {
        callBack({
        point:po
        });
        }
    });
    //路径规划 取最近2点间的所有点
    driving.search(sPoint,nsPoint);
}
/**
 * 计算两点间距离
 * @param offSet 离路径规划后最近起始点的距离
 * @param sPoint 离路径规划后最近起始点坐标
 * @param ePoint 离路径规划后最近终止点坐标
 * */
function calculateStakeToPoint(offSet,sPoint,nsPoint){
    var _startX = sPoint.lng;
    var _startY = sPoint.lat;
    var _endX = nsPoint.lng;
    var _endY = nsPoint.lat;
    var len = _fnGetDistanceKLD(sPoint,nsPoint);
    if(len==0){
    	len=offSet;
    }
    // 看成1条直线 因为已经尽肯能精度了
    // 算出对应经纬度
    var ratio = (offSet/len)<=1?(offSet/len):0.9;//如果系数大于1则设置为0.9,避免错乱
    var offSetX = parseFloat(parseFloat(ratio*(_endX - _startX))+parseFloat(_startX));
    var offSetY = parseFloat(parseFloat(ratio*(_endY - _startY))+parseFloat(_startY));
    var point = new BMap.Point(offSetX, offSetY);
    return point;
}
/**
 * 计算两点间距离
 * @param sPoint 起始桩号坐标
 * @param ePoint 终止桩号坐标
 * */
function _fnGetDistanceKLD(sPoint,ePoint){
	return map.getDistance(sPoint,ePoint);
}

转载于:https://my.oschina.net/chuibilong/blog/643570

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值