从谷歌地图获取路线和地图上每2公里的点

2023-12-02

我知道 GPS 坐标我的起点和终点。现在我想知道这次旅行的行车路线。然后获取这条路线上每2公里的GPS坐标。我怎样才能用 php/javascript 做到这一点?

Thanks

添加的代码:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>creation of markers along a route - jsFiddle demo by doktormolle</title>
  <!--
  < script type='text/javascript' src='/js/lib/dummy.js'></script >

  <link rel="stylesheet" type="text/css" href="/css/normalize.css">


  <link rel="stylesheet" type="text/css" href="/css/result-light.css">
  -->



<script type='text/javascript'>//<![CDATA[ 

  /** 
    * creates markers along a google.maps.DirectionsRoute
    *     
    * @param route object google.maps.DirectionsRoute
    * @param dist  int    interval for milestones in meters
    * @param opts  object google.maps.MarkerOptions  
    * @return array Array populated with created google.maps.Marker-objects
    **/     

  function gMilestone(route,dist,opts)
  {

    var markers=[],
        geo=google.maps.geometry.spherical,
        path=route.overview_path,
        point=path[0],
        distance=0,
        leg,
        overflow,
        pos;

      for(var p=1;p<path.length;++p)
      { 
        leg=Math.round(geo.computeDistanceBetween(point,path[p]));
        d1=distance+0
        distance+=leg;        
        overflow=dist-(d1%dist);

        if(distance>=dist && leg>=overflow)
        {
          if(overflow && leg>=overflow)
          { 
            pos=geo.computeOffset(point,overflow,geo.computeHeading(point,path[p]));
            opts.position=pos;
            markers.push(new google.maps.Marker(opts));
            distance-=dist;
          }

          while(distance>=dist)
          { 
            pos=geo.computeOffset(point,dist+overflow,geo.computeHeading(point,path[p]));
            opts.position=pos;
            markers.push(new google.maps.Marker(opts));
            distance-=dist;
          }
        }
        point=path[p]
      }


    document.getElementById("pMsg").innerHTML = markers;
    //alert(markers);
    return markers;    

  }  
//]]>  

</script>


</head>
<body onload="ginit()">
  <script type="text/javascript" src="http://maps.google.com/maps/api/js?libraries=geometry&sensor=false"></script>
<div id="map_canvas" style="float:left;width:70%;height:400px;"></div>
<ul></ul>
<p id="pMsg"></p>
<script>
  var directions={};


  function ginit() 
  {
    var opts = {
      zoom: 15,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: new google.maps.LatLng(52.524268, 13.406290000000013)
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), opts);


    var routes=[
                { label:'Erkner',
                  request:{
                    origin: new google.maps.LatLng(52.524268, 13.406290000000013), 
                    destination: new google.maps.LatLng(52.4244119, 13.749783200000024), 
                    travelMode: google.maps.DirectionsTravelMode.DRIVING},
                  rendering:{marker:{icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png'},draggable:true}
                },
                /*{ label:'Potsdam',
                  request:{
                    origin: new google.maps.LatLng(52.524268, 13.406290000000013), 
                    destination: new google.maps.LatLng(52.3941887, 13.072690999999963), 
                    travelMode: google.maps.DirectionsTravelMode.DRIVING},
                  rendering:{marker:{icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png'},draggable:true}
                },
                { label:'Bernau',
                  request:{
                    origin: new google.maps.LatLng(52.524268, 13.406290000000013), 
                    destination: new google.maps.LatLng(52.683483, 13.587553999999955), 
                    travelMode: google.maps.DirectionsTravelMode.DRIVING},
                  rendering:{marker:{icon: 'http://labs.google.com/ridefinder/images/mm_20_yellow.png'},draggable:true}
                }*/
               ];
    var bounds=new google.maps.LatLngBounds();

    var dists=[5000,3000,1000];
    var selects=document.createElement('select');
    list=document.getElementsByTagName('ul')[0];
    for(var d=0;d<dists.length;++d)
    {
      selects.options[selects.options.length]=new Option(dists[d],dists[d],d==0,d==0);
    }

    for(var r=0;r<routes.length;++r)
    {
      bounds.extend(routes[r].request.destination);
      routes[r].rendering.routeId='r'+r+new Date().getTime();
      routes[r].rendering.dist=dists[0];
      var select=selects.cloneNode(true);
          select.setAttribute('name',routes[r].rendering.routeId);
          select.onchange=function(){directions[this.name].renderer.dist=this.value;setMarkers(this.name)};
      list.appendChild(document.createElement('li'));
      list.lastChild.appendChild(select);
      list.lastChild.appendChild(document.createTextNode(routes[r].label));

      requestRoute(routes[r],map);
    } 
    map.fitBounds(bounds) ;
  }


  function setMarkers(ID)
  {
    var direction=directions[ID],
        renderer=direction.renderer,
        dist=renderer.dist,
        marker=renderer.marker,
        map=renderer.getMap(),
        dirs=direction.renderer.getDirections();
        marker.map=map;

    for(var k in direction.sets)
    {

       var set=directions[ID].sets[k];
           set.visible=!!(k===dist);

       for(var m=0;m<set.length;++m)
       {

          set[m].setMap((set.visible)?map:null);
       } 
    }
    if(!direction.sets[dist])
    {
      if(dirs.routes.length)
      {
        var route=dirs.routes[0];
        var az=0;
        for(var i=0;i<route.legs.length;++i)
        {
          if(route.legs[i].distance)
          {
            az+=route.legs[i].distance.value;
          }

        }
       dist=Math.max(dist,Math.round(az/100));
       direction.sets[dist]=gMilestone(route,dist,marker);

      }
    }
  }

  function requestRoute(route,map) 
  {
    if(!window.gDirSVC)
    {
      window.gDirSVC = new google.maps.DirectionsService();
    }

    var renderer=new google.maps.DirectionsRenderer(route.rendering);
     var renderer=new google.maps.DirectionsRenderer(route.rendering);
        renderer.setMap(map);
        renderer.setOptions({preserveViewport:true})


    google.maps.event.addListener(renderer, 'directions_changed', function() {

          if(directions[this.routeId])
          {
           //remove markers
            for(var k in directions[this.routeId].sets)
            {              
                for(var m=0;m<directions[this.routeId].sets[k].length;++m)
                {
                  directions[this.routeId].sets[k][m].setMap(null);
                }
            }
          }

          directions[this.routeId]={renderer:this,sets:{}};
          setMarkers(this.routeId);

    });

    window.gDirSVC.route(route.request, function(response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        renderer.setDirections(response);
    }
    });
  }

</script>


</body>


</html>

我对其他人的回答:在注释和 console.log(markers) 中使用代码 - 有 GPS 坐标 - 请参阅代码 + 请参阅以米为单位的里程碑间隔。我没有使用 php,而是使用 javascript。

使用下面的代码进行工作

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>creation of markers along a route - jsFiddle demo by doktormolle</title>
  <!--
  < script type='text/javascript' src='/js/lib/dummy.js'></script >

  <link rel="stylesheet" type="text/css" href="/css/normalize.css">


  <link rel="stylesheet" type="text/css" href="/css/result-light.css">
  -->



<script type='text/javascript'>//<![CDATA[ 

  /** 
    * creates markers along a google.maps.DirectionsRoute
    *     
    * @param route object google.maps.DirectionsRoute
    * @param dist  int    interval for milestones in meters
    * @param opts  object google.maps.MarkerOptions  
    * @return array Array populated with created google.maps.Marker-objects
    **/     

  function gMilestone(route,dist,opts)
  {

    var markers=[],
        geo=google.maps.geometry.spherical,
        path=route.overview_path,
        point=path[0],
        distance=0,
        leg,
        overflow,
        pos;

      for(var p=1;p<path.length;++p)
      { 
        leg=Math.round(geo.computeDistanceBetween(point,path[p]));
        d1=distance+0
        distance+=leg;        
        overflow=dist-(d1%dist);

        if(distance>=dist && leg>=overflow)
        {
          if(overflow && leg>=overflow)
          { 
            pos=geo.computeOffset(point,overflow,geo.computeHeading(point,path[p]));
            opts.position=pos;
            markers.push(new google.maps.Marker(opts));
            distance-=dist;
          }

          while(distance>=dist)
          { 
            pos=geo.computeOffset(point,dist+overflow,geo.computeHeading(point,path[p]));
            opts.position=pos;
            markers.push(new google.maps.Marker(opts));
            distance-=dist;
          }
        }
        point=path[p]
      }


    document.getElementById("pMsg").innerHTML = markers;
    console.log(markers); //alert(markers);

    for (var key in markers) {
       var obj = markers[key];
       console.log(obj);
       console.log(obj['position']['k']);
       /*
       for (var prop in obj) {
          // important check that this is objects own property 
          // not from prototype prop inherited
          if(obj.hasOwnProperty(prop)){
            alert(prop + " = " + obj[prop]);
          }
       }*/
    }

    return markers;    

  }  
//]]>  

</script>


</head>
<body onload="ginit()">
  <script type="text/javascript" src="http://maps.google.com/maps/api/js?libraries=geometry&sensor=false"></script>
<div id="map_canvas" style="float:left;width:70%;height:400px;"></div>
<ul></ul>
<p id="pMsg"></p>
<script>
  var directions={};


  function ginit() 
  {
    var opts = {
      zoom: 15,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: new google.maps.LatLng(52.524268, 13.406290000000013)
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), opts);


    var routes=[
                { label:'Erkner',
                  request:{
                    origin: new google.maps.LatLng(52.524268, 13.406290000000013), 
                    destination: new google.maps.LatLng(52.4244119, 13.749783200000024), 
                    travelMode: google.maps.DirectionsTravelMode.DRIVING},
                  rendering:{marker:{icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png'},draggable:true}
                },
                /*{ label:'Potsdam',
                  request:{
                    origin: new google.maps.LatLng(52.524268, 13.406290000000013), 
                    destination: new google.maps.LatLng(52.3941887, 13.072690999999963), 
                    travelMode: google.maps.DirectionsTravelMode.DRIVING},
                  rendering:{marker:{icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png'},draggable:true}
                },
                { label:'Bernau',
                  request:{
                    origin: new google.maps.LatLng(52.524268, 13.406290000000013), 
                    destination: new google.maps.LatLng(52.683483, 13.587553999999955), 
                    travelMode: google.maps.DirectionsTravelMode.DRIVING},
                  rendering:{marker:{icon: 'http://labs.google.com/ridefinder/images/mm_20_yellow.png'},draggable:true}
                }*/
               ];
    var bounds=new google.maps.LatLngBounds();

    var dists=[10000,5000,3000,1000];
    var selects=document.createElement('select');
    list=document.getElementsByTagName('ul')[0];
    for(var d=0;d<dists.length;++d)
    {
      selects.options[selects.options.length]=new Option(dists[d],dists[d],d==0,d==0);
    }

    for(var r=0;r<routes.length;++r)
    {
      bounds.extend(routes[r].request.destination);
      routes[r].rendering.routeId='r'+r+new Date().getTime();
      routes[r].rendering.dist=dists[0];
      var select=selects.cloneNode(true);
          select.setAttribute('name',routes[r].rendering.routeId);
          select.onchange=function(){directions[this.name].renderer.dist=this.value;setMarkers(this.name)};
      list.appendChild(document.createElement('li'));
      list.lastChild.appendChild(select);
      list.lastChild.appendChild(document.createTextNode(routes[r].label));

      requestRoute(routes[r],map);
    } 
    map.fitBounds(bounds) ;
  }


  function setMarkers(ID)
  {
    var direction=directions[ID],
        renderer=direction.renderer,
        dist=renderer.dist,
        marker=renderer.marker,
        map=renderer.getMap(),
        dirs=direction.renderer.getDirections();
        marker.map=map;

    for(var k in direction.sets)
    {

       var set=directions[ID].sets[k];
           set.visible=!!(k===dist);

       for(var m=0;m<set.length;++m)
       {

          set[m].setMap((set.visible)?map:null);
       } 
    }
    if(!direction.sets[dist])
    {
      if(dirs.routes.length)
      {
        var route=dirs.routes[0];
        var az=0;
        for(var i=0;i<route.legs.length;++i)
        {
          if(route.legs[i].distance)
          {
            az+=route.legs[i].distance.value;
          }

        }
       dist=Math.max(dist,Math.round(az/100));
       direction.sets[dist]=gMilestone(route,dist,marker);

      }
    }
  }

  function requestRoute(route,map) 
  {
    if(!window.gDirSVC)
    {
      window.gDirSVC = new google.maps.DirectionsService();
    }

    var renderer=new google.maps.DirectionsRenderer(route.rendering);
     var renderer=new google.maps.DirectionsRenderer(route.rendering);
        renderer.setMap(map);
        renderer.setOptions({preserveViewport:true})


    google.maps.event.addListener(renderer, 'directions_changed', function() {

          if(directions[this.routeId])
          {
           //remove markers
            for(var k in directions[this.routeId].sets)
            {              
                for(var m=0;m<directions[this.routeId].sets[k].length;++m)
                {
                  directions[this.routeId].sets[k][m].setMap(null);
                }
            }
          }

          directions[this.routeId]={renderer:this,sets:{}};
          setMarkers(this.routeId);

    });

    window.gDirSVC.route(route.request, function(response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        renderer.setDirections(response);
    }
    });
  }

</script>


</body>


</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从谷歌地图获取路线和地图上每2公里的点 的相关文章

  • HTML 表单 POST 到 PHP 页面 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 好的 我创
  • 计算两个数字之间的差异

    我想计算两个给定数字之间的差异 例如 1 5 或 24 35 我必须将数组中的数字分开并写出它们之间的差异 如下所示 1 2 3 4 5 或 24 25 26 27 28 29 30 31 32 33 34 35 是否有任何 php 函数可
  • 将 jQuery 数组字符串转换为 PHP 数组

    首先 我得说我对 PHP 还很陌生 我正在尝试获取一个可以使用 foreach 的 PHP 对象 以下字符串通过 ajax 传递 我正在尝试转动以下字符串 menu title TEST1 href title TEST2 href QWE
  • 如何通过键查找最大和最小日期

    我有一个数组 a array 2010 05 03 gt 100 2010 05 04 gt 400 2008 05 01 gt 800 2011 01 01 gt 800 我如何找到最大值和最小值key date 例如 max gt 20
  • PHP/MySQL:检索邻接列表模型中的单个路径

    有没有什么有效的方法可以在不限制深度的情况下根据节点的ID检索邻接列表模型中的单个路径 就像如果我有一个名为 Banana 的节点的 ID 我可以获得以下路径 Food gt Fruits gt Banana 如果不可能的话也不是什么大问题
  • 如何在Web服务中传递URL

    我想将此 URL 作为网址中的值传递http localhost h2orn php verify php email emails hash hash但是 我只能在 符号之前传递 我想传递所有 URL 我正在使用java网络服务 代码在这
  • Symfony php.ini Debian

    我在 Oracle VM VirtualBox 上使用 Debian 7 amd64 LAMP 服务器 我正在尝试安装 Symfony 但遇到了一些小问题 当我运行命令时 php my project name app check php
  • 将 SQL 中的数据存储在数组中

    我正在尝试将 sql 数据库中的数据存储到数组中 目前我有这个 query mysql query SELECT FROM InspEmail WHERE Company LIKE company while row mysql fetch
  • 配置 .htaccess 以在 PHP 框架 (Silex) 上工作

    我的 Apache2 本地主机 linux 上有一个工作路径 http localhost lab silex web index php hello name 我想成为 http localhost lab silex hello nam
  • 一次将多个值插入MySQL [重复]

    这个问题在这里已经有答案了 谁能解释一下为什么这个 PHP MySQL 不起作用 基本上我需要从表单中一次插入大量行 因此会有多个名称字段 多个短 中 长字段等 我收到此错误 Notice Undefined variable Short1
  • Propel Query 中的动态表名称

    我想知道您是否可以使 propel 查询的表名称动态化 有点像变量 一个例子类似于 DynamicVar Query create 我让它在 ifs 中工作 就像下面的例子一样 但如果更动态地制作 可以删除相当多的行 这些表的设置都是相同的
  • 如何在 Laravel 5 中处理嵌套的 JSON 对象请求?

    我们在 Laravel 5 和 AngularJs Ionic 中运行此 Web 服务来处理 Web 当我们将请求从 Web 客户端 发送到 Web 服务 后端 时 我们传递了嵌套的 JSON 对象 我们在读取服务器端父对象下的所有子对象时
  • URL 重写帮助

    RewriteEngine on RewriteCond REQUEST URI index php RewriteRule index php q 1 L 这应该将任何 url 重写为 index php q url 并且它可以工作 反正
  • cURL '格式错误的网址'

    This url 在浏览器中工作得很好 但 cURL 返回错误 3 格式错误的 url 关于解决方法有什么想法吗 EDIT 卷曲代码 function get web page url options array CURLOPT RETUR
  • 如何在 joomla 模块中通过 javascript 发送输入文件类型

    我想将带有 javascript 的文件发送到 php 文件 我的 php 文件中有这个表单
  • 在 MySQL 中搜索多个单词

    我使用 HTML 表单来允许用户查找数据库表中的条目
  • 使 div 的大小与其内部图像的大小相同

    我有一个带有以下代码的div HTML div img src img logo png div CSS div imgContainer width 250px height 250px padding 13px 问题是用户可以编辑图像大
  • 无法在 Centos 上安装 php-mysqli 扩展

    我正在尝试将 mysqli 扩展安装到 php yum install php mysqli 我收到下一个错误 Transaction Check Error file usr share mysql charsets Index xml
  • 如何在node.js中找到两个地理点之间的距离?

    如何使用 node js 查找两个地理点 经度和经度的集合 之间的距离 我有使用谷歌地图距离矩阵服务的客户端 JavaScript 代码 我想在服务器端javascript中做同样的事情 在node js router js或datamod
  • 处理查询字符串参数时 Codeigniter 缓存问题

    问候 我正在编写一个 CI Web 应用程序 它实现标准文件缓存功能 如下所示 this gt output gt cache n 我使用了段和查询字符串参数的组合 因此似乎遇到了问题 我在用例和输出类代码中看到的是 缓存仅基于段 像这样

随机推荐

  • 如何在 Nginx 代理服务器中启用 CORS?

    正如我的标题 这是位于conf d api server conf 中的配置文件 server listen 80 server name api localhost location add header Access Control A
  • TextArea MaxLength - 支持还是不支持?

    我正准备添加一个 jQuery 插件来支持文本区域的 maxlength 并注意到 MaxLength 属性在 Safari Chrome 和 Firefox 上本机工作 这到底是HTML5的功劳还是 这是否意味着文本区域的 maxleng
  • 具有多索引的 Pandas 数据透视表小计

    我正在尝试创建一个带有小计 Excel 风格的简单数据透视表 但是我找不到使用 Pandas 的方法 我已经尝试了韦斯在另一个与小计相关的问题中建议的解决方案 但这并没有给出预期的结果 下面是重现它的步骤 创建样本数据 sample dat
  • pdf 小丑 - 不突出显示特定搜索关键字

    我正在使用 pdf clown 和 pdfclown 0 2 0 HEAD jar 我编写了下面的代码来突出显示中文 pdf 文件中的关键字搜索 相同的代码在英文 pdf 文件中工作正常 import java awt Color impo
  • 使用 jQuery 的轮播

    我知道那里有可用的插件 但我正在尝试制作一个自己的插件 但在此之前我试图理解将其制作为无限 圆形轮播的概念 这是我的到目前为止 http jsfiddle net hbk35 KPKyz 3 HTML div ul li div 0 div
  • Div "contenteditable" :获取和删除插入符号之前的单词

    谢谢这个问题和 Tim Down 发布的答案 我做了一个函数来获取 contenteditable div 中插入符号之前的单词 这是一个fiddle 这是函数 function getWordPrecedingCaret containe
  • 从 powershell 为 azure 函数创建函数键

    是否有可能为刚刚从 powershell 脚本创建的 azure 函数创建一个函数键 我有一个发布管道来为 azure 函数创建整个环境 它工作正常 但我缺少的一部分是该函数的自定义函数键 我不想使用默认密钥 我可以在门户中创建新密钥 但我
  • 使用 lambda 函数对 filter() 进行复杂性分析

    给定两个列表 list1 and list2 list3 filter lambda x x in list1 list2 这将返回两个列表的交集 我怎样才能找到这个算法的复杂度 我发现时间复杂度x in list1 is O n 其中 n
  • 理解/mySQL 又名欺骗 Django 中的外键关系

    所以我继承了一些django mySQL 表非常简单 其中父级不是 FK 关系 只是 父级 id CREATE TABLE Child id int 10 unsigned NOT NULL AUTO INCREMENT parent in
  • ASP.NET 中带有和不带有委托的事件

    在一些 ASP NET 示例中 我看到事件与委托一起使用像这样有时没有他们像这样 请解释 所有事件都是委托类型 它们都继承自EventHandler继承自MulticastDelegate其间断自Delegate 有时 或者我宁愿说大多数时
  • 检查 URL 是否转到包含文本“404”的页面

    我有一个 bash 脚本来检查 URL 列表的 HTTP 状态代码 但我意识到有些虽然看起来是 200 但实际上显示包含 错误 404 的页面 我该如何检查呢 这是我当前的脚本 bin bash while read LINE do cur
  • Javascript-firefox:如何从本地 png 文件设置自定义光标?

    如何从本地图像文件为当前页面设置自定义光标 基本上我需要使用 javascript 以编程方式更改为不同的光标 但光标本地存储在我的硬盘驱动器上 你不能 但见下文 因为file 不能从其他协议访问或引用 通过 JavaScript 包含光标
  • 使用 预加载 JSON 文件

    我正在使用 Angular 5 应用程序 并且正在加载相当大的 JSON 文件 问题是加载main需要很长时间 js捆绑 初始化它 引导 Angular 应用程序 稍后获取该 JSON 文件 如果我可以在 Angular 应用程序准备就绪时
  • 如何通过php脚本发送邮件?

    我如何通过php脚本发送邮件 我正在尝试做这样的事情 for k 0 k lt x gt length 1 k for l 0 l lt j 1 l if y gt item k gt nodeValue JobNoArr l Accept
  • c++中的std::string有编码格式吗

    我想找到关于std string的默认编码格式 我想找出编码格式 但我不知道 c 中的std string有编码格式吗 简单的答案 std string定义为std basic string
  • 在 ActionBarActivity 中设置底部的 ActionBar Tab

    你好 我是 Android 菜鸟 我在用appcompat支持库添加选项卡ActionBarActivity 我已经编写了要添加的代码 但选项卡显示在顶部 请在屏幕截图中看到它 我想设置这些Tabs这将出现在底部 知道为什么会这样吗 pri
  • 递归匿名函数 Matlab

    我知道这不是匿名函数的用途 但就像一个谜题一样 我尝试通过匿名函数创建递归函数 递归函数的原型显然就是阶乘函数 问题是很难区分大小写within匿名函数 到目前为止我所做的事情如下 f cn n f eval if n gt 1 f cn
  • VSCode |新窗口选择语言

    我错误地按下了 不要再显示这个 我怎样才能让 vscode 再次显示该选项 有一个设置可以启用 禁用该消息 Workbench gt Editor gt Untitled Hint 通过选择 不再显示 您禁用了该设置 将其设置为hidden
  • C++ 可变参数宏:如何检索参数值

    类中有很多实现类似的方法 只是方法的名称和参数列表不同 void function1 int a bool b mMember gt function1 a b void function2 double a string b mMembe
  • 从谷歌地图获取路线和地图上每2公里的点

    我知道 GPS 坐标我的起点和终点 现在我想知道这次旅行的行车路线 然后获取这条路线上每2公里的GPS坐标 我怎样才能用 php javascript 做到这一点 Thanks 添加的代码