3 Stimmen

Verwendung von distanceFromLocation: für keine CLLocation-Objekte?

Ich habe eine Klasse namens FGLocation definiert, die mit dem MKAnnotation-Protokoll konform ist. Ich habe festgestellt, dass ich die Methode distanceFromLocation: verwenden kann, die als Methode für die Klasse CLLocation definiert ist. Wie Sie unten sehen können, erstelle ich zwei temporäre CLLocation-Objekte, um die Berechnung durchzuführen, aber ich komme nicht umhin zu denken, dass ich vielleicht einen besseren / einfacheren Weg vermisse. Hat jemand einen Kommentar zu dem, was ich tue oder wie ich es besser machen könnte?

// IS THERE A BETTER WAY TO DO THIS?
FGLocation *root = [annotations objectAtIndex:counter-1];
FGLocation *leaf = [annotations objectAtIndex:counter];

CLLocation *rootLocation = [[CLLocation alloc] initWithLatitude:[root coordinate].latitude longitude:[root coordinate].longitude];
CLLocation *leafLocation = [[CLLocation alloc] initWithLatitude:[leaf coordinate].latitude longitude:[leaf coordinate].longitude];                                
CLLocationDistance thisDistance = [rootLocation distanceFromLocation:leafLocation];
[rootLocation release];
[leafLocation release];

NB: mein FGLocation-Objekt ist definiert als (siehe unten) Ich bemerkte in den Docs, dass ich nicht CLLocation subclassing sein sollte.

@interface FGLocation : NSObject <MKAnnotation> {

3voto

xyzzycoder Punkte 1821

Ich denke, dass das, was Sie tun, ein fairer Ansatz ist, mit der möglichen Ausnahme, dass Sie vielleicht eine Art von Caching-Mechanismus/Schwellenwert für die Neuberechnung implementieren möchten, wenn Sie dies häufig oder für viele Punkte tun. Die genaue Berechnung von Entfernungen beinhaltet nicht-euklidische Geometrie und ist rechenintensiv. http://en.wikipedia.org/wiki/Haversine_formula

Je nachdem, wo sich die Punkte auf dem Globus befinden und ob die Genauigkeit von großer Bedeutung ist, können Sie auch so tun, als ob Sie in einem euklidischen Raum arbeiten und den Satz des Pythagoras nutzen. Ich habe diese Art von Schema verwendet, um einen groben Filter über einen großen Datensatz zu erstellen und dann auf genauere Berechnungen für Punkte zurückzugreifen, die den Filter passieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X