如何通过iPhone中的代码使用MKMapkit获取用户当前的确切位置?

时间:2013-07-11 05:21:26

标签: iphone ios objective-c mapkit

我想从我的iPhone应用程序中获取用户的当前位置。我也试过谷歌搜索,但无法得到确切的答案。我正在尝试开发代码。位置将无法正常显示。我可以找到最近的位置。但我可以找到确切的位置。请给我任何想法,如何显示确切的位置。谢谢提前。

MapviewAppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

if([CLLocationManager locationServicesEnabled])

 {

self.locationManager.delegate=self;

self.locationManager.distanceFilter=1;

 [self.locationManager startUpdatingLocation];

}


}


-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

{

double miles=12.0;

double scalingFactor= ABS( cos(2 * M_PI * newLocation.coordinate.latitude /360.0) );

MKCoordinateSpan span;

span.latitudeDelta=miles/69.0;

span.longitudeDelta=miles/(scalingFactor*69.0);

 MKCoordinateRegion region;

region.span=span;

region.center=newLocation.coordinate;

[self.viewController.mapView setRegion:region animated:YES];

self.viewController.mapView.showsUserLocation=YES;

}

mapviewcontroller.m

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

self.mapView.showsUserLocation = YES;

MKCoordinateRegion region;

 region.center = self.mapView.userLocation.coordinate;

 MKCoordinateSpan span;

span.latitudeDelta  = 20;

span.longitudeDelta = 20;

 region.span = span;

[self.mapView setRegion:region animated:YES];

}

// create a region that fill fit all the locations in it

+ (MKCoordinateRegion) getRegionThatFitsLocations:(NSArray *)locations {

// initialize to minimums, maximums

 CLLocationDegrees minLatitude = 90;

CLLocationDegrees maxLatitude = -90;

CLLocationDegrees minLongitude = 180;

 CLLocationDegrees maxLongitude = -180;


// establish the min and max latitude and longitude

 // of all the locations in the array

 for (CLLocation *location in locations) 
{


if (location.coordinate.latitude < minLatitude) 

{

 minLatitude = location.coordinate.latitude;

 }

if (location.coordinate.latitude > maxLatitude)

{

maxLatitude = location.coordinate.latitude;

}

if (location.coordinate.longitude < minLongitude) 

{

 minLongitude = location.coordinate.longitude;

}

if (location.coordinate.longitude > maxLongitude) 

{

maxLongitude = location.coordinate.longitude;

}

}



MKCoordinateSpan span;

 CLLocationCoordinate2D center;

if ([locations count] > 1) 

{

// for more than one location, the span is the diff between

// min and max latitude and longitude

 span =  MKCoordinateSpanMake(maxLatitude - minLatitude, maxLongitude - minLongitude);

 // and the center is the min + the span (width) / 2

 center.latitude = minLatitude + span.latitudeDelta / 2;

center.longitude = minLongitude + span.longitudeDelta / 2;

} 

else 

{

// for a single location make a fixed size span (pretty close in zoom)

span =  MKCoordinateSpanMake(0.01, 0.01);

// and the center equal to the coords of the single point

// which will be the coords of the min (or max) coords

 center.latitude = minLatitude;

 center.longitude = minLongitude;

 }


 // create a region from the center and span

return MKCoordinateRegionMake(center, span);

}

2 个答案:

答案 0 :(得分:1)

为什么不在MKMapView上启用userLocationVisible?然后,用户当前位置将在地图上显示为蓝点。

答案 1 :(得分:0)

基本上,无论何时添加mapView,都应在检查器中启用showuserlocation选项。  当您在设备上运行应用程序时,应用程序将从您的位置开始。