文档章节

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

吹比龙
 吹比龙
发布于 2016/03/19 10:54
字数 618
阅读 2134
收藏 0
备注:正桩号存在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);
}

© 著作权归作者所有

吹比龙
粉丝 11
博文 135
码字总数 38713
作品 0
合肥
程序员
私信 提问
微信公众号开发之用户地理位置坐标转百度坐标

微信公众号开发之用户地理位置坐标转百度坐标(搜狗、google地图坐标转百度地图坐标) 上海为卓信息科技——专业实现电子地图二次开发应用百度谷歌地图API调用开发。 我们知道,Google地图、s...

睡得
2015/03/18
17.9K
3
【高德地图API】从零开始学高德JS API(六)坐标转换

摘要:如何从GPS转到谷歌?如何从百度转到高德?这些都是小case。我们还提供,如何将基站cell_id转换为GPS坐标? ----------------------------------------------------------------------...

酸奶小妹GIS
2014/06/18
0
0
关于lbs(各地图系统)的一些基本信息

第一部分 各种坐标系详解 1、大地坐标系统 WGS-84 用来表述地球上点的位置的一种地区坐标系统。它采用一个十分近似于地球自然形状的参考椭球作为描述和推算地面点位置和相互关系的基准面。一...

lele1953
2016/07/04
35
0
GPS位置地图坐标系:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图),OpenGIS

国家规定,中国大陆所有公开地理数据都需要至少用GCJ-02进行加密,也就是说我们从国内公司的产品中得到的数据,一定是经过了加密的。绝大部分国内互联网地图提供商都是使用GCJ-02坐标系,包括...

desaco
01/29
0
0
【腾讯地图API】制作多途经点的线路导航——路线坐标规划

最近百度地图转腾讯地图以前用过百度地图实现路线坐标规划,不过搜索了一些没有搜索到腾讯地图的路线坐标规划,于是参数百度的思路写了个腾讯地图的路线坐标规划. 这两家地图有一点不一样的就是...

xiaogg
04/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

WPS 开启宏功能

前言 最近安装了个人版的WPS2019,使用Excel的宏功能时候发现不能使用了,网上下载了几个安装包都是比较旧的,不能使用。 找了个VB7.1的安装包,安装完了,重启WPS宏功能就可以使用了。 安装...

sharelocked
35分钟前
0
0
ZStack实践汇 | 高效开发测试打造产品化私有云

作者:许佳珺 前言 随着越来越多的企业将云计算产品应用到基础设施及其核心业务中,如何提高和保证软件交付质量、减少软件开发迭代周期、加速软件发布频率成为所有云厂商面临的关键问题。 根...

ZStack社区版
42分钟前
3
0
IPv4如何转换为IPv6?

导读 ipv6已经逐渐在应用,现在已经有很多的运营商支持ipv6,前天我们也发布了如何让电脑使用ipv6地址?有很多朋友在问?ipv6有什么作用,它的表示方式是什么,今天我们来一起来详细了解下ipv...

问题终结者
今天
4
0
SpringBoot2.0高级案例(05):整合 Swagger2 ,构建接口管理界面

一、Swagger2简介 1、Swagger2优点 整合到Spring Boot中,构建强大RESTful API文档。省去接口文档管理工作,修改代码,自动更新,Swagger2也提供了强大的页面测试功能来调试RESTful API。 2、...

知了一笑
今天
6
0
关于观察者模式总结

观察者模式(发布订阅模式):在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖他的对象都会收到通知,并自动更新。 使用场景:当一个对象状态改变同时需要改变其他对象,且...

cherryboy
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部