我正在学习使用 map ,我的目标是在应用程序首次加载时在 map 上显示当前位置,而不是显示世界地图。但是我不能让它专注于想要的位置,因为我得到的坐标都是 0。
笔记:
我尝试过使用 2 种方法。
方法A)我将showsUserLocation设置为YES。然后将 map 的中心设置为 map 用户位置的值。但是用户位置为空,经纬度为0.000000。
方法 B)我创建位置管理器并从中获取纬度和经度。也得到纬度和经度是0.000000。
下面是代码:
View Controller .h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
@interface ViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>
@property (weak, nonatomic) IBOutlet MKMapView *myMap;
@property CLLocationManager *locationManager;
@end
View Controller .m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//Approach A)
self.myMap.showsUserLocation = YES; //tokyo Japan, blue pin with ripple displays on Default Location that I set in XCode = Tokyo, Japan
NSLog(@"using MapView.userLocation, user location = %@", self.myMap.userLocation.location); //output = null
NSLog(@"using MapView.userLocation, latitude = %f", self.myMap.userLocation.location.coordinate.latitude); //output = 0.000000
NSLog(@"using MapView.userLocation, longitude = %f", self.myMap.userLocation.location.coordinate.longitude); //output = 0.000000
CLLocationCoordinate2D centerCoord = {self.myMap.userLocation.location.coordinate.latitude, self.myMap.userLocation.location.coordinate.longitude};
[self.myMap setCenterCoordinate:centerCoord animated:TRUE]; //nothing happens, as latitude and longitude = 0.000000
//Approach B)
// create the location manager
CLLocationManager *locationManager;
if (nil == self.locationManager) {
self.locationManager = [[CLLocationManager alloc] init];
}
self.locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
self.locationManager.delegate = self; //add as suggested
[self.locationManager startUpdatingLocation];
NSLog(@"using LocationManager:current location latitude = %f, longtitude = %f", self.locationManager.location.coordinate.latitude, self.locationManager.location.coordinate.longitude);
//if getting latitude and longitude, will call "setCenterCoordinate"
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//add as suggested
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"didUpdateToLocation:Latitude : %f", newLocation.coordinate.latitude);
NSLog(@"didUpdateToLocation:Longitude : %f", newLocation.coordinate.longitude);
[self.locationManager stopUpdatingLocation];
}
@end
输出:
xxxx using MapView.userLocation, user location = (null)
xxxx using MapView.userLocation, latitude = 0.000000
xxxx using MapView.userLocation, longitude = 0.000000
xxxx using LocationManager:current location latitude = 0.000000, longtitude = 0.000000
现在输出:
xxx using MapView.userLocation, user location = (null)
xxx using MapView.userLocation, latitude = 0.000000
xxx using MapView.userLocation, longitude = 0.000000
xxx using LocationManager:current location latitude = 0.000000, longtitude = 0.000000
xxx didUpdateToLocation:Latitude : 35.702069
xxx didUpdateToLocation:Longitude : 139.775327
最佳答案
添加 CoreLocation.framework
给你的项目并添加到.h
文件
并且
locationManager.delegate = self; // may be you forget to it.
并且还添加了 Delegate 方法,例如,
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"Latitude : %f", newLocation.coordinate.latitude);
NSLog(@"Longitude : %f", newLocation.coordinate.longitude);
[currentLocation stopUpdatingLocation];
}
关于ios - 无法获取当前位置以设置 map 中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18628573/