这是使用Static Maps API。
我有一个包含3个img标签的网页,每个标签都是对静态maps API的调用,(当然这不是真正的api密钥)。
除了变焦之外,3个标签是相同的,三幅图像分别为10,13和16。
API Key来自启用了Static maps API的项目,并且已配置并启用了计费。
我总共发出了60个请求(这是一个全新的开发项目,所以我刚刚开始)。
我所看到的是,有时会显示所有三张地图。在其他时间,一个(从三个中随机)地图失败并带有
403“Google Maps API服务器拒绝了您的请求。此API项目发现内部错误。”
因此,如果我刷新页面5次,即15次请求,我会得到大约4次失败和11次成功。
那么,为什么Google地图会随机拒绝使用此403的某些请求?
答案 0 :(得分:0)
您确定您的API密钥是否正确?
来自https://developers.google.com/maps/documentation/staticmaps/#Limits:
Google Static Maps API具有以下使用限制:
没有API密钥:
每小时每个IP地址1,000个静态地图请求。 每分钟每个IP地址50个静态地图请求。这意味着如果您有一个包含50个以上地图的单个页面,该页面将超出此限制。
可以按照应用程序中当前列出的费率,按应用程序购买其他图像请求。额外的配额是通过API控制台购买的,需要使用API密钥。
如果用户超出这些限制,服务器将返回HTTP 403状态并显示以下图像以指示已超出配额:
似乎每分钟50张地图可以解释你的随机403错误。
如果这不是问题,我会提交支持Google Geo的支持票,因为它被标记为“内部错误”。
答案 1 :(得分:-1)
因此,如果我刷新页面5次,即15次请求,我会得到大约4次失败和11次成功。
我认为您的请求会在短时间内超出限制。 我不确定你如何显示地图,但我建议你连续加载地图。
例如:将JavaScript与https://github.com/caolan/async
一起使用<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html,body {
height: 100%;
margin: 0;
padding: 0
}
</style>
<script type="text/javascript" src="async.js"></script>
<script type="text/javascript">
function loadImg(params, callback) {
var url = "http://maps.googleapis.com/maps/api/staticmap?" +
params + "&zoom=1&size=100x100" +
"&sensor=false&key={YOUR_KEY_IS_HERE}";
var img = new Image();
img.src = url;
img.onload = function() {
document.body.appendChild(img);
callback();
};
img.onerror = function() {
callback(url);
}
}
function loadMaps() {
var urlList = [
"markers=label:0|LosAngles",
"markers=label:1|NewYork",
"markers=label:2|SanFrancisco",
"markers=label:3|Frorida",
"markers=label:4|Arizona",
"markers=label:5|Ohaio",
"markers=label:6|Hawai",
"markers=label:7|Texus",
"markers=label:8|Seattle",
"markers=label:9|Florida",
"markers=label:A|kansas",
"markers=label:B|utah",
"markers=label:C|iowa",
"markers=label:D|oregon",
"markers=label:E|alaska",
"markers=label:F|Washington D.C"
];
async.eachSeries(urlList, loadImg, function(err) {
if (err) {
console.log("error", err);
} else {
console.log("all image are loaded");
}
});
}
</script>
</head>
<body onload="loadMaps()">
</body>
</html>