2014-01-30 38 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_; 

}

這產生對當前位置的標記。您將根據位置經理設置的「距離過濾器」和「準確性」獲取位置更新。

相關問題