3 votes

Utilisation d'une base de données hors ligne dans Route-Me

J'essaie d'utiliser une base de données MBTiles hors ligne en utilisant la fonction Route-Me . Pour ce faire, j'utilise Landez qui dépend à son tour de MBUtil .

Pour l'instant, tout ce que j'obtiens, c'est un écran gris avec les broches à leur emplacement correct. Voici ce qui est imprimé sur la console :

initializing memory cache <RMMemoryCache: 0x4e42e50> with capacity 32
Opening database at /Users/chrislong/Library/Application Support/iPhone Simulator/4.3.2/Applications/E53BC885-1B02-4B06-B45B-408EB9A147DE/Documents/MapOpenStreetMap.sqlite
Map contents initialised. view: MapView at 0,0-320,411 tileSource <RMCachedTileSource: 0x4e428b0> renderer <RMCoreAnimationRenderer: 0x4e13dc0>
initializing memory cache <RMMemoryCache: 0x5929930> with capacity 32
Opening database at /Users/chrislong/Library/Application Support/iPhone Simulator/4.3.2/Applications/E53BC885-1B02-4B06-B45B-408EB9A147DE/Documents/MapMBTilestiles.mbtiles.sqlite
Warning: I could not find the column named 'tile_data'.
Warning: I could not find the column named 'tile_data'.
Warning: I could not find the column named 'tile_data'.
Warning: I could not find the column named 'tile_data'.
Map contents initialised. view: MapView at 0,0-320,411 tileSource <RMCachedTileSource: 0x592a400> renderer <RMCoreAnimationRenderer: 0x5925770>

Il est intéressant de noter que le fichier est nommé tiles.mbtiles pas MapMBTilestiles.mbtiles.sqlite et est stocké dans la racine de la liasse, et non pas dans l'enveloppe de la liasse. Documents dossier.

Voici le code que j'utilise pour faire de la mapView et charger la base de données :

CLLocationCoordinate2D center = {50, 50};
self.mapView = [[[RMMapView alloc] initWithFrame:self.view.frame] autorelease];
self.mapView.backgroundColor = [UIColor blackColor];
self.mapView.delegate = self;

NSURL *tilePath = [[NSBundle mainBundle] URLForResource:@"tiles" withExtension:@"mbtiles"];
RMMBTilesTileSource *tiles = [[[RMMBTilesTileSource alloc] initWithTileSetURL:tilePath] autorelease];
[self.mapView.contents removeAllCachedImages];
self.mapView.contents = [[[RMMapContents alloc] initWithView:self.mapView tilesource:tiles centerLatLon:center zoomLevel:0.0 maxZoomLevel:[tiles maxZoom] minZoomLevel:[tiles minZoom] backgroundImage:nil] autorelease];
[self addMarkers];

Route-Me ne lit manifestement pas le fichier ; même si je supprime entièrement la base de données, j'obtiens la même sortie de journal. Autrement dit, le problème est probablement dû au fait que Route-Me est incapable de trouver le fichier. Toute aide serait appréciée !

4voto

rcarver Points 480

Extraction - (RMTileImage *)tileImage :(RMTile)tile de MapView->Map->Tile Source

J'avais des problèmes avec les bases de données sqlite générées par map2sqlite jusqu'à ce que je modifie la ligne :

NSInteger y    = pow(2, zoom) - tile.y - 1;

à :

NSInteger y    = tile.y;

Je suis en train d'utiliser des bases de données générées par tilemill, donc je n'ai pas creusé plus loin, mais je lancerais quelques instructions de débogage si j'étais vous et je regarderais quelles tuiles il cherche par rapport à la disposition des tuiles dans votre base de données. Je pense que cela peut avoir un rapport avec l'ordre des tuiles de mbtiles par rapport à l'ordre des tuiles d'osm.

-- Randy

3voto

user836753 Points 31

En fait, je me suis débattu avec ce même problème hier.

Il semble y avoir deux formats de tuiles différents, google xyz et TMS qui est utilisé par openstreetmap.

La ligne que Randy a mise en évidence

NSInteger y    = pow(2, zoom) - tile.y - 1;

est de convertir l'un en l'autre. Ainsi, par exemple, je construis ma carte en utilisant Maperative, puis je l'exporte vers des tuiles dans un répertoire et enfin j'utilise mb-util pour générer le fichier tiles.mbtiles.

J'avais exactement le même problème, j'ai fait les changements que Randy a suggérés ci-dessus et ça marche.

En fin de compte, j'ai écrit un script php script pour renommer les noms de fichiers des tuiles afin qu'ils soient corrects. Je vais être honnête, je n'ai toujours pas compris quels logiciels exportent dans quel format. Je pense que mbtiles est censé être TMS, ce qui implique que route-me est xyz, mais je peux me tromper.

0voto

joshkendrick Points 1647

J'ai fait votre changement ci-dessus mais j'ai eu des problèmes pour centrer la carte. Après avoir travaillé dessus pendant un certain temps, j'ai changé la ligne que vous mentionnez ci-dessus en ceci :

NSInteger y = tile.y - (pow(4, ((zoom / 2) - 1)));

J'espère que cela aidera ceux qui rencontrent des difficultés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X