objective - ios google maps tutorial
MapView en iOS6 no mostrarĂ¡ ciertos niveles de zoom en latitud> 75 norte (4)
Este código establece un nivel de zoom predeterminado centrado alrededor de una ubicación específica en viewDidLoad
. El código funciona bien en versiones anteriores de iOS:
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];
Sin embargo, en iOS6 para ubicaciones con una latitud superior a ~ 75 (> 75.1), la aplicación falla con el siguiente mensaje:
*** Terminating app due to uncaught exception ''NSInvalidArgumentException'', reason:
''Invalid Region <center:nan, nan span:nan, nan>''
Encontré que para el nivel de zoom dado, mapView
no puede establecer una MKCoordinateRegion
apropiada internamente. [mapView regionThatFits:region]
devuelve todos los valores como nan
. Si uso la variable de region
directamente, solo muestra el mapa predeterminado (el mundo entero).
Después de algunas pruebas, descubrí que al ajustar la visibleDistance
puedo hacer que el código funcione correctamente. La distancia mágica parece ser ligeramente superior a 20 kilómetros (en algún lugar entre 22 y 23 km para una serie de latitudes y valores de latitud Delta). Esto sucede solo en las latitudes del norte (-80 funciona bien).
Los mapas funcionan en cualquier lugar después del posicionamiento inicial. Parece que Apple cambió la forma en que se inicializan las regiones visibles del mapa. Estoy usando un nivel de zoom más alto para la región afectada como solución alternativa. ¿Hay alguna otra manera de hacer que funcione correctamente?
Encontré una versión de este código en un sitio web chino y parece funcionar para mí. Solo pasa por alto sizeThatFits cuando se devuelve la NAN, por lo tanto, solo se ajusta si es necesario, y si Apple repara este error (suponiendo que es un error), entonces no será un problema en absoluto.
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(coordinate, mapSizeMeters, mapSizeMeters);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];
if (isnan(adjustedRegion.center.latitude)) {
// iOS 6 will result in nan. 2012-10-15
adjustedRegion.center.latitude = viewRegion.center.latitude;
adjustedRegion.center.longitude = viewRegion.center.longitude;
adjustedRegion.span.latitudeDelta = 0;
adjustedRegion.span.longitudeDelta = 0;
}
[mapView setRegion:adjustedRegion animated:YES];
Estaba teniendo problemas con mi iPhone4S y la consola reveló valores de nan para la región. Después de probar 7 soluciones diferentes de SO y varias sugerencias de Apple DTS, lo resolví eliminando la llamada regionThatFits. Simplemente utilicé
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion adjustedRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, visibleDistance, visibleDistance);
[_mapView setRegion:adjustedRegion animated:YES];
Aparentemente hay un problema con el método regionThatFits.
CLLocationCoordinate2D southwest, northeast;
southwest.latitude = 34.172684;
southwest.longitude = -118.604794;
northeast.latitude = 34.236144;
northeast.longitude = -118.500938;
BSForwardGeocoderCoordinateBounds *bounds = [BSForwardGeocoderCoordinateBounds boundsWithSouthWest:southwest northEast:northeast];
prueba esto....
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];
Funcionará..