iOS 7 中的 MKTileOverlay 与 mbtiles 数据库

Posted

技术标签:

【中文标题】iOS 7 中的 MKTileOverlay 与 mbtiles 数据库【英文标题】:MKTileOverlay in iOS 7 with mbtiles database 【发布时间】:2014-07-19 17:45:02 【问题描述】:

有没有一种方法可以直接使用 mbtiles 数据库和 MKTileOverlay,而无需使用 MapBox 或任何其他第三方框架?

现在,我将图块存储在文件夹结构中,我正在使用的代码如下:

NSString *tileDirectory = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Tiles"];
NSString *tileDirectoryURL = [NSURL fileURLWithPath:tileDirectory isDirectory:YES];
NSString *tileURL = [NSString stringWithFormat:@"%@Zz/y_x.png", tileDirectoryURL];
tileOverlay = [[MKTileOverlay alloc] initWithURLTemplate:tileURL];
[tileOverlay setGeometryFlipped:YES];
[mainMapView addOverlay:tileOverlay];

但现在我想要一个tiles.mbtiles sqlite 数据库,而不是文件夹中的文件。

请建议我该怎么做。如果我选择使用 sqlite 数据库,如何初始化 MKTileOverlay 对象。我将如何放置 x,y,z。

我浏览了 MKTileOverlay 的文档,发现:

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

可以使用,但我不明白如何使用它?如果有人可以请给ma一个简短的例子,那将非常有帮助。

【问题讨论】:

嗨,我有同样的问题,我不想使用 mapbox。请问有没有使用mbtiles的例子?就我而言,OSMMapKit 无法正常工作...谢谢! @Eusthace。我无法直接使用 mbtiles 数据库。我必须将 PNG 存储在包中并使用上面的代码引用它们才能渲染它们。但是,这几乎是几年前的事了。希望现在有可用的选项来做到这一点。我知道 android 可以使用 mbtile 数据库来渲染图块,而无需使用第三方库。此外,在上面的代码中,geometry flipped 属性必须设置为 NO 才能正常工作。 感谢您的帮助。是的,但就我而言,我不知道为什么我不能从 maptiler 开始工作。你有工作示例吗?还是谢谢你! @eusthace 你找到从数据库中显示图块的方法了吗? 【参考方案1】:

你可以看看这个项目是怎么做的……

https://github.com/t2wu/OSMMapKit

它似乎还没有完成,但它应该让你走上正确的道路。

【讨论】:

以上是关于iOS 7 中的 MKTileOverlay 与 mbtiles 数据库的主要内容,如果未能解决你的问题,请参考以下文章

MKTileOverlay 未定义

Swift 中的 MKTileoverlay 问题

iOS 13.2 MKTileOverlay 偶尔不会渲染

iOS:在地图上绘制 MKTileOverlay 导致 CPU 使用率和内存高。我找不到原因。?

带有自签名 SSL 证书的 iOS MKTileOverlay

iOS 中的离线地图