我有一个像这样的坐标数组(它只是一个样本):
47.554730,18.963960
47.552670,18.962850
47.552310,18.963400
47.552080,18.963720
47.551870,18.964060
47.551780,18.963840
47.551690,18.963300
47.551540,18.962310
47.551480,18.961990
47.551440,18.961800
我想过滤掉彼此太靠近的坐标以减小尺寸。我怎样才能做到这一点?
我有个主意:
将数字设置为公差范围。 遍历数组中的每个坐标,检查它们之间的差异是否小于公差范围数,如果是,则删除其中一个坐标。
这会有用吗?如果是,我怎么能在Objective-C中编码?
答案 0 :(得分:3)
您可以使用公差检查,但不应直接在纬度和经度值之间,它应该是纬度和经度所代表的地理位置之间的距离公差(以米为单位)。纬度和经度的性质意味着只能通过查看值来判断2点之间的物理距离。
要执行此操作,您可以从纬度/经度对创建CLLocation
的实例,然后使用distanceFromLocation:
来检查它们。
您需要决定如何选择要保留的位置和要删除的位置。有很多选择,其中许多选项需要多个循环以确保没有2个点彼此靠近。
答案 1 :(得分:0)
NSArray *Array1 = @[@"47.551090,18.961610",
@"47.551010,18.961600",
@"47.550910,18.961600",
@"47.550830,18.961610",
@"47.550750,18.961640",
@"47.550690,18.961680",
@"47.549980,18.962870",
@"47.549170,18.964170",
@"47.548950,18.964500",
@"47.548840,18.964620",
@"47.548710,18.964690",
@"47.548470,18.964690",
@"47.548400,18.964690",
@"47.547990,18.964720"];
NSMutableArray *finalArr=[[NSMutableArray alloc] init];
CGFloat threshhold=0.0009;
for (NSString *str in Array1) {
NSArray *temp=[str componentsSeparatedByString:@","];
if(temp!=nil && [temp count]==2){
BOOL isSame=NO;
for(NSString *s in finalArr){
NSArray *temp2=[s componentsSeparatedByString:@","];
if(([[temp objectAtIndex:0] isEqualToString:[temp2 objectAtIndex:0]]) || ((((NSString*)[temp objectAtIndex:0])).floatValue-threshhold<=(((NSString*)[temp2 objectAtIndex:0])).floatValue && (((NSString*)[temp objectAtIndex:0])).floatValue+threshhold>=(((NSString*)[temp2 objectAtIndex:0])).floatValue)){
isSame=YES;
break;
}
if([[temp objectAtIndex:1] isEqualToString:[temp2 objectAtIndex:1]]){
isSame=YES;
break;
}
}
if(isSame==NO){
[finalArr addObject:str];
}
}
}
NSLog(@"%@",finalArr);
您可以根据需要设置阈值