Google Maps API:获取当前位置iOS的坐标

Ale*_*iop 9 location google-maps objective-c ios google-maps-sdk-ios

我目前正在我的项目中使用Google Maps API.我正在尝试将默认相机/缩放设置为用户位置.我这样做:

@implementation ViewController{

GMSMapView *mapView_;

}
@synthesize currentLatitude,currentLongitude;

- (void)viewDidLoad
{
[super viewDidLoad];
mapView_.settings.myLocationButton = YES;
mapView_.myLocationEnabled = YES;


}
- (void)loadView{

CLLocation *myLocation = mapView_.myLocation;

GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(myLocation.coordinate.latitude, myLocation.coordinate.longitude);
marker.title = @"Current Location";
marker.map = mapView_;
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:myLocation.coordinate.latitude
                                                        longitude:myLocation.coordinate.longitude
                                                             zoom:6];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];

self.view = mapView_;
   NSLog(@"%f, %f", myLocation.coordinate.latitude, myLocation.coordinate.longitude);

}
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,因为当我这样做

NSLog(@"%f, %f", myLocation.coordinate.latitude, myLocation.coordinate.longitude);
Run Code Online (Sandbox Code Playgroud)

它返回0,0,并且它不给出当前位置坐标.如何正确获取用户的坐标?

小智 11

.H

#import <CoreLocation/CoreLocation.h>
@property(nonatomic,retain) CLLocationManager *locationManager;
Run Code Online (Sandbox Code Playgroud)

.M

- (NSString *)deviceLocation 
{
NSString *theLocation = [NSString stringWithFormat:@"latitude: %f longitude: %f", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude];
return theLocation;
}

- (void)viewDidLoad
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
    [locationManager startUpdatingLocation];
}
Run Code Online (Sandbox Code Playgroud)

这里回答.


Sax*_*uce 6

当应用程序首次启动时,它可能还不知道您的位置,因为GPS设备通常需要一段时间才能锁定您的位置(如果它刚刚启动),特别是如果这是第一次应用程序已经运行,因此用户尚未回答提示,让应用程序访问其位置.mapView.myLocation刚刚创建了地图视图时,它似乎总是空的(无论是nil还是坐标为0,0).

因此,您需要等到用户的位置已知,然后更新摄像机位置.

一种方法可能是如何使用代码来获取如Puneet所建议的在iphone中的谷歌地图sdk获取当前位置,但请注意,那里的示例代码缺少设置位置管理器的详细信息(如设置位置管理器的委托),这可能就是为什么它不适合你.

另一种选择可能是使用KVO mapView.myLocation,如下所述:关于定位自己,一些问题

顺便提一下,mapView.myLocation在创建之前,您正在访问示例代码mapView,因此无论如何,该位置始终为零.