如何使用Mapbox iOS SDK显示Mapbox项目中的地图?

时间:2015-10-20 04:16:05

标签: ios mapbox

我在https://www.mapbox.com/editor创建了一个项目(地图?),它给了我一个"地图ID"。经过一堆谷歌搜索和搜索后,我终于解决了(我认为?)你应该将这个地图ID嵌入到URL中并将其传递给-[MGLMapView initWithFrame:styleURL:]初始化方法。我尝试过以下方法:

NSURL *styleURL = [NSURL URLWithString:@"mapbox://my_username.abcdef123455"];
self.mapView = [[MGLMapView alloc] initWithFrame:self.view.bounds styleURL:styleURL];

但是我在调​​试控制台中得到以下内容:

  

[错误] {地图} [设置]:加载方式失败:HTTP状态代码401

我说错了吗?我是否需要在Mapbox管理界面中启用权限或其他内容?

更新1

我刚刚发现https://www.mapbox.com/ios-sdk/api/Classes/MGLMapView.html的在线文档说网址应采用mapbox://styles/<user>/<style>格式。当我尝试这个时,我在线程&#34; Map&#34;:

上遇到了以下崩溃
  

malloc: * mach_vm_map(size = 685248512)失败(错误代码= 3)
  *
错误:无法分配区域
  ***在malloc_error_break中设置断点以进行调试   libc ++ abi.dylib:以std :: bad_alloc类型的未捕获异常终止:std :: bad_alloc

这是堆栈跟踪的相关部分:

#8  0x32ea286a in operator new(unsigned long) ()
#9  0x32ea6546 in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long) ()
#10 0x32ea658e in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) ()
#11 0x00265390 in mbgl::util::mapbox::normalizeStyleURL(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) ()
#12 0x0022242e in mbgl::DefaultFileSource::request(mbgl::Resource const&, uv_loop_s*, std::__1::function<void (mbgl::Response const&)>) ()
#13 0x001ecf34 in mbgl::MapContext::setStyleURL(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) ()
#14 0x001ea85a in mbgl::util::RunLoop::Invoker<auto mbgl::util::Thread<mbgl::MapContext>::bind<void (mbgl::MapContext::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>(void (mbgl::MapContext::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&))::'lambda'(void (mbgl::MapContext::*&&)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)), std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::operator()() ()
#15 0x00268662 in mbgl::util::RunLoop::process() ()
#16 0x002ad15a in uv__async_event at /Users/kkaefer/Code/mason/libuv-0.10.28/mason_packages/.build/libuv-0.10.28/src/unix/async.c:80

3 个答案:

答案 0 :(得分:0)

这里的根本问题是使用the editor创建的栅格地图与GL styles不兼容。 new Mapbox Studio(目前处于私有测试阶段)是我们创建GL兼容地图的工具。

使用Mapbox iOS SDK加载GL样式的方式如下:

NSURL *styleURL = [NSURL URLWithString:@"mapbox://styles/mapbox/streets-v8"];    
self.mapView = [[MGLMapView alloc] initWithFrame:self.view.bounds styleURL:styleURL];

其中mapbox://styles/mapbox/streets-v8是遵循mapbox://styles/user/styleHash模式的默认样式。

(在任何情况下,格式不正确的样式网址都不应该崩溃并且we'll make that more robust。)

答案 1 :(得分:0)

我有同样的问题,但我创建了新的访问令牌并使用info.plist。现在工作正常

答案 2 :(得分:0)

订单不知何故很重要。确保将此参数放在info.plist“MGLMapboxAccessToken”中,并使用新生成的令牌并重建项目。它应该工作