将拖动的路线数据从Google地图中删除

mcl*_*dm3 8 php mysql ajax json google-maps

我正在开展一个项目,我无法继续前进,需要一些认真的帮助.我来给你一些背景知识.

我正在开发一项服务,让用户从多个起点骑自行车到同一目的地协调他们的游乐设施.我们设计的部分工作流程让用户使用Google地图服务构建地图; 他们进入起始目的地,谷歌创建一个它认为可行的路线,然后用户可以通过拖动点来定制该路线以满足他们的特定需求.我们开发了这个界面并且在以下方面运行良好:

http://ridestreaming.com/google_maps/

在我无法通行的墙上,如何将用户编辑的路线从Google地图中删除并保存在数据库中以供将来参考.看起来我们有一个方法可以在我们的Javascript中执行此操作,在此文件中(第344-352行):

http://ridestreaming.com/google_maps/workflow.js

    var newString = JSON.stringify(directions);
    //set up area to place drop directionsResponse object string
    var directions_response_panel = document.getElementById("directions_response");
    //dump any contents in directions_response_panel
    directions_response_panel.innerHTML = "";
    //add JSON string to it 
    directions_response_panel.innerHTML = "<pre>" + newString + "</pre>";
    //run the ajax
    runAjax(directions);
Run Code Online (Sandbox Code Playgroud)

我们可以将路径数据作为JSON文件获取,将其串行化,然后通过AJAX将其发送到PHP文件,我们打算将其处理并存储在MySQL中.但是,从Google地图返回的JSON似乎格式不正确; 当PHP尝试解码它时,它吓坏了,我通过在线验证器运行它,证实了它的畸形.正是在这一点上,我们完全感到困惑,不知道如何前进.

这个人有没有机会帮忙解决这个问题?我正把头靠在墙上.任何回应都非常感谢.谢谢你的时间!

cod*_*nja 2

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

所以,我有一个字段保存所有用“;”分隔的航路点。

你必须有这个:

directionsDisplay = new google.maps.DirectionsRenderer({
    'map': map,
    'preserveViewport': true,
    'draggable': true
});
Run Code Online (Sandbox Code Playgroud)

在你的初始化函数中

这是我的 JS 的一部分:

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);
    }
Run Code Online (Sandbox Code Playgroud)

我很快就把它从我的 JS 中拉下来,所以如果它没有意义,我会发布我所有的 JS 并一点一点地解释它。

谢谢