Meghatározása távolságát mapkit

szavazat
5

Hogyan készül a 1000ft vagy 1/2 mérföld távolságot meghatározni mapkit? Vagy egy sugara néhány csap vagy a távolság a két csapokat.

Például, azt a térkép közepét a pin A. Pins B, C, és D is a térképen különböző távolságokban pin A. B és C belül vannak 1/2 mérföldre a A, hanem D 1 mérföld távolságra található. Szeretném tudni, hogy a B és C belül 1/2 mérföldre a A. Hogyan kiszámítható, hogy?

A kérdést 10/03/2010 02:57
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
13

Mivel korábban azt állította, hogy a két különböző pontok „csapok”, megyek, hogy vállalja az Ön által használt MKPinAnnotationView (vagy más magyarázat nézet). Ha nem, akkor mész, hogy kap a helyét valami más módon.

Ha mutatókat a kommentár objektumokat ezeken a helyeken, akkor könnyen hívja -coordinateőket, hozzon létre CLLocations ezekből koordinátákat (a -initWithLatitude:longitude:), majd a módszer -getDistanceFromletölteni a távolságot méterben. Onnan, hogy egy egyszerű átalakítás mérföld. Mindent egybevetve, a kód a következőképpen néz ki:

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

Majd a végén a távolság mérföld, és össze tudja hasonlítani onnan. Remélem ez segít.

Válaszolt 10/03/2010 08:31
a forrás felhasználó

szavazat
12

getDistanceFrom mára elavulttá, így itt egy alternatív válasz mindazok számára, akik ezt.

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

Mint fent, akkor használja floatahelyett, doubleés meg tudná leadott eredmények egy int, ha nincs szükség a pontosság az floatígy néz ki:

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

A intpraktikus, ha azt akarta, hogy egy durva ötlet távolság a kommentár így:

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

Az alcím A kommentár lenne: „Távolság: 50m” például.

Válaszolt 22/02/2011 02:37
a forrás felhasználó

szavazat
0

Ez Swift 3 ekvivalens az adott választ:

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)
Válaszolt 10/11/2016 22:21
a forrás felhasználó

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