我有一个应用程序,它将地址作为用户的输入。对于给定的输入,我在<中找到地址列表(保存在数据库中)。 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来解决这个问题。
答案 0 :(得分:0)
我也遇到了这个问题。但在我的情况下,我需要绘制该路径并允许用户拖动路径(当我们发出路由请求时存在的相同属性)并更新BD中的lat lng。如果您只需要绘制已经拥有的这两点之间的线,您可以只请求一条新路线。如果您有Over_query_limit问题,可以保存response.routes [0] .overview_path中的LatLng,并使用简单的Polyline解析LatLng作为Path来绘制它。当然,这不会是一个新的路线请求。