2013-05-27 36 views
3

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

那么这里有我的课:

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]; 
} 

回答

-1

尝试设置​​或将其设置在XIB

+0

AGsMapView不具有财产 – progrmr

3

您需要提供创建A时的空间参考GSPoint来自CLLocation坐标。使用[AGSSpatialReference wgs84SpatialReference]

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

OR

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

请参阅该文档为AGSMapView

+0

谢谢!它已经解决了。 – lcsdust

+0

很高兴听到它。如果在stackoverflow上的答案之一帮助你,你应该加快或接受它(或自己发现答案,如果你自己发现),这将帮助其他人寻找你的问题的答案。 – progrmr

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() 
}