我正在尝试创建一个jquery mobilephonegap应用程序,我想使用嵌入其中的传单 map 。目前,我正在做一个非常基本的概念验证,但是我运气不高。每次尝试加载 map 时, map 的.png均不会加载,并且控制台会告诉我其“禁止”。我认为我可能设置了错误的 map URL,但是CloudMade网站上的文档有些模糊。您能提供的任何帮助将不胜感激。
代码:
var map = new L.Map('map');
var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/MY_APP_KEY/997/256/{z}/{x}/{y}.png',
cloudmade = new L.TileLayer(cloudmadeUrl, {maxZoom: 18});
map.addLayer(cloudmade);
map.locateAndSetView(16);
map.on('locationfound', onLocationFound);
function onLocationFound(e) {
var radius = e.accuracy / 2;
var marker = new L.Marker(e.latlng);
map.addLayer(marker);
marker.bindPopup("You are within " + radius + " meters from this point").openPopup();
var circle = new L.Circle(e.latlng, radius);
map.addLayer(circle);
}
map.on('locationerror', onLocationError);
function onLocationError(e) {
alert(e.message);
}
当我尝试加载图像时,出现以下错误:GET http://a.tile.cloudmade.com/MY_APP_KEY/997/256/0/0/0.png 403(禁止访问)。显然,我要用从CloudMade获得的 key 替换MY_APP_KEY,但除此之外,我不确定其他地方。
先谢谢您的帮助。
最佳答案
提供Cloudmade API key 是强制性的,但还不够。您还必须提供一个 token ,您必须为每个用户和设备请求一个 token 。如Cloudmade Authorization API doc中所述,可以通过简单的POST检索 token :
POST http://auth.cloudmade.com/token/APIKEY?userid=UserID&deviceid=DeviceID
这将为您提供一个 token ,您必须将其附加到tile URL上才能在cloudmade服务器上进行身份验证:
var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/MY_APP_KEY/997/256/{z}/{x}/{y}.png?token=TOKEN'
但是,为了快速进行概念验证,您可以直接使用their own API key,它不需要身份验证 token :
var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/8ee2a50541944fb9bcedded5165f09d9/997/256/{z}/{x}/{y].png