Stanovení vzdálenosti pomocí mapkit

hlasů
5

Jak je 1.000 stop nebo 1/2 míle vzdálenost stanovena s mapkit? Buď poloměr z nějakého pinu nebo vzdálenost mezi dvěma kolíky.

Například jsem se středem mapy pin A. Pins B, C a D jsou také na mapě v různých vzdálenostech od kolíků A, B a C jsou v 1/2 míle od místa A, ale D je 1 míle daleko. Chtěl bych vědět, že B a C jsou v rozmezí 1/2 míle od A. Jak mohu spočítat, že?

Položena 10/03/2010 v 02:57
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
13

Vzhledem k tomu, že jste říkal, že dva různé body jsou „kolíky“, budu předpokládat, že používáte MKPinAnnotationView (nebo nějaký jiný názor, anotace). Pokud ne, budete muset dostat umístění jiným způsobem.

Máte-li ukazatele na objekty anotace na těchto místech, můžete snadno volat -coordinatena ně, vytvářet CLLocations z těchto souřadnic (za použití -initWithLatitude:longitude:), a potom použít metodu -getDistanceFromzískat vzdálenost v metrech. Odtud je to snadný převod na míle daleko. Všichni říkali, kód bude vypadat nějak takto:

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);

Skončíte s vzdálenost v mílích, a lze jej porovnat odtamtud. Snad to pomůže.

Odpovězeno 10/03/2010 v 08:31
zdroj uživatelem

hlasů
12

getDistanceFrom je nyní zastaralé, takže tady je alternativní řešení pro každého, kdo hledá, jak toho dosáhnout.

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];  

Jak je uvedeno výše, můžete použít floatmísto doublea ty by mohly obsazení výsledky do int, pokud nevyžadují přesnost floattak, jako je:

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

intJe užitečné, pokud jste chtěli dát hrubou představu o vzdálenosti v anotaci jako tak:

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

Podtitul anotace by zněl „Vzdálenosti: 50m“ například.

Odpovězeno 22/02/2011 v 02:37
zdroj uživatelem

hlasů
0

To je Swift 3 ekvivalent dané odpovědi:

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)
Odpovězeno 10/11/2016 v 22:21
zdroj uživatelem

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