我正在使用 OpenLayers 6.11 这个小项目多年来成功访问 OpenStreetMap、CyclOSM、Bing 和 HERE Maps。
最近,一些用户报告说他们无法使用 HERE 地图。我尝试时它运行正常。然后我发现有问题的用户最近获得了 HERE 地图 API 密钥。
于是我获得了一个新的 API 密钥,而事实上,HERE Maps 不再在 OpenLayers 中工作。对于每个图块请求,HERE 都会返回 HTTP 429 Too Many Requests。切换回我的旧 API 密钥后,一切又恢复正常。
有人遇到过这种情况吗?是不是因为我使用的是旧版本的 OpenLayers(6.11)?
我使用端点
https://{1-4}.${ld.base}.maps.api.here.com/${ld.type}/2.1/maptile/newest/
官方 OpenLayers 示例也使用了它。ld.base 和 ld.type 动态选择地图类型。
我希望 OpenLayers 能够与 HERE Maps 一起工作,无论 API 密钥的生成时间如何。
每秒可能有 30 个图块请求的限制https://www.here.com/get-started/pricing/limited-plan-restrictions 全屏地图很容易打破这一限制,尤其是 256 像素图块和
preload
选项。端点也已过时,最好使用https://www.here.com/docs/bundle/raster-tile-api-developer-guide/page/topics/styles.html中的最新文档,并在 OpenLayers 中使用 512
tileSize
选项并平铺请求https://www.here.com/docs/bundle/raster-tile-api-developer-guide/page/topics/examples/example-size.html,这将减少 75% 的请求,并preload
从 OpenLayers 中删除该选项,以避免进一步不必要的平铺请求。根据@Mike 提供的信息,我能够再次完成这项工作。需要进行一些更改,以防其他人遇到同样的问题。
更改地图图块 URL
https://{1-4}.base.maps.ls.hereapi.com/$maptile/2.1/maptile/newest/$normal.day/{z}/{x}/{y}/256/png?apiKey=${YOUR_KEY}&lg=eng
必须改变 改为
https://maps.hereapi.com/v3/base/mc/{z}/{x}/{y}/png?size=512&apiKey=${YOUR_KEY}&style=explore.day&lang=en
style
参数提供lg
并lang
使用双字母代码 (en) 代替三字母代码 (eng)构造源时添加 TileSize 参数
所以 OpenLayers 知道我们使用 512 像素图块。
旧钥匙与新钥匙
用户多年前创建的 API 密钥仍可在新版 API 中使用。但最近获取的新密钥仅适用于最新版 API。
限制
新密钥的每日免费请求量已大幅减少。即使您只是在测试,现在也会很快遇到“请求过多”错误。在您的帐户中添加信用卡或 Paypal 将使每日免费请求量再次增加到可用水平。