2012-07-17 35 views
4

我正在尝试创建一个jQuery手机应用程序,并且我想使用嵌入在其中的传单地图。我现在正在做一个非常基本的概念验证,但我没有太多的运气。每次我尝试加载地图时,地图的.png都不加载,控制台告诉我它的禁止。我想我可能会设置错误的地图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获得的密钥替换了MY_APP_KEY,但除此之外,我不确定还有哪些地方可以转身。

在此先感谢您的帮助。

回答

1

看起来地理定位方法不起作用,因此它会尝试加载图像0,0,0,因为您尚未定义任何坐标。

你可以尝试设置一些默认选项(即)在您的顶线,像这样:

var options ={ 
    center: new L.LatLng(37.7, -122.2), 
    zoom: 10 
}; 

var map = new L.Map('map', options); 

这至少应该默认地图旧金山这样你就可以判断瓷砖是否加载正确。

的jsfiddle:http://jsfiddle.net/peBZp/

这可能是小叶具有与地理定位和PhoneGap的一个问题。您可以尝试按照以下文档:http://docs.phonegap.com/en/1.0.0/phonegap_geolocation_geolocation.md.html,只需使用该函数返回的lat/long设置选项变量,而不是使用传单的内置方法。

希望有所帮助。

+0

只是做了一个快速复制和粘贴(字面瞥了一眼这个代码)和SF的地图显得很好。 – hellatan 2013-07-25 12:45:12

5

提供Cloudmade API密钥是强制性的,但不够。您还必须提供您必须为每个用户和设备请求的令牌。

POST http://auth.cloudmade.com/token/APIKEY?userid=UserID&deviceid=DeviceID 

这会给你,你必须附加到瓷砖网址cloudmade服务器上进行身份验证令牌:

var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/MY_APP_KEY/997/256/{z}/{x}/{y}.png?token=TOKEN' 

对于作为Cloudmade Authorization API doc描述的令牌可以通过一个简单的POST检索概念的快速证明不过,你可以直接使用their own API key这并不需要身份验证令牌:

var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/8ee2a50541944fb9bcedded5165f09d9/997/256/{z}/{x}/{y].png 
+0

我遇到了同样的问题,你的答案有所帮助。我制作了一次性的POST请求,获得了令牌,并将其硬编码到我的应用程序中(www.twincitiesbikemap.com)。但是,我怎样才能做到这一点与jQuery?由于Access-Control-Allow-Origin(尽管我将页面设置为*),因此我无法获得$ .post的工作权限,并且我无法使用jsonp,因为它需要成为POST。这可以通过javascript/jQuery完成吗? – Ehryk 2014-03-10 08:46:09

+0

我认为你不应该在客户端检索令牌。您应该从您自己的服务器(使用PHP或任何您喜欢的语言)发出POST请求,然后将令牌传递给您的客户端应用程序。顺便说一下,拥有不同的令牌只有在您想监视不同用户或设备的API使用情况时才有用。如果你不需要(例如,当你的用户是匿名的),硬编码令牌就好了。 – 2014-03-10 13:33:20

+0

我使用的是ASP.NET托管,但仅用于提供网页 - 它们只是静态的.html文件。由于我不是'正式'使用任何服务器端代码,除了使用IIS作为Web服务器之外,我不得不写一些只是为了发布请求。有没有办法做到客户端,尽管它可能不应该这样做? – Ehryk 2014-03-10 17:34:34