地图无法显示我的位置

时间:2013-05-27 10:50:50

标签: ios objective-c arcgis cllocation

我想显示地图并显示位置。我的代码运行良好,但无法在地图上显示该位置。我不知道怎么做。

这是我的课程:

ViewController.h

@interface ViewController : 
UIViewController<AGSMapViewLayerDelegate,CLLocationManagerDelegate>
{
    AGSMapView *_mapView;
    AGSGraphicsLayer  *_graphicsLayer;
    AGSTiledMapServiceLayer *_tiledLayer;
    CLLocationManager *locationManager;
    CLLocation *startingPoint;   
}

@property (nonatomic,retain) IBOutlet AGSMapView *mapView;
@property (nonatomic, retain) AGSTiledMapServiceLayer *tiledLayer;
@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, retain)  AGSGraphicsLayer  *graphicsLayer;
@property (nonatomic, retain) CLLocation *startingPoint;

ViewController.m

@interface ViewController()

@end

@implementation ViewController

@synthesize mapView = _mapView;
@synthesize graphicsLayer = _graphicsLayer;
@synthesize tiledLayer = _tiledLayer;
@synthesize locationManager;
@synthesize startingPoint;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.mapView.layerDelegate =self;
    self.graphicsLayer = [AGSGraphicsLayer graphicsLayer];
    [self.mapView addMapLayer:self.graphicsLayer withName:@"graphicsLayer"];

    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self; // send loc updates to myself
    self.locationManager.distanceFilter = 1000.0f;  // 1 kilometer
    self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;       
}

- (void)mapViewDidLoad:(AGSMapView *)mapView{
    [self.locationManager startUpdatingLocation];  //启用位置监控
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
    self.startingPoint = [locations lastObject];
    [self.locationManager stopUpdatingLocation]; //获取位置信息

    CGPoint coord;
    coord.x = startingPoint.coordinate.longitude;
    coord.y = startingPoint.coordinate.latitude;

    //将坐标用AGSPoint来表示
    AGSPoint *mappoint = [[AGSPoint alloc]initWithX:coord.x y:coord.y spatialReference:nil];
    //[self.graphicsLayer removeAllGraphics];
    AGSPictureMarkerSymbol *pt;
    pt = [AGSPictureMarkerSymbol pictureMarkerSymbolWithImageNamed:@"LocationDisplay.png"];
    AGSGraphic *LocationDisplay = [[AGSGraphic alloc] initWithGeometry:mappoint symbol:pt attributes:nil infoTemplateDelegate:nil];

    // 添加要素到GraphicsLayer
    [self.graphicsLayer addGraphic:LocationDisplay];
    [self.graphicsLayer refresh];

    //漫游到指定级别
    [self.mapView centerAtPoint:mappoint animated:YES];
    int levelToZoomTo = 12;
    AGSLOD* lod = [self.tiledLayer.mapServiceInfo.tileInfo.lods objectAtIndex:levelToZoomTo];
    float zoomFactor = lod.resolution/self.mapView.resolution;
    AGSMutableEnvelope *newEnv = [AGSMutableEnvelope envelopeWithXmin:self.mapView.visibleAreaEnvelope.xmin
                                    ymin:self.mapView.visibleAreaEnvelope.ymin
                                    xmax:self.mapView.visibleAreaEnvelope.xmax
                                    ymax:self.mapView.visibleAreaEnvelope.ymax
                                    spatialReference:self.mapView.spatialReference];
    [newEnv expandByFactor:zoomFactor];
    [self.mapView zoomToEnvelope:newEnv animated:YES];
}

3 个答案:

答案 0 :(得分:3)

从CLLocation坐标创建AGSPoint时,需要提供空间参考。使用[AGSSpatialReference wgs84SpatialReference]

如果地图未使用WGS84空间参考,则在使用几何引擎将其添加到地图之前,需要将该点重新投影到地图空间参考。

OR

您可以使用AGSMapView内置的locationDisplay属性,通过设置mapView.locationDisplay.startDataSource来显示您当前的位置。

请参阅AGSMapView

的文档

答案 1 :(得分:0)

func mapViewDidLoad(mapView: AGSMapView!) {
    //do something now that the map is loaded
    //for example, show the current location on the map
    mapView.locationDisplay.startDataSource()
}

答案 2 :(得分:-1)

尝试设置mapview.showUserLocation = YES ;或将其设置为XIB