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