保存和;重新加载directionSservice.route响应

时间:2012-06-27 09:28:51

标签: javascript json google-maps-api-3

我有一个应用程序,它将地址作为用户的输入。对于给定的输入,我在<中找到地址列表(保存在数据库中)。 2 KMS距离。我有数据库中地址的lat& long信息。每个地址都有一个从&到达点。 Lat& Long适用于这些&分数也在数据库中。

现在我需要在谷歌地图中的点和点之间绘制线条。我用Javascript来做这件事。对于任何给定的地址,我将至少绘制50行。由于OVER_QUERY_LIMIT,我想将此响应作为字符串保存在数据库中,然后将其转换回对象并显示在谷歌地图中。

请注意,我始终只有已知地址列表。这些地址使用From& To lat& long保存在数据库中。所以我也可以写一个cronjob来检索来自fromlat& long& amp;像这样的拉特和长期。

var directionsDisplay<?php print $i; ?> = new google.maps.DirectionsRenderer(rendererOptions);  
directionsDisplay<?php print $i; ?>.setMap(map); 
var start<?php print $i; ?> = '<?php echo $address1; ?>'; 
var end<?php print $i; ?> = '<?php echo $address2; ?>'; 
var request<?php print $i; ?> = { 
    origin:start<?php print $i; ?>,  
    destination:end<?php print $i; ?>, 

    travelMode: google.maps.DirectionsTravelMode.DRIVING 

}; 

<?php if(isempty($routestr)) { ?> 
directionsService.route(request<?php print $i; ?>, function(response, status) { 
    if (status == google.maps.DirectionsStatus.OK) { 
        var routestr = JSON.stringify(response, null, 4); 
        //Saving routestr in database using ajax call
        directionsDisplay<?php print $i; ?>.setDirections(response);
    }
}
<?php } //end of $routestr check 
else { //convert $routestr into response and assign to setDirections method
  ?>
  //PHP $routestr is a JSON object automatically. so eval function will not work.
  //var response1 = eval('(' + <?php print $routestr; ?> + ')');

  var response1 = <?php echo $routestr; ?>; //This works.
  alert(response1.status); //displays OK. So I am assured that this is a JSON object now.
   directionsDisplay<?php print $i; ?>.setDirections(response1); //This still does not work. Map is blank

<?php    }//end of $routestr else check ?>

我在其他方面面临问题。 eval方法不能正确转换对象。因此当我调用setDirections(response1)时不起作用。

有人可以帮忙吗?我想将我的JSON字符串转换回DirectionsResult对象

我还检查了https://developers.google.com/maps/documentation/javascript/reference#DirectionsResult。这是一行“请注意,虽然这个结果是”JSON“,但它不是严格的JSON,因为它间接包含LatLng对象。”

我在html文件中测试了这段代码

var res = new google.maps.DirectionsResult(); //I receive js error This is not a class and cannot be instantiated. Don't understand how they send back this as response in route method call.
res1.status = "OK"; //Becoz of above issue, this will not work
alert(res1.status); //Becoz of above issue, this will not work

但是此警报消息永远不会执行。没有显示任何内容。不知道为什么。

伙计们不试试这个。这将无法解决。

目前,我已更改了我的代码&amp;实施超时。我读到某个地方,我们每秒可以向directionsService提出最多5个请求。如果我们在一秒钟内超过5个请求,将返回OVER_QUERY_LIMIT。

实施超时会减慢最终响应速度。但似乎没有别的办法。不确定将此服务作为业务api来解决这个问题。

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题。但在我的情况下,我需要绘制该路径并允许用户拖动路径(当我们发出路由请求时存在的相同属性)并更新BD中的lat lng。如果您只需要绘制已经拥有的这两点之间的线,您可以只请求一条新路线。如果您有Over_query_limit问题,可以保存response.routes [0] .overview_path中的LatLng,并使用简单的Polyline解析LatLng作为Path来绘制它。当然,这不会是一个新的路线请求。