天地图418优化
效果
优化前
22个request,418了11个,成功率50%
优化后
26个request,418了0个,成功率100%
优化手段
1.key的负载均衡
打开天地图控制台,多申请几个key(一个账号最多5个,所以我多搞了几个账号),然后利用随机函数让每次获取key时都能随机访问。
export const aks = [
"[key1]",
"[key2]",
"[key3]",
...
];
export const rand = (min = 0, max = 1) => (
Math.round(Math.random() * (max - min) + min)
)
const akProxy = new Proxy(aks, {
get(target, prop){
if (prop === 'ak') {
return target[rand(0, target.length - 1)]
}
return target[prop]
}
})
// 天地图 source
export const sourceUrlForMap = `http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${akProxy.ak}`;
2.偷别人的key
打开天地图的示例项目,点击右下角icon,选择自己喜欢的图层,在控制台的request面板中,抓取官方示例的key,补充到上一小节的数组aks中。具体参考:干货 | 密钥申请麻烦且有访问次数限制?教你如何简单快速地获取天地图API密钥。
同理你也可以用同样的办法抓其他地图项目的key为自己所用。
3.接入天地图官网的负载均衡
在天地图api中,有这么一段话
*天地图地图服务二级域名包括t0-t7,您可以随机选择使用,如http://t2.tianditu.gov.cn/vec_c/wmts?tk=您的密钥
所以我们运用第一节中的思路,对请求的域名也做负载均衡
export const servers = [...Array(8).keys()];
const serversProxy = new Proxy(servers, {
get(target, prop){
if (prop === 'server') {
return target[rand(1, target.length - 1)]
}
return target[prop]
}
})
export const sourceUrlForMap = `http://t${serversProxy.server}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=${akProxy.ak}`;