2011-02-03 17 views
6

tengo a distancia en una variable de tipo CLLocationDistance i necesidad de convertirlo en una variable entera cómo puedo hacerloconversión CLLocationDistance

que tengo uso

CLLocationDistance kilometers; 

int distance = [kilometers intValue]; 

pero su error dando.

ayuda chicos

+0

El error que está recibiendo puede ser útil (para otros). Por favor inclúyalo. – KevinDTimm

Respuesta

12

https://developer.apple.com/library/mac/#documentation/CoreLocation/Reference/CLLocation_Class/CLLocation/CLLocation.html

distanceFromLocation: 

devuelve la distancia (en metros) desde el receptor a la ubicación especificada.

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location 

Parámetros

ubicación la otra ubicación.

Valor de retorno La distancia (en metros) entre las dos ubicaciones.

tipo de devolución es double no int. Y no es un NSNumber.

+0

Para aclarar, dado que es un Double (un tipo intrínseco, no un objeto) no hay método [intValue] para ejecutar. Como está dispuesto a perder precisión, simplemente asigne el valor. Si desea redondearlo, simplemente agregue .5 y luego asígnelo. – KevinDTimm

7

Esto calculará la distancia entre dos ubicaciones utilizando el CLLocationDistance. Por defecto, da los valores en metros. Para convertir a kilómetros, divida CLLocationDistance/1000.0. Para obtener millas, multiplique el CLLocationDistance*0.62137.

//Pass your current location Latitude and longitude 
        CLLocation *currentlocation = [[CLLocation alloc] initWithLatitude:13.015370f longitude:80.200393f]; 
//Pass your destination location Latitude and longitude 
CLLocation *destination = [[CLLocation alloc] initWithLatitude:37.420948f longitude:-122.09578499999998f]; 
CLLocationDistance meters = [currentlocation distanceFromLocation:destination]; 
//get distance in meters 
    NSLog(@"meters :%f", meters); 
//get distance in kilometers 
    CLLocationDistance kilometers = meters/1000.0; 
    NSLog(@"kilometers :%f", kilometers); 
//Get distance in miles 
    NSLog(@"Miles:%f",kilometers*0.62137); 
//convert kilometers to int value 
    int num=kilometers; 
+1

Agregue una explicación para mejorar la respuesta; ¡se desaconsejan las respuestas de solo código! ¡Gracias! – namezero

+1

Esto para calcular la distancia entre dos latitud y longitud mediante el uso de CLLocationDistance por defecto, da los valores en metros. Para convertir a kilómetro, divida CLLocationDistance/1000.0. Para obtener millas, multiplique CLLocationDistance * 0.62137 –

4

Swift:

var initialLocation :CLLocation? 
    var updatedUserLocation :CLLocation? 
    var distanceBetweenLocations: CLLocationDistance? 

//MK MapView Delegate 
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    updatedUserLocation = locations.last 
    distanceBetweenLocations = updatedUserLocation!.distanceFromLocation(initialLocation!) 

    //convert To Miles 
    distanceBetweenLocations = Utility.convertCLLocationDistanceToMiles(distanceBetweenLocations) 

//Setting Distance Value 
    distanceLabel.text = String(format: " Distance : %.2f ", distanceBetweenLocations!) 

    } 

Nota: tengo clase de utilidad llamada que sirve a los métodos comunes de clase de todo el proyecto. Esto es para una mejor reutilización y reducción del código.

// Utility.swift 

import UIKit 
import Foundation 
import CoreLocation 

class Utility { 

    class func convertCLLocationDistanceToMiles (var targetDistance : CLLocationDistance?) -> CLLocationDistance { 
    targetDistance = targetDistance!*0.00062137 
    return targetDistance! 
    } 
    class func convertCLLocationDistanceToKiloMeters (var targetDistance : CLLocationDistance?) -> CLLocationDistance { 
    targetDistance = targetDistance!/1000 
    return targetDistance! 
    } 

} 
1

SWIFT 4

tarde a este partido, pero también se puede crear una extensión de esta manera:

CLLocationDistance.swift

import UIKit 
import CoreLocation 

extension CLLocationDistance { 
    func inMiles() -> CLLocationDistance { 
     return self*0.00062137 
    } 

    func inKilometers() -> CLLocationDistance { 
     return self/1000 
    } 
} 

Se le podría llamar como sigue:

distance.inKilometers() 

Espero que esto ayude a cualquiera a tropezar con esto!