2014-06-11 40 views
0

我最近开始研究地图,想知道如何通过我的MKMapView实现从OpenLayer(这是我认为openstreetmap显示的)的贴图。默认的sdk没有显示足够的细节,我想要做什么。我可以ping的服务器的瓷砖,但我不断看到这样做的警告。所以我的两个问题是:1)我如何从外接程序获取tile并将它们覆盖在我的mapview中; 2)是否有办法提前获取这些切片并将它们存储在我的应用程序中? 我只是试图绘制一个小面积(大约9平方英里的价值)。任何建议将不胜感激我如何在我的mapview中使用OpenLayer(OpenStreetMap)瓷砖iOS 7

回答

1

您正在寻找的是一个MKTileOverlay覆盖来自OpenSteetMap瓷砖。

有一些这方面的示例代码由马特·汤普森对NSHipster:

static NSString * const template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png"; 

MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:template]; 
overlay.canReplaceMapContent = YES; 

[self.mapView addOverlay:overlay 
       level:MKOverlayLevelAboveLabels]; 

对于每一个需要的瓷砖,这样会从URL模板下载数据。

请参阅http://nshipster.com/mktileoverlay-mkmapsnapshotter-mkdirections/(此处摘自)以获取更多详细信息。

如果要管理自己瓦片缓存(例如,一些瓷砖与应用程序一起提供),你也可以继承

- (void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData *tileData, NSError *error))result 

,并直接提供的数据。 但是,如果需要所有缩放级别,我会想象即使是9平方英里的数据也会非常大。尽管你可能有一个混合,并提供一些数据与你的应用程序,并且更高的缩放级别直接下载。

+0

这是我目前有,但我不想继续从他们的服务器下载(不想被阻止)。混合动力车也不会太坏。我有一个问题,试图找出如果我想手动下载它们的网址的x和y是什么。有没有一种方法可以计算或在视觉上校准一个区域,并在特定的缩放下载区块? – CoderNinja

+0

定义非常大。 WMTS瓦片通常只有几千字节,而9平方英里是非常小的区域。 –

+0

您现在可能已经想通了,但此页面会告诉您如何下载OSM切片:http://shiki.me/blog/offline-maps-in-ios-using-openstreetmap-and-route-me/ – smacdonald

相关问题