我最近开始研究地图,想知道如何在我的 MKMapView 上实现来自 OpenLayer(我相信 openstreetmap 正在显示的)的图块。默认的 sdk 没有显示足够的细节来做我想做的事情。我可以 ping 服务器以获取磁贴,但我一直看到有关这样做的警告。所以我的两个问题是1)我如何从openlayer获取瓷砖并将它们覆盖在我的地图视图中2)有没有办法提前获取这些瓷砖并将它们存储在我的应用程序中?我只是想绘制一个小区域(价值大约 9 平方英里)。任何建议表示赞赏
问问题
1318 次
1 回答
1
您正在寻找的是一个 MKTileOverlay,它覆盖了来自 OpenSteetMap 的图块。
Mattt 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 平方英里的数据也会非常大。不过,您可能有一个混合体,并为您的应用程序提供一些数据,并且直接下载更高的缩放级别。
于 2014-06-12T13:50:10.137 回答