我希望将用户当前位置与其他位置匹配,无论它们是否相同。
我的逻辑:
point.coordinate = coordinate
let userLat = mapView.userLocation?.coordinate.latitude
let userLong = mapView.userLocation?.coordinate.longitude
if point.coordinate.latitude == userLat && point.coordinate.longitude == userLong
{
point.title = "You are here"
}
else
{
point.title = "\(coordinate.latitude), \(coordinate.longitude)"
}
但问题是,mapView.userLocation?.coordinate.latitude
不等于point.coordinate.latitude
。但是我在模拟器和其他cooridinate中为userLocation设置了相同的值。
我为用户位置设置的值为: Lat:28.6 长:77.35
我为其他坐标设置的值是: Lat:28.6 长:77.35
我为用户位置获得的价值是: Lat:可选 - 部分:3.4028234663852886e + 38
长:▿可选 - 部分:3.4028234663852886e + 38
我得到的其他坐标值是: Lat:28.6 长:77.35
如果有更好的逻辑来找出这个东西,那么请告诉我。
答案 0 :(得分:2)
你的点对象 - CLLocation子类的对象吗?如果没有,请从point.coordinate创建CLLocation并进行比较,如下所示。 尝试使用这种方法比较CLLocation对象而不是坐标:
let distanceThreshold: CLLocationDistance = 2.0 // in meters
if point.distanceFromLocation(mapView.userLocation!) < distanceThreshold {
point.title = "You are here"
} else {
point.title = "\(coordinate.latitude), \(coordinate.longitude)"
}
或者您可以将阈值设置为0