3

我一直在尝试将以下内容添加到 Route-Me 应用程序中。

  • 在起始位置添加标记
  • 将地图移动到用户位置
  • 将标记移动到该新位置

我正在使用 MapBox ios 示例中的基本示例,因为我的地图来自离线 mbtiles 商店。

这是我的头文件:

#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

这是我的实现文件:

#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

marker.png 已添加到我的资源文件夹中。

所以我的问题

  1. 为什么我的起始标记没有显示?
  2. 我在 SnowLeopard 上使用 xcode,那么模拟器真的能找到我的位置吗?因为地图不动。

任何帮助都会很棒,因为我尝试了这么多代码片段和教程,但没有一个最终奏效。

4

2 回答 2

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

于 2012-04-05T14:07:12.167 回答
0

在移动后清洁标记后,我能够让它工作。

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;
于 2013-08-08T08:31:52.903 回答