У меня есть приложение, которое использует Route-me со статическими картами (плитки, хранящиеся в базе данных sqlite). Код ниже правильно добавляет маршрут к карте. Однако я хотел бы, чтобы приложение удалило указанный маршрут и добавило еще один маршрут. В коде, функция получает новый набор точек маршрута (переменная PathNodes) в этой строке (кнопка [маршрут createRoute: whichRoute] метод вытягивает точки данных из SQLite базы данных - это работает правильно):Route-me: размещение нового маршрута на карте
pathNodes = [route createRoute:whichRoute];
Тогда я удалить существующий слой в этом коде:
// remove the current layer, which holds the previous route
if (currentLayer != nil) {
[mapView.contents.overlay removeSublayer:currentLayer];
}
и добавить новый слой в этом:
[mapView.contents.overlay addSublayer:(CALayer *)walkRoute.path];
Для первого маршрута, созданного, это работает отлично. Но когда выбран новый маршрут, существующий слой удаляется, а новый подуровень добавляется в mapView, но никогда не отображается.
Мне кажется, что это всего лишь вопрос о том, чтобы mapView перерисовывал себя с новым подуровнем, но я пробовал все, что мог придумать или обнаружить в другом месте, и ничего не сработало.
Как заставить mapView перерисовать себя. Или есть еще одна проблема, которую я не вижу?
Вся помощь будет принята с благодарностью!
- (void) setRoute {
NSMutableArray *pathNodes;
int whichRoute = delegate.selectedRoute; // delegate.whichRoute will be an integer denoting which route the user has chosen
Route *route = [[Route alloc] init];// Route stores information about the route, and a way to create the path nodes from a sqlite database
pathNodes = [route createRoute:whichRoute];
CMRoute *walkRoute = [[CMRoute alloc] initWithNodes:pathNodes forMap:mapView];
// remove the current layer, which holds the previous route
if (currentLayer != nil) {
[mapView.contents.overlay removeSublayer:currentLayer];
}
[mapView.contents.overlay addSublayer:(CALayer *)walkRoute.path];
currentLayer = (CALayer *)walkRoute.path;
// set the map's center point, whkch is the startPointlat and long stored in route
CLLocationCoordinate2D demoCoordinate;
demoCoordinate.longitude = route.startPoint.longitude;
demoCoordinate.latitude = route.startPoint.latitude;
[mapView setNeedsDisplay];
[mapView moveToLatLong:demoCoordinate];
}