两个地址间的所有gps点位获取

1.通过百度地图的js插件获取(获取到的是导航的点位数据,有个数限制,但是是根据城市地图推荐的最优路线给的点),替换pointA和pointB变量,运行html,点击输出

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <title>驾车途经点</title>
   <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
  <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>
</head>
<body>
<p><input type='button' value='开始' onclick='run();' /></p>
<p><input type='button' value='输出' onclick='print();' /></p>
<div style="width:820px;height:500px;border:1px solid gray" id="container"></div>


<div style="width:820px;height:500px;border:1px solid gray" id="printf" name="printf"></div>

</body>
</html>
<script type="text/javascript">
  var map = new BMap.Map("container");
  map.centerAndZoom(new BMap.Point(116.404, 39.915), 13);
  map.addControl(new BMap.NavigationControl());               // 添加平移缩放控件
  map.addControl(new BMap.ScaleControl());                    // 添加比例尺控件
  map.addControl(new BMap.OverviewMapControl());              //添加缩略地图控件

  var myP1 = new BMap.Point(120.558952,31.380589);    //起点-苏州
  var myP2 = new BMap.Point(120.608323,31.326441);    //终点-苏州园区站
  var myP3 = new BMap.Point(120.65381,31.293426);    //终点-苏州北站

  var bx=120.653721,ax=120.617797,by=31.293565,ay=31.334048;
  var pointA = new BMap.Point(120.653721,31.293565);
  var pointB = new BMap.Point(120.617797,31.334048);
  // var pointA = new BMap.Point(ax,ay);  // 创建点坐标A--大渡口区
  // var pointB = new BMap.Point(bx,by);



  function print(){

    var dis=1;
    var d = (map.getDistance(pointA,pointB)).toFixed(2);
    alert("两点距离,保留两位小数:"+d);
    var n =  Math.ceil(d/dis);
    alert("分割点位数量:"+n);
    var dx = dis*(bx - ax)/d ;
    var dy =  dis*(by-ay)/d;
    alert(dx);
    var xc = dx + ax;
    var yc = dy + ay;
    var i=1;
    for(;i<=n;i++){
      var xc = i*dx + ax;
      var yc = i*dy + ay;
      var new_point = new BMap.Point(xc,yc);
      var marker = new BMap.Marker(new_point);  // 创建标注
      map.addOverlay(marker);              // 将标注添加到地图中
      map.panTo(new_point);
      document.getElementById("printf").insertAdjacentHTML('afterend',xc+","+yc+" ");
    }
    document.getElementById("printf").insertAdjacentHTML('afterend',"-------总数:"+i+"---------");



  }

  window.run = function () {
    map.clearOverlays();                        //清除地图上所有的覆盖物
    var driving = new BMap.DrivingRoute(map);    //创建驾车实例
    driving.search(myP1, myP2);                 //第一个驾车搜索
    driving.search(myP2, myP3);                 //第二个驾车搜索
    driving.setSearchCompleteCallback(function () {
      var pts = driving.getResults().getPlan(0).getRoute(0).getPath();

      try {
        document.getElementById("printf").insertAdjacentHTML('afterend','<---------------开始调用-------------------->');

        var p=JSON.stringify(pts);

        document.getElementById("printf").insertAdjacentHTML('afterend',p);
        sleep(4000)
        document.getElementById("printf").insertAdjacentHTML('afterend','<----------------结束调用------------------->');

      }catch (e) {
        alert("pts 转 json 失败")
        document.getElementById("printf").insertAdjacentHTML('afterend','<---------------开始调用-------------------->');

        //var p=JSON.stringify(driving);

        document.getElementById("printf").insertAdjacentHTML('afterend',driving);
        sleep(4000)
        document.getElementById("printf").insertAdjacentHTML('afterend','<----------------结束调用------------------->');
      }

      //通过驾车实例,获得一系列点的数组
       var polyline = new BMap.Polyline(pts);
       map.addOverlay(polyline);
       var m1 = new BMap.Marker(myP1);
      // 创建3个marker
       var m2 = new BMap.Marker(myP2);
       var m3 = new BMap.Marker(myP3);

      map.addOverlay(m1);
      map.addOverlay(m2);
      map.addOverlay(m3);
      var lab1 = new BMap.Label("起点",{position:myP1});
      // 创建3个label
      var lab2 = new BMap.Label("途径点",{position:myP2});
      var lab3 = new BMap.Label("终点",{position:myP3});
      map.addOverlay(lab1);
      map.addOverlay(lab2);
      map.addOverlay(lab3);





      setTimeout(function(){
      map.setViewport([myP1,myP2,myP3]);
      // 调整到最佳视野
      },1000);
      });

  }

  function sleep(n) {

    var start = new Date().getTime();

    while(true)  if(new Date().getTime()-start > n) break;

  }

</script>

2 通过计算gps点获取,但是获取到的是直线距离上的所有点,不带拐弯,需要拐弯的话,需要使用拐外的点多次调用(java,jdk11)。此处需要调整变量值,dis是每隔多少米打一个点位,d是两点之间的距离,可以通过上方的print()方法获取,也可以百度查找两点之间距离的计算方法。d/dis就是你需要的点位数量,适当的调整dis值,就可以获得你想要的点位个数。

	double bx=120.653721,ax=120.617797,by=31.293565,ay=31.334048;
    var dis=0.5;
    var d = 5648.89;
    System.out.println("两点距离,保留两位小数:"+d);
    var n =  Math.ceil(d/dis);
    System.out.println("分割点位数量:"+n);
    var dx = dis*(bx - ax)/d ;
    var dy =  dis*(by-ay)/d;

    var i=1;
    for(;i<=n;i++){
      var xc = i*dx + ax;
      var yc = i*dy + ay;
      System.out.print(xc+","+yc+" ");
    }
如果想看效果,将上面的结果黏贴到下面的 display()的point变量中,然后运行html,点击"显示"按钮(因为数据量太大,所以方法中做了%10的处理,需要根据自己的数据量调整添加点的个数,因为添加的点太多的,地图会卡死)
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <title>驾车途经点</title>
   <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
  <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>
</head>
<body>
<p><input type='button' value='开始' onclick='run();' /></p>
<p><input type='button' value='输出' onclick='print();' /></p>
<p><input type='button' value='显示' onclick='disPlay();' /></p>

<div style="width:820px;height:500px;border:1px solid gray" id="container"></div>


<div style="width:820px;height:500px;border:1px solid gray" id="printf" name="printf"></div>

</body>
</html>
<script type="text/javascript">
  var map = new BMap.Map("container");
  map.centerAndZoom(new BMap.Point(116.404, 39.915), 13);
  map.addControl(new BMap.NavigationControl());               // 添加平移缩放控件
  map.addControl(new BMap.ScaleControl());                    // 添加比例尺控件
  map.addControl(new BMap.OverviewMapControl());              //添加缩略地图控件

  var myP1 = new BMap.Point(120.558952,31.380589);    //起点-苏州
  var myP2 = new BMap.Point(120.608323,31.326441);    //终点-苏州园区站
  var myP3 = new BMap.Point(120.65381,31.293426);    //终点-苏州北站

  var bx=120.653721,ax=120.617797,by=31.293565,ay=31.334048;
  var pointA = new BMap.Point(120.653721,31.293565);
  var pointB = new BMap.Point(120.617797,31.334048);
  // var pointA = new BMap.Point(ax,ay);  // 创建点坐标A--大渡口区
  // var pointB = new BMap.Point(bx,by);

  function disPlay() {

    var point=";

    var array=point.split(" ");

    alert("gps点个数:"+array.length)

    for (let i = 0; i <array.length ; i++) {


      if(i%10!=0)
        continue;

      var p=array[i];
      var x=p.split(",")[0];
      var y=p.split(",")[1];

      var new_point = new BMap.Point(x,y);
      var marker = new BMap.Marker(new_point);  // 创建标注
      map.addOverlay(marker);              // 将标注添加到地图中
      map.panTo(new_point);

      console.log("i="+i+";x="+x+";y="+y);




    }

    
  }
  


  function print(){

    var dis=1;
    var d = (map.getDistance(pointA,pointB)).toFixed(2);
    alert("两点距离,保留两位小数:"+d);
    var n =  Math.ceil(d/dis);
    alert("分割点位数量:"+n);
    var dx = dis*(bx - ax)/d ;
    var dy =  dis*(by-ay)/d;
    alert(dx);
    var xc = dx + ax;
    var yc = dy + ay;
    var i=1;
    for(;i<=n;i++){
      var xc = i*dx + ax;
      var yc = i*dy + ay;
      var new_point = new BMap.Point(xc,yc);
      var marker = new BMap.Marker(new_point);  // 创建标注
      map.addOverlay(marker);              // 将标注添加到地图中
      map.panTo(new_point);
      //document.getElementById("printf").insertAdjacentHTML('afterend',xc+","+yc+" ");
    }
    //document.getElementById("printf").insertAdjacentHTML('afterend',"-------总数:"+i+"---------");



  }





  window.run = function () {
    map.clearOverlays();                        //清除地图上所有的覆盖物
    var driving = new BMap.DrivingRoute(map);    //创建驾车实例
    driving.search(myP1, myP2);                 //第一个驾车搜索
    driving.search(myP2, myP3);                 //第二个驾车搜索
    driving.setSearchCompleteCallback(function () {
      var pts = driving.getResults().getPlan(0).getRoute(0).getPath();

      try {
        document.getElementById("printf").insertAdjacentHTML('afterend','<---------------开始调用-------------------->');

        var p=JSON.stringify(pts);

        document.getElementById("printf").insertAdjacentHTML('afterend',p);
        sleep(4000)
        document.getElementById("printf").insertAdjacentHTML('afterend','<----------------结束调用------------------->');

      }catch (e) {
        alert("pts 转 json 失败")
        document.getElementById("printf").insertAdjacentHTML('afterend','<---------------开始调用-------------------->');

        //var p=JSON.stringify(driving);

        document.getElementById("printf").insertAdjacentHTML('afterend',driving);
        sleep(4000)
        document.getElementById("printf").insertAdjacentHTML('afterend','<----------------结束调用------------------->');
      }

      //通过驾车实例,获得一系列点的数组
       var polyline = new BMap.Polyline(pts);
       map.addOverlay(polyline);
       var m1 = new BMap.Marker(myP1);
      // 创建3个marker
       var m2 = new BMap.Marker(myP2);
       var m3 = new BMap.Marker(myP3);

      map.addOverlay(m1);
      map.addOverlay(m2);
      map.addOverlay(m3);
      var lab1 = new BMap.Label("起点",{position:myP1});
      // 创建3个label
      var lab2 = new BMap.Label("途径点",{position:myP2});
      var lab3 = new BMap.Label("终点",{position:myP3});
      map.addOverlay(lab1);
      map.addOverlay(lab2);
      map.addOverlay(lab3);





      setTimeout(function(){
      map.setViewport([myP1,myP2,myP3]);
      // 调整到最佳视野
      },1000);
      });

  }

  function sleep(n) {

    var start = new Date().getTime();

    while(true)  if(new Date().getTime()-start > n) break;

  }

</script>

3、百度地图gps点位拾取系统

http://api.map.baidu.com/lbsapi/getpoint/index.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值