标签: google-elevation-api

拆分过大的路径时,Google Maps Elevation Service响应不准确

这是一个有一定程度细节的问题,所以让我首先解释一下情况,然后我的实现和最后的问题让你最了解.

截至4月4日,已添加更新,问题范围缩小为一个待处理问题,请参阅此问题的底部以获取最新信息.

TLDR;

我有一条很长的路线从谷歌地图方向API返回,并希望该路线的高程图表.太糟糕了它不起作用,因为它是通过GET请求的,并且URL最大长度是超过2.048个字符.我分开了请求; 使用Promises保证正确的处理顺序; 但是,对于完整路线,Evelation数据并不总是完整的,并不总是按照正确的顺序显示,并不总是遵循给定的路径,并且有时会跨越几公里的高程间隔.

介绍;

尝试为Google Maps DirectionsService响应创建高程图我遇到了路线太长的问题(这似乎与距离无关,而不是每个overview_path的LatLng数量).这是由于通过请求ElevationService GET并且URL的最大长度为2048个字符的事实引起的.这里也描述了这个问题.

实施;

我想我会比谷歌更聪明(不是真的,但至少试图找到一种方法来解决它),分裂由为DirectionsService(返回的路径overview_path属性)为批次,连接结果(elevations通过ElevationService方法返回getElevationsAlongPath) .

  • 为了获得最佳细节,我查询ElevationService每批512个样本;
  • 并且因为ElevationService在路径的长度上传播样本,我设置了LatLng每批的最大数量,并检查处理完整路径所需的批次数(totalBatches = overview_path.length / maxBatchSize);
  • 最后为我的路线得到均匀的分布,试图获得完整路线的相同水平的细节(batchSize = Math.ceil(overview_path.length / totalBatches)).

当ElevationService异步工作时,我确保在其他SO用户的帮助下,首先使用setTimout并使用Promises,以正确的顺序处理所有请求.

我的代码

var maxBatchSize = 200;
var currentBatch = 0;
var promise = Promise.resolve();
var totalElevationBatches = Math.ceil(directions.routes[0].overview_path.length / maxBatchSize);
var batchSize =  Math.ceil(directions.routes[0].overview_path.length / totalElevationBatches);

while(currentBatch < totalElevationBatches) {
    promise = addToChain(promise, currentBatch, batchSize);
    currentBatch++;
}

promise.then(function() {
    drawRouteElevationChart(); …
Run Code Online (Sandbox Code Playgroud)

javascript batch-processing google-maps-api-3 map-directions google-elevation-api

8
推荐指数
1
解决办法
958
查看次数

对于超过2个请求,使用Google Elevation Service会出现"OVER_QUERY_LIMIT"错误

前提

我正在使用Google Elevation Service来获取路径上所有节点的高程,由用户绘制到Leaflet地图上.这允许我生成高程图.目前,如果我发出超过2个请求(每个请求限制512个位置),我总是会遇到一个请求OVER_QUERY_LIMIT.

使用政策

  • 每天2,500个免费请求,以客户端和服务器端查询的总和计算; 使计费能够获得更高的每日配额,每次额外收费为0.50美元/ 1000美元,每天最多100,000个请求.
  • 每个请求512个位置.
  • 每秒50个请求*,计算为客户端和服务器端查询的总和.

来自Google Elevation服务网站

我知道我每天都没有达到2500个请求(可以在开发者控制台中看到已经制作了多少个请求).我也知道每个请求肯定有512个位置,这使得唯一的配额是每秒50个请求.

方法

为了处理大量节点,我正在执行以下操作:

  1. 输入要运行的节点列表
  2. 从列表中获取第一个块(512个位置)
  3. 使用该块进行API调用
  4. 将返回的高程附加到数组
  5. 等一下
  6. 循环从2到5直到列表耗尽

行动准则:Codepen

如果我在每个请求(比如5秒)之间进行大量的等待时间,则请求被正常发送,但从我所知道的,我应该能够每秒发送50个请求 - 所以10,000个节点的列表应该需要20个请求,理论上甚至不需要等待 - 但即使等待它击中错误.

javascript google-elevation-api

8
推荐指数
1
解决办法
539
查看次数

使用 Elevation API 从 Google 地图地址获取海拔高度/标高

我正在尝试在 PHP 中回显地址的高度。我正在使用 Google Elevation API -链接

我已经有了纬度和经度。以下链接:

https://maps.googleapis.com/maps/api/elevation/json?locations=40.7143528,-74.0059731&key=myapikey

将产生以下 json 格式的结果:

{ "results" : [ { "elevation" : 9.774918556213379, "location" : { "lat" : 40.7143528, "lng" : -74.00597310000001 }, "resolution" : 19.08790397644043 } ], "status" : "OK" }

我怎样才能回显海拔高度?就像是<?php echo 'elevation'; ?>

谢谢

json google-maps google-elevation-api

2
推荐指数
1
解决办法
3847
查看次数