Можно узнать, находится ли точка CLL в MKCoordinateRegion?

У меня есть точка CLLocation (lat / long), и я хочу знать, находится ли она в определенном MKCoordinateRegion. Я хотел бы знать, в каком регионе находится ранее сделанная точка CLL.

Благодарю.

Я нашел решение.

MKCoordinateRegion region = self.mapView.region; CLLocationCoordinate2D location = user.gpsposition.coordinate; CLLocationCoordinate2D center = region.center; CLLocationCoordinate2D northWestCorner, southEastCorner; northWestCorner.latitude = center.latitude - (region.span.latitudeDelta / 2.0); northWestCorner.longitude = center.longitude - (region.span.longitudeDelta / 2.0); southEastCorner.latitude = center.latitude + (region.span.latitudeDelta / 2.0); southEastCorner.longitude = center.longitude + (region.span.longitudeDelta / 2.0); if ( location.latitude >= northWestCorner.latitude && location.latitude <= southEastCorner.latitude && location.longitude >= northWestCorner.longitude && location.longitude <= southEastCorner.longitude ) { // User location (location) in the region - OK :-) NSLog(@"Center (%f, %f) span (%f, %f) user: (%f, %f)| IN!", region.center.latitude, region.center.longitude, region.span.latitudeDelta, region.span.longitudeDelta, location.latitude, location.longitude); }else { // User location (location) out of the region - NOT ok :-( NSLog(@"Center (%f, %f) span (%f, %f) user: (%f, %f)| OUT!", region.center.latitude, region.center.longitude, region.span.latitudeDelta, region.span.longitudeDelta, location.latitude, location.longitude); } 

Был аналогичный вопрос. Ответ был правильно ответил – Как проверить, содержит ли MKCoordinateRegion CLLocationCoordinate2D без использования MKMapView?

Удачи 🙂

Это кажется правильным, но наоборот. Широта северо-западного угла региона будет больше, чем центр, поскольку широта увеличивается по мере продвижения на север. Долгота верна. Таким образом, углы, рассчитанные здесь, переключаются, северо-запад. Корнер на самом деле является юго-западным углом, а юго-восточный Корнер на самом деле является северо-восточным углом. Но код работает, потому что оператор if тоже обратный. Это должно быть больше похоже на

 CLLocationCoordinate2D newMapCenter = self.mapView.centerCoordinate; CLLocationCoordinate2D startingCenter = self.startingRegion.center; CLLocationCoordinate2D northWestCorner, southEastCorner; northWestCorner.latitude = startingCenter.latitude + (self.startingRegion.span.latitudeDelta / 2.0); northWestCorner.longitude = startingCenter.longitude - (self.startingRegion.span.longitudeDelta / 2.0); southEastCorner.latitude = startingCenter.latitude - (self.startingRegion.span.latitudeDelta / 2.0); southEastCorner.longitude = startingCenter.longitude + (self.startingRegion.span.longitudeDelta / 2.0); if (newMapCenter.latitude <= northWestCorner.latitude && newMapCenter.latitude >= southEastCorner.latitude && newMapCenter.longitude >= northWestCorner.longitude && newMapCenter.longitude <= southEastCorner.longitude) { // still in original region NSLog(@"same region"); } else { // new region NSLog(@"new region"); } 

Поэтому ответ правильный, но и неправильный. Но он работает, поэтому я думаю, что это более правильно.