about positioning myself,some problems

情到浓时终转凉″ 提交于 2020-02-10 12:40:10

问题


I am a new to google map sdk for ios.I have added a map on a view.When I enter this mapView,I want to positioning myself.So I wrote :

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
_iMapView = [GMSMapView mapWithFrame:CGRectMake(0, 0, 320, 480) camera:camera];
self.iMapView.myLocationEnabled = YES;
self.iMapView.delegate=self;

GMSMarkerOptions *annotation = [[GMSMarkerOptions alloc] init];
annotation.position = CLLocationCoordinate2DMake(-33.8683, 151.2086);
annotation.title = @"Sydney";
annotation.snippet = @"Australia";
//annotation.infoWindowAnchor=CGPointMake(0.5, 0.5);
[self.iMapView addMarkerWithOptions:annotation];

//[self.view  addSubview:self.iMapView];
self.view=self.iMapView;

but I find the mapView view in the coordinate(33.8683,151.2086),I just want to move the mapView to the wyposition. I also find google have no callback function reference to
self.iMapView.myLocationEnabled = YES;

thank you for you reply.


回答1:


To animate/set the camera to your current position you first have to:

self.googleMapsView.myLocationEnabled = YES;

Then in the documentation of the GMSMapView header file you will find the following comment:

/**
* If My Location is enabled, reveals where the user location dot is being
* drawn. If it is disabled, or it is enabled but no location data is available,
* this will be nil.  This property is observable using KVO.
*/ 
@property (nonatomic, strong, readonly) CLLocation *myLocation;

So you can setup a key value observer in your viewWillAppear Method and then you get your location update with the Location Manager of the GoogleMaps SDK.

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // Implement here to check if already KVO is implemented.
    ...
    [self.googleMapsView addObserver:self forKeyPath:@"myLocation" options:NSKeyValueObservingNew context: nil]
}

And then observe the property.

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"myLocation"] && [object isKindOfClass:[GMSMapView class]])
    {
        [self.googleMapsView animateToCameraPosition:[GMSCameraPosition cameraWithLatitude:self.googleMapsView.myLocation.coordinate.latitude
                                                                                 longitude:self.googleMapsView.myLocation.coordinate.longitude
                                                                                      zoom:self.googleMapsView.projection.zoom]];
    }
}

Do not forget to deregister your observer in the viewWillDisappear.

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    // Implement here if the view has registered KVO
    ...
    [self.googleMapsView removeObserver:self forKeyPath:@"myLocation"];
}

Best regards




回答2:


NOTE: This answer is wrong, see Robert's answer.

The Google Maps SDK for iOS doesn't have any delegate to let you know when the device's position has changed.

You would need to use the CLLocationManager class yourself, to get the device's current position, and then update the map view.

UPDATE:

To update the map view from the new CLLocation provided by the location manager, you do something like this:

GMSMapView* mapView = ...;
CLLocation* location = ...;
GMSCameraPosition* camera = [GMSCameraPosition 
    cameraWithLatitude: location.coordinate.latitude
    longitude: location.coordinate.longitude
    zoom: 6];
mapView.camera = camera;

Or if you want the map view to animate to the new location, then use this:

[mapView animationToCameraPosition: camera];


来源:https://stackoverflow.com/questions/15266118/about-positioning-myself-some-problems

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!