3

I have been trying to add the following things to a Route-Me app.

  • Add a marker at the starting location
  • Move the map to the user location
  • Move the marker to that new location

I am using the basic example from MapBox ios example, as my maps are from an offline mbtiles store.

This is my header file:

#import <UIKit/UIKit.h>

#import "RMMapView.h"
#import "RMMarker.h"
#import "RMMapViewDelegate.h"
#import "RMMarkerManager.h"
#import "CoreLocation/CoreLocation.h"

@interface MBTiles_ExampleViewController : UIViewController
{
    RMMapView *mapView;
}

@property (nonatomic, retain) IBOutlet RMMapView *mapView;
@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, retain) CLLocation *currentLocation;
@property (nonatomic, retain) RMMarkerManager *markerManager;
@property (nonatomic, retain) RMMarker *locationMarker;

@end

And this is my implementation file:

#define kStartingLat   30.0f
#define kStartingLon  -10.0f
#define kStartingZoom   1.5f

#import "MBTiles_ExampleViewController.h"

#import "RMMBTilesTileSource.h"
#import "RMMapContents.h"
#import "RMMarker.h"

#import "RMMarkerManager.h"
#import "CoreLocation/CoreLocation.h"


@implementation MBTiles_ExampleViewController

@synthesize mapView;
@synthesize currentLocation;
@synthesize locationManager;
@synthesize markerManager;
@synthesize locationMarker;



(void)viewDidLoad
{
    CLLocationCoordinate2D startingPoint;

    startingPoint.latitude  = kStartingLat;
    startingPoint.longitude = kStartingLon;

    NSURL *tilesURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"control-room-0.2.0" ofType:@"mbtiles"]];

    RMMBTilesTileSource *source = [[[RMMBTilesTileSource alloc] initWithTileSetURL:tilesURL] autorelease];

    [[[RMMapContents alloc] initWithView:self.mapView 
                              tilesource:source
                            centerLatLon:startingPoint
                               zoomLevel:kStartingZoom
                            maxZoomLevel:[source maxZoom]
                            minZoomLevel:[source minZoom]
                         backgroundImage:nil] autorelease];

    mapView.enableRotate = NO;
    mapView.deceleration = NO;

    mapView.backgroundColor = [UIColor blackColor];

    mapView.contents.zoom = kStartingZoom;

    if (nil == locationManager)
        locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;

    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    [locationManager startUpdatingLocation];


    UIImage *iconImage = [UIImage imageNamed:@"marker.png"];

    locationMarker = [[RMMarker alloc] initWithUIImage: iconImage];



    [markerManager addMarker: locationMarker AtLatLong: startingPoint];  

}

(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    [mapView moveToLatLong:newLocation.coordinate];

    RMLatLong newCoords = {newLocation.coordinate.latitude, newLocation.coordinate.longitude};

    if (nil != markerManager)
       [markerManager moveMarker:locationMarker AtLatLon: newCoords];

}

(void)dealloc
{
    [mapView release];

    [super dealloc];
}

@end

The marker.png has been added to my resources folder.

So my questions

  1. Why is my starting marker not showing?
  2. I am using xcode on SnowLeopard, so can the simulator actually find my location? As the map does not move.

Any help would be great as I have tried so many code snippets and tutorials but none have ended up working.

NREZ
  • 942
  • 9
  • 13
tjmgis
  • 1,589
  • 4
  • 23
  • 42
  • Add some NSLog(@"Text goes here"); lines to print debug output throughout your code. You'll want to check what location you are trying to display, whether the image is nil, the size of the image, whether your code is even getting called, etc. – Dan J Aug 04 '12 at 15:01

2 Answers2

0

Regarding your second question, from the apple docs:

In Xcode 4.0 and 4.1, you could simulate only the current location in your application. As of Xcode 4.2, you can simulate locations other than your current location in iOS applications that use Core Location. To set a location, choose Edit Scheme from the scheme selector in the toolbar, select the Run action, and click the Options tab. You can then choose a location from the Location menu

http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_2.html

AndrejKolar
  • 284
  • 1
  • 9
0

I was able to get it working after cleaning marker after move.

marker = [[RMMarker alloc] initWithUIImage:[UIImage imageNamed:@"marker.png"] anchorPoint:CGPointMake(0.5f, 1.f)];
[mapView.contents.markerManager addMarker:marker AtLatLong:locPoland];
[mapView.contents.markerManager moveMarker:marker AtLatLon:locWawa];
[mapView.markerManager moveMarker:marker AtLatLon: locUser];
[mapView moveToLatLong:locUser];
marker = nil;
Camelek
  • 21
  • 2