Использование автономной базы данных в Route-Me - PullRequest
3 голосов
/ 06 июля 2011

Я пытаюсь использовать автономную базу данных MBTiles, используя Route-Me . Для этого я использую Landez , что в свою очередь зависит от MBUtil .

Прямо сейчас все, что я получаю, это серый экран с булавками на своих местах. Вот что выводится на консоль:

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>

Стоит отметить, что файл называется tiles.mbtiles, а не MapMBTilestiles.mbtiles.sqlite и хранится в корне пакета, а не в папке Documents.

Вот код, который я использую для создания mapView и загрузки базы данных:

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 явно не читает файл вообще; даже если я полностью удаляю базу данных, я получаю тот же вывод журнала. Итак, проблема, вероятно, связана с тем, что Route-Me не может найти файл. Любая помощь будет оценена!

Ответы [ 3 ]

4 голосов
/ 09 июля 2011

Извлечь - (RMTileImage *) tileImage: (RMTile) тайл из MapView-> Map-> Tile Source

У меня были некоторые проблемы с базами данных sqlite, сгенерированными map2sqlite, пока я не изменил строку:

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

до:

NSInteger y    = tile.y;

Я сейчас использую сгенерированную плиткой базу данных, созданную плиткой, так что я больше не копался в ней, но я бы добавил некоторые отладочные операторы, если бы вы были вами, и посмотрел, какие плитки он ищет, по сравнению с тем, в каком макете плитки он находится. твой дб есть. Я думаю, что это может быть связано с порядком листов mbtiles против порядка листов osm.

- Рэнди

3 голосов
/ 09 июля 2011

Я на самом деле боролся с этой самой проблемой вчера.

Похоже, существует два разных формата листов: google xyz и TMS, которые используются openstreetmap.

Линия Рэнди выделена

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

Преобразует одно в другое. Так, например, я строю свою карту с помощью Maperative, затем экспортирую ее в тайлы в каталоге и, наконец, использую mb-util для генерации файла tile.mbtiles.

И у меня возникла та же проблема: внесите изменения, предложенные Ренди выше, и это сработает.

в конечном счете, однако, я написал скрипт php, чтобы переименовать имена плиток, чтобы они были правильными. Я буду честен, я все еще не совсем понял, какие части программного обеспечения экспортируются в каком формате. Я думаю, что mbtiles - это TMS, что означает, что route-me - это xyz, но я могу ошибаться.

0 голосов
/ 06 сентября 2011

Я внес ваши изменения выше, но затем возникли некоторые проблемы с центрированием карты. Проработав над этим в течение некоторого времени, я изменяю строку, которую вы упомянули выше, на эту:

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

Надеюсь, это поможет любому, у кого тоже есть проблемы.

...