我想使用離線地圖,並使用此地圖使用gpx文件有一個路線。我發現openstreetmap來做到這一點,但有沒有更好的服務? (最好的解決方案與水平曲線) 謝謝IOS:在我的應用程序中使用離線地圖
回答
離線地圖需要iOS的一些經驗,因爲沒有太多的項目和例子。 但是,您有一個名爲Route-Me的項目,可以爲您提供一個起點。 我們用它來開發Metro Valencia Offline,它成功地將它發送到App Store。 我寫了一個small tutorial關於如何將Route-Me添加到您的項目中。
基本上你可以使用任何地圖飼料,你可能想要的(OpenStreetMaps是其中之一,也是我們使用的)。什麼你需要做的是:
- 下載的地圖圖塊(https://metacpan.org/pod/Geo::OSM::Tiles)
- 把它們放入一個SQLite數據庫(http://shikii.net/blog/downloads/map2sqlite-bin.zip)
- 修改路線,我要的瓷磚從數據庫反饋而不是從開放街道地圖網站
你能解釋我這個例外嗎? 「SimpleMap [1020:907] ***因未捕獲異常'NSInternalInconsistencyException'而終止應用程序,原因是:如果[內容minZoom]小於[tileSource minZoom]''''' – CrazyDev
',則圖形和內存過度納稅實際上是我從未完全理解的Route-Me拋出的NSAssert。我評論說,從來沒有任何問題。 NSAssert可以在'setTileSource:'PS方法內的'RMMapContents.m'中找到。 'setMinZoom:'還有另外一個:'但是我保留原來的最後一個。 –
哇太棒了,現在它的工作!謝謝...如果我有其他問題,我可以在這裏寫信嗎? – CrazyDev
還可以測試:skobbler的/泰爲:http://developer.skobbler.com/support#download它是基於OpenStreetMap的,他們得到了完整的離線功能(GPX軌跡導航,地圖繪製,路由& [R注意)
還有Nutiteq Maps SDK:http://developer.nutiteq.com,適用於iOS和Android的離線地圖,支持Xamarin IDE(C#)和本地語言(Java,ObjectiveC,Swift)。它不是那麼多的路由和導航(如Skobbler),而是更多地集中於具有交互式圖層(地圖頂部的點,線和多邊形)的複雜地圖。一個好處是你可以使用你自己的底圖資源(內部,第三方),而不僅僅是OpenStreetMap SDK本身提供的。
聲明:我是開發者。
我使用MapKit的默認地圖和MKTileOverlay的一個子類來保存已下載的圖塊並返回已經緩存的圖塊而不下載它們。
1)從MapKit默認地圖更改源和使用MKTileOverlay的子類(用於 「開放街道地圖」 在這裏)
- (void)viewDidLoad{
[super viewDidLoad];
static NSString * const template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
VHTileOverlay *overlay = [[VHTileOverlay alloc] initWithURLTemplate:template];
overlay.canReplaceMapContent = YES;
[self.mapView addOverlay:overlay level:MKOverlayLevelAboveLabels];
}
2)從MKTileOverlay
@interface VHTileOverlay() // MKTileOverlay subclass
@property (nonatomic, strong) NSOperationQueue *operationQueue;
@end
@implementation VHTileOverlay
-(instancetype)initWithURLTemplate:(NSString *)URLTemplate{
self = [super initWithURLTemplate:URLTemplate];
if(self){
self.directoryPath = cachePath;
self.operationQueue = [NSOperationQueue new];
}
return self;
}
-(NSURL *)URLForTilePath:(MKTileOverlayPath)path {
return [NSURL URLWithString:[NSString stringWithFormat:@"http://tile.openstreetmap.org/%ld/%ld/%ld.png", (long)path.z, (long)path.x, (long)path.y]];
}
-(void)loadTileAtPath:(MKTileOverlayPath)path
result:(void (^)(NSData *data, NSError *error))result
{
if (!result) {
return;
}
NSString *pathToFilfe = [[self URLForTilePath:path] absoluteString];
pathToFilfe = [pathToFilfe stringByReplacingOccurrencesOfString:@"/" withString:@"|"];
// @"/" - those are not approriate for file's url...
NSData *cachedData = [self loadFileWithName:pathToFilfe];
if (cachedData) {
result(cachedData, nil);
} else {
NSURLRequest *request = [NSURLRequest requestWithURL:[self URLForTilePath:path]];
__block VHTileOverlay *weakSelf = self;
[NSURLConnection sendAsynchronousRequest:request
queue:self.operationQueue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSLog(@"%@",[weakSelf URLForTilePath:path]);
if(data){
[self saveFileWithName:[[weakSelf URLForTilePath:path] absoluteString] imageData:data];
}
result(data, connectionError);
}];
}
}
-(NSString *)pathToImageWithName:(NSString *)fileName
{
NSString *imageFilePath = [[OfflineMapCache sharedObject].cachePath stringByAppendingPathComponent:fileName];
return imageFilePath;
}
- (NSData *)loadFileWithName:(NSString *)fileName
{
NSString *imagePath = [self pathToImageWithName:fileName];
NSData *data = [[NSData alloc] initWithContentsOfFile:imagePath];
return data;
}
- (void)saveFileWithName:(NSString *)fileName imageData:(NSData *)imageData
{
// fileName = [fileName stringByReplacingOccurrencesOfString:@"/" withString:@"|"];
// NSString *imagePath = [self pathToImageWithName:fileName];
// [imageData writeToFile:imagePath atomically:YES];
}
取消註釋子「 saveFileWithName「並在模擬器上運行它。你也可以添加NSLog(fileName)來知道從哪裏獲取所需的所有圖塊。 (模擬器緩存中的用戶/你/庫/開發商/ CoreSimulator /設備/ ... 和圖書館是一個隱藏目錄)
後,您緩存,你只需要把你的應用程序的包都(就像任何一個其他圖像,如果你想從盒子緩存的地圖)。 並告訴你從包
- (void)loadTileAtPath:(MKTileOverlayPath)path
result:(void (^)(NSData *data, NSError *error))result
得到瓷磚。
所以,現在我可以安裝我的應用程序,關閉Wi-Fi,我會得到這些地圖。
- 1. Iphone應用程序的離線地圖
- 2. Android:在應用程序中使用哪些離線地圖
- 3. 在應用程序中離線使用谷歌地圖
- 4. 如何在我的應用程序中使用離線地圖谷歌
- 5. 我可以在我的ios應用程序中離線使用bing map api嗎?
- 6. 將離線地圖嵌入IOS應用程序
- 7. 谷歌地圖iOS版離線應用
- 8. 在我的應用程序使用開放街道地圖的離線
- 9. 在移動應用程序中使用地圖API作爲離線程序?
- 10. 使phonegap應用程序中的離線傳單地圖?
- 11. iOS應用程序在使用APN離線時的Sinch調用
- 12. 使用離線地圖的應用程序開發
- 13. 應用程序如何使用Android 4+的Google離線地圖?
- 14. 使用離線地圖進行桌面應用程序開發
- 15. iOS和基本離線應用程序
- 16. 在LWUIT中創建離線地圖應用程序
- 17. 如何使用OSM離線地圖在C#中的應用程序?
- 18. 從我的應用程序在iOS中顯示Iphone的本地地圖應用程序中的地圖6
- 19. 離線緩存和本地存儲的iOS Web應用程序
- 20. 在Android應用中離線Google地圖
- 21. 如何在Android應用程序中離線使圖像可用?
- 22. Android應用程序中的離線地圖
- 23. 桌面應用程序中的離線ovi地圖
- 24. 在我的iOS應用程序中使用地圖共享我的位置?
- 25. 在asp.net中的離線應用程序
- 26. 在osmDroid應用程序中下載OSM地圖數據以供離線使用
- 27. 如何使Android應用程序具有離線地圖
- 28. RestKit iOS應用程序的在線和離線支持
- 29. 在我的離子應用程序中使用谷歌地圖API的麻煩
- 30. 使用sqlite離子應用程序離線保存圖像
http://www.mapbox.com? – Wain