Inbl
Inbl

Reputation: 660

Google Maps SDK on iOS (Not Simulator!), myLocation is 0.000000

Edit: This isn't necessarily in reference to the simulator, with the Debug->Location thing. It shows 0.000000 whether I'm on a simulator or on a real phone.

I am using google maps to try to make an app that can do things based on my current location.

When I open the App, the blue dot location on the map is in my actual (correct) location, but the marker that I placed at "myLocation" is at 0.000000,0.000000 (That is also the value that gets printed out to console)

How can I make it so that the location of my marker is at the current location when I open the app and/or do something to get live coordinates of where the blue dot is? (That way I'd be able to access real-time latitude and longitude whenever I wanted)

Thanks in advance!

Here is my code:

#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

Upvotes: 3

Views: 1409

Answers (2)

vslifetracker
vslifetracker

Reputation: 83

For this you will need help of CLLocationManger class

IN .h file

CLLocationManager *currentLocationManager;
CLLocation *myLocation ;

IN .m file

#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_;

}

This creates a marker on current location. You will get location updates based on the "distance filter" and "accurracy" set on location manager.

Upvotes: 0

Gaurav Rami
Gaurav Rami

Reputation: 1287

#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;

}

Upvotes: 1

Related Questions