2014-01-30 21 views
3

编辑:这不一定是参考模拟器,使用Debug-> Location的东西。它显示0.000000我是在模拟器上还是在真实的手机上。iOS上的Google Maps SDK(不是模拟器!),myLocation为0.000000

我正在使用谷歌地图试图做一个应用程序,可以根据我当前的位置做事情。

当我打开应用程序时,地图上的蓝色点位置位于我的实际(正确)位置,但放置在“myLocation”处的标记为0.000000,0.000000(这也是打印的值出局到控制台)

我该如何使我的标记位置在当前位置,当我打开应用程序和/或做一些事情来获得蓝点所在的实时坐标? (这样我就可以随时访问实时的经纬度)

在此先感谢!

这里是我的代码:

#import "MyViewController.h" 
#import <GoogleMaps/GoogleMaps.h> 


@interface MyViewController() 
@property (nonatomic, readwrite) NSString *coord; 
@end 

@implementation MyViewController 

GMSMapView *mapView_; 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.view layoutIfNeeded]; 

    // Do any additional setup after loading the view, typically from a nib. 
    // Create a GMSCameraPosition that tells the map to display the 
    // coordinate -33.86,151.20 at zoom level 6. 
    CLLocation *myLocation = mapView_.myLocation; 
    GMSCameraPosition *camera = [GMSCameraPosition  cameraWithLatitude:myLocation.coordinate.latitude 
                  longitude:myLocation.coordinate.longitude 
                  zoom:6]; 
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 
mapView_.myLocationEnabled = YES; 


self.view = mapView_; 




// Creates a marker in the center of the map. 
GMSMarker *marker = [[GMSMarker alloc] init]; 
// marker.position = CLLocationCoordinate2DMake(-33.86, 151.20); 
    marker.position = CLLocationCoordinate2DMake(myLocation.coordinate.latitude,  myLocation.coordinate.longitude); 
marker.title = @"Current:"; 
float lat = mapView_.myLocation.coordinate.latitude; 
float lon = mapView_.myLocation.coordinate.longitude; 
_coord = [NSString stringWithFormat:@"%f %f",lat,lon]; 
printf("%f %f",lat,lon); 
marker.snippet = (_coord); 
marker.map = mapView_; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 





@end 
+0

[是否有可能通过iOS模拟器获得'活'当前位置?](http://stackoverflow.com/questions/21102917/is-it-possible-to-get-the-live - 当前位置与一个IOS模拟器) –

+0

我不是在谈论模拟器,我说的是从真实iPhone上的Google Maps API获取当前位置。 – Inbl

回答

1
#import "ViewController.h" 
#import <GoogleMaps/GoogleMaps.h> 

@interface ViewController() <GMSMapViewDelegate> 
{ 
GMSMapView *mapView_; 
} 
@end 

@implementation ViewController 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [mapView_ addObserver:self forKeyPath:@"myLocation" options:0 context:nil]; 
} 

- (void)dealloc 
{ 
    [mapView_ removeObserver:self forKeyPath:@"myLocation"]; 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    if([keyPath isEqualToString:@"myLocation"]) 
    { 
     CLLocation *location = [object myLocation]; 

     NSLog(@"Location, %@,", location); 

     CLLocationCoordinate2D target = 
     CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude); 

     [mapView_ animateToLocation:target]; 
     [mapView_ animateToZoom:17]; 
    } 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    GMSCameraPosition *cam = [GMSCameraPosition cameraWithLatitude:mapView_.myLocation.coordinate.latitude longitude:mapView_.myLocation.coordinate.longitude zoom:15]; 
    mapView_ = [GMSMapView mapWithFrame:CGRectMake(20, 20, self.view.frame.size.width, self.view.frame.size.height - 64) camera:cam]; 

    self.view = mapView_; 

    mapView_.delegate = self; 

    mapView_.userInteractionEnabled = YES; 
    mapView_.myLocationEnabled = YES; 

    mapView_.mapType = kGMSTypeNormal; 
    mapView_.indoorEnabled = YES; 
    mapView_.accessibilityElementsHidden = NO; 

    mapView_.settings.scrollGestures = YES; 
    mapView_.settings.zoomGestures = YES; 
    mapView_.settings.tiltGestures = YES; 
    mapView_.settings.rotateGestures = YES; 

    mapView_.settings.compassButton = YES; 
    mapView_.settings.myLocationButton = YES; 
    mapView_.settings.indoorPicker = YES; 

} 
0

为此,您需要CLLocationManger类

的帮助.h文件中

CLLocationManager *currentLocationManager; 
CLLocation *myLocation ; 

在.m文件

#import <CoreLocation/CoreLocation.h> 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.view layoutIfNeeded]; 

currentLocationManager = [[CLLocationManager alloc] init]; 
    currentLocationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    currentLocationManager.distanceFilter = DISTANCE_FILTER_VALUE_STATIONARY; 
    [self.currentLocationManager setDelegate:self]; 
    [currentLocationManager startUpdatingLocation]; 

}

#pragma mark 
#pragma mark for Location manager Delegate Methods 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateLocations:(NSArray *)locations { 

myLocation = [locations lastObject]; 

// Now create maker on current location 
GMSMarker *marker = [[GMSMarker alloc] init]; 
marker.position = myLocation.coordinate; 
marker.title = @"Current:"; 
float lat = mapView_.myLocation.coordinate.latitude; 
float lon = mapView_.myLocation.coordinate.longitude; 
_coord = [NSString stringWithFormat:@"%f %f",lat,lon]; 
printf("%f %f",lat,lon); 
marker.snippet = (_coord); 
marker.map = mapView_; 

}

这产生对当前位置的标记。您将根据位置经理设置的“距离过滤器”和“准确性”获取位置更新。

相关问题