我需要一种比较两个CLLocationCoordinate2D的方法,但是当我尝试使用==时,它不起作用。有人能帮我找出比较它们的最佳方法吗?
发布于 2012-04-18 05:10:56
比较任何给定结构类型的两个实例的通用方法:
memcmp(&cllc2d1, &second_cllc2d, sizeof(CLLocationCoordinate2D))或
cllc2d1.latitude == cllc2d2.latitude && cllc2d1.longitude == cllc2d2.longitude如果你真的想确保它们是完全相等的,应该是可行的。但是,考虑到纬度和经度被定义为双精度,您可能真的希望进行“足够接近”的比较:
fabs(cllc2d1.latitude - cllc2d2.latitude) <= epsilon && fabs(cllc2d1.longitude - cllc2d2.longitude) <= epsilon其中epsilon是您希望接受的任何级别的错误。
发布于 2012-08-17 06:02:32
作为对所有这些答案的一个小补充,将比较定义为预处理器定义是非常方便的:
#define CLCOORDINATES_EQUAL( coord1, coord2 ) (coord1.latitude == coord2.latitude && coord1.longitude == coord2.longitude)或者使用epsilon:
#define CLCOORDINATE_EPSILON 0.005f
#define CLCOORDINATES_EQUAL2( coord1, coord2 ) (fabs(coord1.latitude - coord2.latitude) < CLCOORDINATE_EPSILON && fabs(coord1.longitude - coord2.longitude) < CLCOORDINATE_EPSILON)这使您可以进行如下比较:
CLLocationCoordinate2D resultingCoordinate = ... a method call ...;
CLLocationCoordinate2D expectedCoordinate = CLLocationCoordinate2DMake(48.11, 11.12);
if(CLCOORDINATES_EQUAL( resultingCoordinate, expectedCoordinate)) {
NSLog(@"equal");
} else {
NSLog(@"not equal");
}另一种选择是使用内联方法,如果您不喜欢预处理器的话。
发布于 2016-07-26 06:04:26
Swift扩展:
import MapKit
extension CLLocationCoordinate2D: Equatable {}
public func ==(lhs: CLLocationCoordinate2D, rhs: CLLocationCoordinate2D) -> Bool {
return (lhs.latitude == rhs.latitude && lhs.longitude == rhs.longitude)
}从Xcode 7.3.1、Swift 2.2开始测试
https://stackoverflow.com/questions/10199133
复制相似问题