From 32c7805740f3cff1d12fa95e1377cf4919ab9a73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Thu, 23 Jul 2015 16:03:43 -0700 Subject: [PATCH] Ignore invalid location updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoid passing invalid locations along to the map view delegate or user location annotation. Also, If the user wants to visit the Prime Meridian or Equator, that’s their prerogative. Mapbox GL should show them where they’re at. Null Island is a different story. Fixes #1912. --- platform/ios/MGLMapView.mm | 2 +- platform/ios/MGLUserLocation.m | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/platform/ios/MGLMapView.mm b/platform/ios/MGLMapView.mm index 0b8baeff2..f4dea9bae 100644 --- a/platform/ios/MGLMapView.mm +++ b/platform/ios/MGLMapView.mm @@ -2309,7 +2309,7 @@ CLLocationCoordinate2D MGLLocationCoordinate2DFromLatLng(mbgl::LatLng latLng) { if ( ! _showsUserLocation || ! newLocation || ! CLLocationCoordinate2DIsValid(newLocation.coordinate)) return; - if ([newLocation distanceFromLocation:oldLocation] || ! oldLocation) + if (! oldLocation || ! CLLocationCoordinate2DIsValid(oldLocation.coordinate) || [newLocation distanceFromLocation:oldLocation]) { self.userLocation.location = newLocation; diff --git a/platform/ios/MGLUserLocation.m b/platform/ios/MGLUserLocation.m index 0b0cf70cb..36d71c13b 100644 --- a/platform/ios/MGLUserLocation.m +++ b/platform/ios/MGLUserLocation.m @@ -37,13 +37,13 @@ NS_ASSUME_NONNULL_END - (void)setLocation:(CLLocation *)newLocation { - if ([newLocation distanceFromLocation:_location] && newLocation.coordinate.latitude != 0 && - newLocation.coordinate.longitude != 0) - { - [self willChangeValueForKey:@"location"]; - _location = newLocation; - [self didChangeValueForKey:@"location"]; - } + if ( ! newLocation || ! CLLocationCoordinate2DIsValid(newLocation.coordinate)) return; + if ( _location && CLLocationCoordinate2DIsValid(_location.coordinate) && [newLocation distanceFromLocation:_location] == 0) return; + if (newLocation.coordinate.latitude == 0 && newLocation.coordinate.longitude == 0) return; + + [self willChangeValueForKey:@"location"]; + _location = newLocation; + [self didChangeValueForKey:@"location"]; } - (BOOL)isUpdating