如何根据当前位置找到最近的100米纬度和经度,我在SQLITE3中创建了一个数据库,其中包含一组纬度和经度以及相应的位置名称。根据当前位置,我想在物镜C中获取最近的100米纬度和经度, 我使用以下代码获取当前位置
- (void)viewDidLoad {
[super viewDidLoad];
databaseName = @"searchdata.sql";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDir = [documentPaths objectAtIndex:0];
databasePath = [documentDir stringByAppendingPathComponent:databaseName];
[self checkAndCreateDatabase];
[self readDataFromDatabase];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
int degrees = newLocation.coordinate.latitude;
double decimal = fabs(newLocation.coordinate.latitude - degrees);
int minutes = decimal * 60;
double seconds = decimal * 3600 - minutes * 60;
NSString *lat = [NSString stringWithFormat:@"%d° %d' %1.4f\"",
degrees, minutes, seconds];
NSLog(@" Current Latitude : %@",lat);
//latLabel.text = lat;
degrees = newLocation.coordinate.longitude;
decimal = fabs(newLocation.coordinate.longitude - degrees);
minutes = decimal * 60;
seconds = decimal * 3600 - minutes * 60;
NSString *longt = [NSString stringWithFormat:@"%d° %d' %1.4f\"",
degrees, minutes, seconds];
NSLog(@" Current Longitude : %@",longt);
//longLabel.text = longt;
}
所以如何获取或如何计算周围100米纬度和经度并显示它。
感谢您帮助我使用以下公式
-(double)kilometresBetweenPlace1:(CLLocationCoordinate2D) place1 andPlace2:(CLLocationCoordinate2D) place2 {
double dlon = convertToRadians([pLong intValue] - [longt intValue]);
double dlat = convertToRadians([pLat intValue] - [lat intValue]);
double a = ( pow(sin(dlat / 2), 2) + cos(convertToRadians([lat intValue]))) * cos(convertToRadians([pLat intValue])) * pow(sin(dlon / 2), 2);
double angle = 2 * asin(sqrt(a));
return angle * RADIO;
}
并在返回时获得以下输出8505.369547,我只是感到困惑,实际上我得到的是什么。
答案 0 :(得分:3)
也许CoreLocation框架可以帮助您解决这个问题?似乎以下方法是考虑到您的问题:
- (id)initCircularRegionWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius identifier:(NSString *)identifier
您可以使用以下方法测试数据库中的坐标是否属于某个区域:
- (BOOL)containsCoordinate:(CLLocationCoordinate2D)coordinate
我想当你的数据库包含很多位置时,上述情况并不理想。但也许可以根据一些最小和最大纬度/经度值过滤出一组要测试的位置。
编辑按要求提供示例(不要忘记导入 CoreLocation 框架):
- (void)startTest
{
#define COORDS_COUNT 4
#define RADIUS 10000.0f
CLLocationCoordinate2D coords[COORDS_COUNT] = {
CLLocationCoordinate2DMake(52.000004, 4.100002),
CLLocationCoordinate2DMake(53.000009, 4.000003),
CLLocationCoordinate2DMake(52.000001, 4.500008),
CLLocationCoordinate2DMake(52.000002, 3.900900),
};
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(52.0f, 4.0f); // Amsterdam
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:center radius:RADIUS identifier:@"Amsterdam"];
for (int i = 0; i < COORDS_COUNT; i++)
{
CLLocationCoordinate2D coord = coords[i];
if ([region containsCoordinate:coord])
{
NSLog(@"location %f, %f is within %.0f meters of coord %f, %f", coord.latitude, coord.longitude, RADIUS, center.latitude, center.longitude);
}
else
{
NSLog(@"location %f, %f is not within %.0f meters of coord %f, %f", coord.latitude, coord.longitude, RADIUS, center.latitude, center.longitude);
}
}
}
编辑2:我意识到这不是您要求的答案,但在我看来,这就是您所需要的。可以想象,在任何坐标附近最近的100米纬度/经度由圆形区域中几乎无限量的坐标组成。我的猜测是你想在数据库中找到一些坐标附近的对象,上面的代码可以帮助你实现这个目标。您可以从数据库中检索一组结果,并测试它们是否在某个坐标附近。
编辑3:以下代码可能正是您所需要的:
CLLocation *center = [[CLLocation alloc] initWithLatitude:52.0f longitude:4.0f]; // Amsterdam
CLLocation *location1 = [[CLLocation alloc] initWithLatitude:52.000004f longitude:4.100002f];
CLLocationDistance distance = [center distanceFromLocation:location1];
NSLog(@"%f", distance);
编辑4 关于您的表格视图的自定义对象的问题,请使用以下内容:
@interface Location : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@end
@implementation Location
@synthesize name, coordinate;
@end
答案 1 :(得分:0)
查看此链接,其中包含一些与地理位置相关的服务。可能会帮助你..