3

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

好吧,这是我的课程:

视图控制器.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;

视图控制器.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 空间参考,则需要先将该点重新投影到地图空间参考,然后再使用几何引擎将其添加到地图中。

或者

您可以使用 AGSMMapView 中内置的 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 回答