我最近开始研究地图,并想知道如何在我的MKMapView上实现OpenLayer(我相信openstreetmap正在显示)的切片。默认的sdk没有显示我想要做的足够的细节。我可以ping服务器的瓷砖,但我一直看到这样做的警告。所以我的两个问题是:1)如何从openlayer获取tile并将它们覆盖在我的mapview中2)有没有办法提前获取这些tile并将它们存储在我的应用程序中? 我只是试图绘制一个小区域(大约9平方英里)。任何建议表示赞赏
答案 0 :(得分:1)
您正在寻找的是一个MKTileOverlay,它覆盖了OpenSteetMap中的切片。
Matt Thompson在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平方英里的数据也会非常大。你可能有混合动力,并为你的应用程序提供一些数据,并直接下载更高的缩放级别。