私のアプリではオフラインマップを使用したいが、このマップではgpxファイルを使用してルートを作成する。私はそれを行うopenstreetmapを見つけましたが、いくつかのより良いサービスがありますか? (レベルカーブのベストソリューション) ありがとうIOS:オフラインマップを使用する
答えて
オフラインマップは、そこに多くのプロジェクトや例がないため、iOSでの経験が少し必要です。 しかし、Route-Meと呼ばれる1つのプロジェクトがあります。これはあなたに出発点を与えることができます。 Metro Valencia Offlineを開発してApp Storeに成功させました。 プロジェクトにRoute-Meを追加する方法については、small tutorialと書いてあります。
基本的には、任意のマップフィードを使用することができます(OpenStreetMapsは、それらの1つであり、これも使用しています)。何をする必要がありますすることです:マップタイルを
- ダウンロード(https://metacpan.org/pod/Geo::OSM::Tiles)
- のSQLiteデータベース(http://shikii.net/blog/downloads/map2sqlite-bin.zip)に入れて
- 修正ルートミーデータベースから供給されるタイルGPXは& Rをルーティング、ナビゲーション、地図レンダリングを追跡する(それはOpenStreetMapのに基づいているhttp://developer.skobbler.com/support#download、彼らは完全なオフライン機能を持って:skobblerさん/ Telenavを:代わりに、オープンストリートマップのウェブサイト
この例外について私に説明できますか?"SimpleMap [1020:907] ***キャッチされていない例外 'NSInternalInconsistencyException'のためアプリを終了しています、理由:[contents minZoom]が[tileSource minZoom]よりも1.5より小さい場合、グラフィックスとメモリに過度の課税が発生します" – CrazyDev
実際に私が完全に理解したことのないRoute-Meによって投げられたNSAssertです。私はそれをコメントし、何の問題もなかった。 NSAssertは 'setTileSource:' PSメソッドの中の 'RMMapContents.m'にあります。 'setMinZoom:'には別のものがありますが、最後のものをそのまま残しました。 –
うわふわ、今それは働く!おかげさま...私は他の質問がある場合私はここに書くことができますか? – CrazyDev
からのあなたもテストすることができますeruting)
Nutiteq Maps SDK:http://developer.nutiteq.com、iOSとAndroidのオフラインマップ、Xamarin IDE(C#)およびネイティブ言語(Java、ObjectiveC、Swift)をサポートしています。ルーティングやナビゲーション(Skobblerなど)はそれほど多くはありませんが、インタラクティブなレイヤー(マップの上にある点、線、ポリゴン)を持つ複雑なマップに焦点を当てています。 1つの利点は、OpenStreetMapだけでなく、SDK自身が提供する独自のベースマップソース(社内、サードパーティ)を使用できることです。
免責事項:私はそれを開発しています。
MapKitのデフォルトマップとMKTileOverlayのサブクラスを使用して、ダウンロードしたタイルを保存して、キャッシュされていないタイルをダウンロードせずに返すことができました。
1)の変更MapKitからデフォルトのマップのソースとMKTileOverlayのサブクラスを使用します(ここでは "オープンストリートマップ")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];
}
コメントを解除から
- (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)サブクラス "を使用していますsaveFileWithName "を実行し、シミュレータで実行します。 NSLog(fileName)を追加して、必要なすべてのタイルを取得する場所を知ることもできます。 (シミュレータキャッシュがユーザーにある/ YOU /ライブラリ/開発/ CoreSimulator /デバイス/ ... とライブラリが隠しディレクトリである)
あなたはただ単にどのように(あなたのアプリケーションのバンドルに置く必要があるすべてのキャッシュされた後、他の画像、あなたが箱のキャッシュされた地図から望むなら)。 そして、バンドルからタイルを得るためにあなたの
- (void)loadTileAtPath:(MKTileOverlayPath)path
result:(void (^)(NSData *data, NSError *error))result
を教えてください。
これで私のアプリをインストールしてwi-fiをオフにして、それらのマップを取得します。
- 1. iOSのオフラインマップ
- 2. ルーティング付きオフラインマップ - iOS
- 3. オフラインマップAPIの使用
- 4. マップボックスを使用したオフラインマップ
- 5. 全国(OSM)のiOSオフラインマップ
- 6. オフラインマップを使用したデスクトップアプリケーションの開発
- 7. Googleマップのオフラインマップ(キャッシュ)を使用するGoogle Maps Android API
- 8. uwpでOSMのオフラインマップを使用するには?
- 9. Sencha Touchのオフラインマップ
- 10. Mapbox SDKオフラインマップ
- 11. Androidアプリのオフラインマップ
- 12. マーカー付きオフラインマップ
- 13. オフラインマップ(リーフレットOSMを使用)をキャッシュする方法はありますか?
- 14. .mapファイルを使用したAndroidでのオフラインマップ
- 15. mbtilesデータベースを使用してウェブサイトのためのオフラインマップを作成するには?
- 16. オフラインマップを管理する方法
- 17. google-map-reactのオフラインマップ
- 18. Google Maps APIとオフラインマップ
- 19. ハイブリッドアプリのオフラインマップとルーティング
- 20. OsmDroid複数のオフラインマップをロード
- 21. オフラインマップとルーティングの作成
- 22. Androidでのジオフェンシングとオフラインマップ
- 23. 経度高度によるオフラインマップ?
- 24. Androidでルーティングを使用してオフラインマップを作成するにはどうすればよいですか?
- 25. オフラインマップの注釈リストをマップボックスに表示
- 26. オフラインマップの最短経路計算でグラフ理論を適用する
- 27. PythonをiOSプログラミング用に使用する
- 28. maps.meアプリケーションのようなオフラインマップを作成する
- 29. iOSの住所を使用する
- 30. GLKit(iOS 5)でGL_POINTSを使用する
http://www.mapbox.com? – Wain