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

3 に答える 3

3

CLLocation 座標から AGSPoint を作成するときは、空間参照を提供する必要があります。[AGSSpatialReference wgs84SpatialReference]を使用

マップが WGS84 空間参照を使用していない場合は、ジオメトリ エンジンを使用してマップに追加する前に、ポイントをマップ空間参照に再投影する必要があります。

また

AGSMapView に組み込まれている locationDisplay プロパティを使用するには、mapView.locationDisplay.startDataSource を設定して現在の場所を表示します。

AGSMapViewのドキュメントを参照してください

于 2013-05-27T15:33:59.150 に答える
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()
}
于 2016-06-11T23:09:36.177 に答える
-1

設定してみるmapview.showUserLocation = YES ; か、設定してくださいXIB

于 2013-05-27T11:24:31.623 に答える