0
나는 모든 5 초 성공적으로 위도와 경도를 얻고, 나는 데이터베이스에 저장하고,하지만 난 매 5 초마다 30m 거리에 위치 데이터를 원하는거리와 시간을 기준으로 위도와 경도를 알고 싶습니다. <p>이</p>가의 ViewController 내 코드입니다 .... 내 프로젝트에서
당신이 NSPredicate
를 생성하기위한 최소 및 최대 위도, 경도 값을 찾을해야하는 .m
//When I click button this method called...
- (IBAction)getLocationDetails:(UIButton *)sender {
[self CurrentLocationIdentifier];
timer = [NSTimer scheduledTimerWithTimeInterval:5.0f
target:self
selector:@selector(CurrentLocationIdentifier)
userInfo:nil
repeats:YES];
}
-(void)CurrentLocationIdentifier {
//---- For getting current gps location
locationManager = [[CLLocationManager alloc]init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
currentLocation = [locations objectAtIndex:0];
self.longitudeString = @(currentLocation.coordinate.longitude).stringValue;
self.latitudeString = @(currentLocation.coordinate.latitude).stringValue;
[locationManager stopUpdatingLocation];
manager.delegate = nil;
NSLog(@"New longitude %@", self.longitudeString);
NSLog(@"New latitude %@", self.latitudeString);
dispatch_async(dispatch_get_main_queue(), ^{
CLGeocoder *geocoder = [[CLGeocoder alloc] init] ;
[geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error)
{
NSString *CountryArea;
if (!(error))
{
CLPlacemark *placemark = [placemarks objectAtIndex:0];
NSLog(@"\nCurrent Location Detected.......\n");
// NSLog(@"placemark : %@",placemark);
NSString *locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "];
NSString *address = [[NSString alloc]initWithString:locatedAt];
NSLog(@"Address : %@", address);
self.addressString = [[NSString alloc]initWithString:address];
[self saveData];
}
else
{
NSLog(@"Geocode failed with error %@", error);
NSLog(@"\nCurrent Location Not Detected\n");
//return;
CountryArea = NULL;
}
}];
});
// Here is the distance calculation...
CLLocation *startLocation = [[CLLocation alloc] initWithLatitude:currentLocation.coordinate.latitude longitude:currentLocation.coordinate.longitude];
CLLocation *endLocation = [[CLLocation alloc] initWithLatitude:currentLocation.coordinate.latitude longitude:currentLocation.coordinate.longitude];
CLLocationDistance distance = [startLocation distanceFromLocation:endLocation];
if (distance == 0) {
NSLog(@"Distance.... %f", distance);
}
}
- (void)saveData {
NSManagedObject * managedObj = [[NSManagedObject alloc]initWithEntity:self.GPSDatabaseED insertIntoManagedObjectContext:self.ad.managedObjectContext];
[managedObj setValue:self.longitudeString forKey:@"longitude"];
[managedObj setValue:self.latitudeString forKey:@"latitude"];
[managedObj setValue:self.addressString forKey:@"address"];
[managedObj setValue:self.UDIDString forKey:@"udid"];
NSError * errorObj;
[self.ad.managedObjectContext save:&errorObj];
if (errorObj) {
NSLog(@"Something goes wrong");
}else
{
NSLog(@"Saved Successfully");
}
}
오류 예상 ')' – Marking
업데이트 답변, 지금 확인하십시오 .. – Lalji
minLon 및 maxLon에 대한 계산 오류가 있습니다. 위도는 사용하지 말고 경도 만 사용하십시오. float minLon = userLocation.coordinate. 경도 - searchDistance/fabs (cos ([self deg2rad : userLocation.coordinate. 경도]) * 69); float maxLon = userLocation.coordinate.longitude + searchDistance/fabs (cos ([self deg2rad : userLocation.coordinate. 경도]) * 69); – Andrey