user1724168
user1724168

Reputation:

User Location-Mapview

I would like to find out userlocation coordinate while my app is loading. I have implemented following code but it returns 0.000

 mapView.showsUserLocation=YES;

CLLocationCoordinate2D annotationCoordinate;
annotationCoordinate.latitude=mapView.userLocation.location.coordinate.latitude;
NSLog(@"%f",annotationCoordinate.latitude);

I could not able to figure out. Any help?

Upvotes: 0

Views: 2387

Answers (5)

user3735005
user3735005

Reputation:

Okay, so I just managed to fix it myself too. What no one is telling you is that you need to set a key/value pair in the info.plist.

Depending on what method (requestAlwaysAuthorization or requestWhenInUseAuthorization) you need to add a key under the 'Information Property List' dictionary. For the first method use: NSLocationAlwaysUsageDescription and for the second method use: NSLocationWhenInUseUsageDescription .

The value fields of both keys can be set to whatever string you would like to display to the user.

Both keys at the top are what we are looking for. How it should look like

Now you should see a dialogue that prompts you for confirmation.

PS: No tutorial on the internet listed this step of the process, but when you read the documentation for each of those methods (requestWhenInUse on CLLocationManager) it does mention that nothing gets displayed without those two keys.

Upvotes: 0

Hardik Thakkar
Hardik Thakkar

Reputation: 15951

1) Add the FrameWork CoreLocation and Mapkit
2) In ViewController.h file

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MapViewController : UIViewController<MKMapViewDelegate,CLLocationManagerDelegate>
{
      CLLocationManager *locationManager;
}
@property (nonatomic, strong) IBOutlet MKMapView *mapView;

3) In viewController.m file

- (void)viewDidLoad
{
[super viewDidLoad];
self.mapView.delegate = self;
locationManager = [[CLLocationManager alloc] init];
 locationManager.delegate=self;
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[locationManager startUpdatingLocation];
}

now in didUpdateUserLocation

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 800, 800);
[self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
// Add an annotation
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = userLocation.coordinate;
point.title = @"Where am I?";
point.subtitle = @"I'm here!!!";
[self.mapView addAnnotation:point];}

4) Now add Mapview in your UI

NOTE: select MapView and goto Attribute Inspector and CKECK Mark the Shows user location Under BEHAVIOUR

Upvotes: 1

lionserdar
lionserdar

Reputation: 2032

You can not get users location coordinate in view did load what you need to do is using the delegate method below.

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    NSLog(@"coordinates = %f,%f", mapView.userLocation.coordinate.latitude,
          mapView.userLocation.coordinate.longitude);
}

Make sure your map object is connected with the delegate Just tested it should work

Upvotes: 1

voromax
voromax

Reputation: 3389

First of all you should take into account that it takes time to retrieve the user location. Moreover the user can disable the location service for your application or even the location service can be unavailable during the connectivity conditions. So you'd better to rethink your application starting procedures.

When you make up you decision take a look at mapView:didUpdateUserLocation: method of MKMapViewDelegate protocol. After this method fires out the location can be available via the userLocation property of the MKMapView.

UPDATE

In case you want to open map view with the user location already checked, you may consider using CLLocationManager and CLLocationManagerDelegate. This way you can check if the location service is available and open map view after the method locationManager:didUpdateToLocation:fromLocation: fires up.

For the complete info take a look at Getting the User’s Location programing guide

Upvotes: 1

Ulaş Sancak
Ulaş Sancak

Reputation: 907

I think you should use this:

#import <CoreLocation/CoreLocation.h>

Then in viewDidLoad method:

CLLocationManager *locationManager = [[CLLocationManager alloc] init];
    [locationManager startUpdatingLocation];
    [mapView setRegion:MKCoordinateRegionMake(locationManager.location.coordinate, MKCoordinateSpanMake(0.2, 0.2))];
    mapView.showsUserLocation = YES;
    NSLog(@"%f",mapView.region.center.latitude);

Upvotes: 0

Related Questions