2013-05-27 3 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

Попробуйте установить mapview.showUserLocation = YES ; или установить его в XIB

+0

AGsMapView не имеет это свойство – progrmr

3

Вы должны предоставить пространственная ссылка, когда вы создаете A GSPoint из координат CLLocation. Использовать [AGSSpatialReference wgs84SpatialReference]

Если карта не использует пространственную привязку WGS84, вам необходимо перепрограммировать точку в пространственную привязку карты, прежде чем добавлять ее к карте с помощью механизма геометрии.

ИЛИ

вы можете использовать свойство locationDisplay встроенный в AGSMapView, установив 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() 
} 
Смежные вопросы