Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从谷歌地图中获取拖拽的路线数据_Php_Mysql_Ajax_Json_Google Maps - Fatal编程技术网

Php 从谷歌地图中获取拖拽的路线数据

Php 从谷歌地图中获取拖拽的路线数据,php,mysql,ajax,json,google-maps,Php,Mysql,Ajax,Json,Google Maps,我正在做一个项目,我已经到了无法再继续下去的地步,需要一些认真的帮助。让我给你一些背景知识 我正在开发一项服务,让用户骑自行车去公园 来自多个起点的同一目的地协调他们的乘坐。 我们设计的工作流的一部分是让用户使用 谷歌地图服务;他们输入一个起始目的地,谷歌创建 一条它认为可行的路线,然后用户可以根据需要定制该路线 拖动点以满足其特定需要。我们有这个 界面在以下位置开发并正常工作: 我遇到的困难是如何编辑用户 路由出谷歌地图并保存在数据库中以备将来使用 参考资料。在我们的生活中,我们似乎有这样做

我正在做一个项目,我已经到了无法再继续下去的地步,需要一些认真的帮助。让我给你一些背景知识

我正在开发一项服务,让用户骑自行车去公园 来自多个起点的同一目的地协调他们的乘坐。 我们设计的工作流的一部分是让用户使用 谷歌地图服务;他们输入一个起始目的地,谷歌创建 一条它认为可行的路线,然后用户可以根据需要定制该路线 拖动点以满足其特定需要。我们有这个 界面在以下位置开发并正常工作:

我遇到的困难是如何编辑用户 路由出谷歌地图并保存在数据库中以备将来使用 参考资料。在我们的生活中,我们似乎有这样做的方法 Javascript,在这个文件中(第344-352行):

var newString=JSON.stringify(方向);
//设置放置放置放置方向响应对象字符串的区域
var directions_response_panel=document.getElementById(“directions_response”);
//将所有内容转储到方向\u响应\u面板中
方向_响应_panel.innerHTML=“”;
directionsDisplay = new google.maps.DirectionsRenderer({
    'map': map,
    'preserveViewport': true,
    'draggable': true
});
//向其中添加JSON字符串 方向_响应_panel.innerHTML=“+newString+”;
directionsDisplay = new google.maps.DirectionsRenderer({
    'map': map,
    'preserveViewport': true,
    'draggable': true
});
//运行ajax runAjax(方向);
我们可以将路由数据作为JSON文件导出,将其字符串化,然后发送 它通过AJAX传输到一个PHP文件,我们打算在其中处理和存储它 在MySQL中。然而,从谷歌地图返回的JSON出现了 畸形的;当PHP试图解码它时,它会发疯,我跑了 它通过在线验证器确认了它的错误。它是 在这一点上,我们完全感到困惑,不知道如何解决 向前走


有没有可能有人能帮上忙?我快要把头撞到墙上了。非常感谢您的任何回复。谢谢你的时间

我一直在做类似的事情,发现这真的很困难,但经过几个小时的努力,我设法从用户拖动的路线中获取所有航路点,并将其保存到数据库中

所以,我有一个字段,它包含所有以“;”分隔的航路点

你必须有这个:

var currentDirections;
var directionsDisplay;
var waypoints = [];
    function saveWaypoints()
    {
        waypoints = [];
        var waypts_field = document.getElementById('waypoints').value.split(';');
        for(var bo = 0; bo < waypts_field.length; bo++)
        {
            if(waypts_field[bo] == ' ' || waypts_field[bo] == '')
            {
                waypts_field.splice(bo,1);
                bo -= 1;
                continue;
            }

            waypoints.push({ location: waypts_field[bo], stopover: false });
        }
    }


    function getWaypoints()
{
    currentDirections = directionsDisplay.getDirections();
    var route = currentDirections.routes[0];
    totalLegs = route.legs.length;
    for (var i = 0; i < route.legs.length; i++) {
        var routeSegment = i+1;
        if(route.legs[i].via_waypoint[0] === undefined) continue;

        document.getElementById('waypoints').value = '';
        var via_waypoint_count = route.legs[i].via_waypoint.length;
        queue = 0;
        for(var bi = 0; bi < via_waypoint_count; bi++)
        {
            var count = 0;

            var lat;
            var lng;

            for (key in route.legs[i].via_waypoint[bi]['location'])
            {
                if(count > 1) break;
                if(count == 0)
                {
                    lat = route.legs[i].via_waypoint[bi]['location'][key];
                    count++;
                    continue;
                }
                lng = route.legs[i].via_waypoint[bi]['location'][key];

                count++;
            }
            reverseGeoCode(new google.maps.LatLng(lat,lng));
        }
    }
}

        function reverseGeoCode(latlng)
    {
        queue += 60;
        setTimeout(function(){
        geocoder.geocode({ 'latLng': latlng }, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            if (results[1]) {
              document.getElementById('waypoints').value += results[1].formatted_address + '; ';
            }
          } else {
            alert("Geocoder failed due to: " + status);
          }
        });
        }, queue * 10);
    }
在初始化函数中

这是我的JS的一部分:

request = {
  origin: "Hamburg"
  destination: "Berlin"
  waypoints: [{location: new google.maps.LatLng(53.88,11.51), stopover: false}],
  travelMode: google.maps.DirectionsTravelMode.DRIVING
}
var电流方向;
var方向显示;
var航路点=[];
函数saveWaypoints()
{
航路点=[];
var waypts_field=document.getElementById('waypoints').value.split(';');
对于(var bo=0;bo1)中断;
如果(计数=0)
{
lat=路线。航段[i]。通过_航路点[bi]['location'][key];
计数++;
继续;
}
液化天然气=路线。航段[i]。通过_航路点[bi][“位置”][键];
计数++;
}
反向编码(新的google.maps.LatLng(lat,lng));
}
}
}
功能反转代码(latlng)
{
队列+=60;
setTimeout(函数(){
geocoder.geocode({'latLng':latLng},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
如果(结果[1]){
document.getElementById('waypoints')。值+=结果[1]。格式化的_地址+';';
}
}否则{
警报(“地理编码器因“+状态”而失败);
}
});
},队列*10);
}
我很快就把这个从我的JS中删除了,所以如果没有意义,我会发布我所有的JS并一点一点地解释


谢谢

你应该做的是在你的JS中创建一个新的JSON,它没有格式错误,然后通过AJAX将它传递给PHP,这将解决格式错误的JSON问题

我遇到了同样的问题,我刚刚解决了它

存储整个DirectionResponse是完全不必要的。 DirectionService.route根据传递给它的哈希返回路由。 因此,存储该散列应该足以存储路由。
到那时,只有当有更好/更快的方法可用时,这可能会成为一条不同的路线

让我们看看请求哈希:

waypoints:
  [location: {
      Ha: 53.88, 
      Ia: 11.51
    },
    stopover: false
  ]
正如前面提到的,返回的数据类似于JSON,而不是JSON。 因此,当我们存储这些数据时,我们需要再次将JSON字符串转换为类似JSON的散列。 将使用JSON.stringify()存储在数据库中的航路点如下所示:

parse_route_request = function(request) {
  var waypoint, i, len;
  request = JSON.parse(request);
  for (i = 0, len = request.waypoints.length; i < len; i++) {
    waypoint = request.waypoints[_i];
    if (waypoint.location.Ha) {
      waypoint.location = new google.maps.LatLng(waypoint.location.Ha, waypoint.location.Ia);
    }
  }
  return request;
};
无论何时,只要将该数据传递给DirectionsService.route,您只需调用一个函数,该函数将使用LatLng对象覆盖每个位置:

parse_route_request=函数(请求){
var航路点,i,len;
request=JSON.parse(请求);
对于(i=0,len=request.waypoints.length;i