current annotation iphone mkmapview

iphone - annotation - Convierte el valor del rango en metros en una vista de mapa



mapkit swift 4 (5)

Aquí hay una forma más fácil (para obtener ancho y alto en metros) ...

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { MKMapRect rect = mapView.visibleMapRect; double mapWidth = MKMapRectGetWidth(rect) / 10; double mapHeight = MKMapRectGetHeight(rect) / 10; }

Cada vez que el usuario acerca o aleja el mapa, necesito saber cuántos metros están actualmente representados en el mapa (ancho o alto).

Lo que necesito es la función inversa de MKCoordinateRegionMakeWithDistance para calcular la distancia representada por el tramo del mapa actual.

Probé el siguiente código pero obtengo resultados erróneos:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { MKMapRect mRect = self.map.visibleMapRect; MKMapPoint northMapPoint = MKMapPointMake(MKMapRectGetMidX(mRect), MKMapRectGetMinY(mRect)); MKMapPoint southMapPoint = MKMapPointMake(MKMapRectGetMidX(mRect), MKMapRectGetMaxY(mRect)); self.currentDist = MKMetersBetweenMapPoints(northMapPoint, southMapPoint); }

Si configuro la región del mapa a 1500 metros obtengo algo así como 1800 como resultado ..

Gracias por tu ayuda, Vincent


En realidad fue un error realmente estúpido, si hago la misma operación en el eje X, obtengo el valor correcto:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { MKMapRect mRect = self.map.visibleMapRect; MKMapPoint eastMapPoint = MKMapPointMake(MKMapRectGetMinX(mRect), MKMapRectGetMidY(mRect)); MKMapPoint westMapPoint = MKMapPointMake(MKMapRectGetMaxX(mRect), MKMapRectGetMidY(mRect)); self.currentDist = MKMetersBetweenMapPoints(eastMapPoint, westMapPoint); }


Gracias por el post de todos. Tengo una aplicación que requería un radio de una milla para averiguar cuántos registros de ubicación obtener, por lo que me resultó útil. Aquí está el equivalente veloz para cualquiera que pueda encontrar esto en el futuro.

let mRect: MKMapRect = self.mapView.visibleMapRect let eastMapPoint = MKMapPointMake(MKMapRectGetMinX(mRect), MKMapRectGetMidY(mRect)) let westMapPoint = MKMapPointMake(MKMapRectGetMaxX(mRect), MKMapRectGetMidY(mRect)) let currentDistWideInMeters = MKMetersBetweenMapPoints(eastMapPoint, westMapPoint) let milesWide = currentDistWideInMeters / 1609.34 // number of meters in a mile println(milesWide)


Swift 4

extension MKMapView { func regionInMeter() -> CLLocationDistance { let eastMapPoint = MKMapPointMake(MKMapRectGetMinX(visibleMapRect), MKMapRectGetMidY(visibleMapRect)) let westMapPoint = MKMapPointMake(MKMapRectGetMaxX(visibleMapRect), MKMapRectGetMidY(visibleMapRect)) return MKMetersBetweenMapPoints(eastMapPoint, westMapPoint) } }


- (void)mapView:(MKMapView *)map regionDidChangeAnimated:(BOOL)animated { MKCoordinateSpan span = mapView.region.span; NSLog(@" 1 = ~111 km -> %f = ~ %f km ",span.latitudeDelta,span.latitudeDelta*111); }

De acuerdo con los documentos http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MapKitDataTypesReference/Reference/reference.html ,

LatitudeDelta

La cantidad de distancia de norte a sur (medida en grados) que se mostrará en el mapa. A diferencia de las distancias longitudinales, que varían según la latitud, un grado de latitud es siempre de aproximadamente 111 kilómetros (69 millas).