desarrollo de mapas ios cómo calcular la pendiente
//
//ViewController.m
//ios viene con anotaciones de mapas
//
//Wang Mumu creado el 15/12/3.
//////////////////
//////////////////*
Importar biblioteca
Antes de hacer referencia al mapa, intente probarlo en una máquina real. Si es un simulador, simplemente haga clic en el botón de la imagen de ubicación debajo de xcode cuando el programa se esté ejecutando.
Necesita usar información en. info.plist Agregue el campo NSLocationWhenInUseUsageDescription o NSLocationAlwaysUsageDescription. Donde:
NSLocationWhenInUseUsageDescription significa que la aplicación puede buscar información de ubicación actualizada cuando está en primer plano.
NSLocationAlwaysUsageDescription indica que la aplicación puede obtener datos de ubicación actualizados tanto en primer plano como en segundo plano (suspendido o finalizado).
*/
#import "ViewController.h"
#import
#import
@interface ViewController ()
{
MKMapView *_mapView;
CLLocationManager * locationManager;
CLLocation *ubicación;
}
@end
@implementation ViewController
- (void ) viewDidLoad {
[super viewDidLoad];
// Realice cualquier configuración adicional después de cargar la vista (generalmente desde una plumilla).
scrollEnabled = YES;
_mapView.delegate = self;
[self.view addSubview:_mapView];
if([[UIDevice currentDevice].systemVersion floatValue ] > 8.0f)
{
[self getUserLocation];
}
// LongPressGesture LongPressAddTap
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(lpgrClick:)];
[_ mapView addGestureRecognizer:lpgr];
}
/Obtener ubicación actual
- (void)getUserLocation
{
locationManager = [[ CLLocationManager alloc] init];
locationManager.delegate = self;
//kCLLocationAccuracyBest: mayor precisión cuando el dispositivo funciona con batería
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
locationManager.distanceFilter = 50.0f;
if ((([[[[UIDevice currentDevice] systemVersion] doubleValue] >= 8.0))
{
[locationManager requestAlwaysAuthorization];
}
// Actualizar ubicación
[locationManager startUpdatingLocation];
}
#pragma mark-CLLocationManagerDelegate Después de la actualización de ubicación devolución de llamada
-(void) locationManager:(CLLocationManager *)manager didUpdateLocations: (NSArray *)ubicaciones
{
/Detener actualización de ubicación
[locationManager stopUpdatingLocation];
CLLocation *loc = [ubicaciones firstObject];
CLLocationCoordinate2D theCoordinate;
// Longitud /latitude después de la actualización de la ubicación
theCoordinate.longitudeDelta=0.01;
//Establece el centro y el rango de visualización del mapa
MKCoordinateRegion theRegion;
elReg
ion.center=theCoordinate;
theRegion.span=theSpan;
[_mapView setRegion.theRegion];
ubicación = [ubicaciones últimoObjeto];
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location completeHandler: ^(NSArray *array, NSError *error)
{ p>
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location completeHandler:^(NSArray *array, NSError *error) {
if (array.count & gt; 0)
{
CLPlacemark *placemark = [array objectAtIndex:0];
// Muestra todos los valores obtenido en la etiqueta Información
NSLog(@"%@",placemark.administrativeArea);
// Obtener información de la ciudad
NSString *city = placemark. administrativoArea;
p>
if (!city) {
// La información de la ciudad de los cuatro municipios principales no se puede obtener localmente y solo se puede obtener obteniendo la provincia (si la ciudad está vacía, se puede llamar municipio)
city = placemark.administrativeArea;
}
NSLog(@"Ciudad actual:%@ ",ciudad);
//Establezca el tipo de mapa que se mostrará y el tipo de mapa que se mostrará según la ubicación.
/Establezca el tipo de visualización del mapa y muestre el mapa de acuerdo con la posición del rango de la chincheta grande
MKPointAnnotation *pinAnnotation = [[MKPointAnnotation alloc] init];
pinAnnotation.coordinate = theCoordinate ;
pinAnnotation.title = ciudad;
[_mapView addAnnotation:pinAnnotation];
}
else if (error == nil && amp [recuento de matrices] == 0)
{
NSLog(@"No se devolvieron resultados.");
} p>
De lo contrario, if (error != nil)
{
NSLog(@"Se produjo un error = %@", error);
}
}];
}];
}];
;
} p>
// Este método se llama cada vez que se agrega un pin y le permite diseñar el pin
- (MKAnnotationView *)mapView: (MKMapView *)mapView viewForAnnotation:(id
{
// Determina si el pin está en el origen.
Si es así, no se agrega ningún pin
if([annotation isKindOfClass:[mapView.userLocation class]])
return nil;
static NSString *annotationName = @" anotación";
MKPinAnnotationView *anView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier.annotationName];
if(anView == nil)
{
anView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:annotationName];
}
anView.rightCalloutAccessoryView puede configurar la vista correcta
return anView;
}
// Mantenga presionado para agregar un evento de pin
- (void)lpgrClick:(UILongPressGestureRecognizer *)lpgr
{
// Asegúrate de que el pin solo caiga cuando comience la pulsación larga
if(lpgr.state == UIGestureRecognizerStateBegan)
{ p>
// Obtener el punto primero
CGPoint point = [lpgr locationInView:_mapView];
// Convertir el punto a coordenadas de latitud y longitud
CLLocationCoordinate2D center = [_mapView convertPoint: point toCoordinateFromView:_mapView];
MKPointAnnotation *pinAnnotation = [[ MKPointAnnotation alloc] init];
pinAnnotation.coordinate = center;
pinAnnotation .title = @"pulsación larga";
[_mapView addAnnotation :pinAnnotation];
}
}
//Calcular la distancia entre dos ubicaciones
- (void)locationManager:(CLLocationManager *)manager didFailWithError: ( NSError *)error{
NSLog(@"%@",error );
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Maneja cualquier recurso recreable.
}
@end