Καθορισμός απόσταση χρησιμοποιώντας mapkit

ψήφοι
5

Πώς είναι ένα 1000ft ή 1/2 απόσταση μιλίων καθορίζεται με mapkit; Είτε μια ακτίνα από κάποια καρφίτσα ή η απόσταση μεταξύ των δύο ακίδες.

Για παράδειγμα, Ι κεντράρετε το χάρτη στην πείρο Α Pins Β, C, και D είναι επίσης στο χάρτη σε διάφορες αποστάσεις από τον ακροδέκτη Α Β και C είναι εντός 1/2 μίλι από Α, αλλά το D είναι 1 μίλι μακριά. Θα ήθελα να ξέρω ότι Β και Γ βρίσκονται σε 1/2 μίλι από Α Πώς μπορώ να υπολογίσω αυτό;

Δημοσιεύθηκε 10/03/2010 στις 02:57
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
13

Από τη στιγμή που έχετε δηλώσει ότι τα δύο διαφορετικά σημεία είναι «καρφίτσες», Πάω να υποθέσουμε ότι χρησιμοποιείτε MKPinAnnotationView (ή κάποια άλλη άποψη σχολιασμό). Αν όχι, θα πάμε να πρέπει να πάρει την θέση κάποιο άλλο τρόπο.

Αν έχετε δείκτες στα αντικείμενα σχόλιο για αυτές τις θέσεις, τότε μπορείτε εύκολα να καλέσετε -coordinateτους, να δημιουργήσουν CLLocations από αυτές τις συντεταγμένες (χρήση -initWithLatitude:longitude:), και στη συνέχεια χρησιμοποιήστε τη μέθοδο -getDistanceFromγια να ανακτήσετε την απόσταση σε μέτρα. Από εκεί, είναι μια εύκολη μετατροπή σε μίλια. Συνολικά, ο κώδικας θα είναι κάπως έτσι:

CLLocationCoordinate2D pointACoordinate = [pointAAnnotation coordinate];
CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude];
CLLocationCoordinate2D pointBCoordinate = [pointBAnnotation coordinate];
CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude];
double distanceMeters = [pointALocation getDistanceFrom:pointBLocation];
double distanceMiles = (distanceMeters / 1609.344);

Θα καταλήξετε με την απόσταση σε μίλια, και να το συγκρίνετε από εκεί. Η ελπίδα αυτό βοηθά.

Απαντήθηκε 10/03/2010 στις 08:31
πηγή χρήστη

ψήφοι
12

getDistanceFrom είναι πλέον παρωχημένο τόσο εδώ είναι μια εναλλακτική λύση για όποιον θέλει να το κάνει αυτό.

CLLocationCoordinate2D pointACoordinate = [pointAAnnotation coordinate];
CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude];  

CLLocationCoordinate2D pointBCoordinate = [pointBAnnotation coordinate];
CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude];  

float distanceMeters = [pointALocation distanceFromLocation:pointBLocation];
float distanceMiles = (distanceMeters / 1609.344);  

[pointALocation release];
[pointBLocation release];  

Όπως και παραπάνω, μπορείτε να χρησιμοποιήσετε floatαντί doubleκαι θα μπορούσε να ρίξει τα αποτελέσματα σε έναν int αν δεν απαιτούν την ακρίβεια του float, όπως αυτό:

int distanceCastToInt = (int) [pointALocation distanceFromLocation:pointBLocation];

Το intείναι βολικό αν ήθελε να δώσει μια γενική ιδέα της απόστασης στο σχολιασμό όπως έτσι:

pointAAnnotation.title = @"Point A";
pointAAnnotation.subtitle = [NSString stringWithFormat: @"Distance: %im",distanceCastToInt];

Ο υπότιτλος του σχολιασμού θα διαβάσετε «Απόσταση: 50», για παράδειγμα.

Απαντήθηκε 22/02/2011 στις 02:37
πηγή χρήστη

ψήφοι
0

Αυτό είναι Swift 3 ισοδύναμο του δίνεται απάντηση:

let pointACoordinate = pointAAnnotation.coordinate
let pointALocation = CLLocation(latitude: pointACoordinate.latitude, longitude: pointACoordinate.longitude)
let pointBCoordinate = pointBAnnotation.coordinate
let pointBLocation = CLLocation(latitude: pointBCoordinate.latitude, longitude: pointBCoordinate.longitude)
let distanceMeters = pointALocation.distance(from: pointBLocation)
let distanceMiles = (distanceMeters / 1609.344)
Απαντήθηκε 10/11/2016 στις 22:21
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more