2016-05-25 3 views
2

Ich habe zwei Pins auf der Karte mit langen und breiten und ich möchte den Abstand zwischen ihnen sehen. Das ist was ich bisher habe.Wie kann ich den Abstand zwischen zwei Pins in Xamarin-Formen sehen und die Entfernung als String erhalten?

 var myPin = new Pin(); 
     myPin.Label = "pin1"; 
     myPin.Address = "test1"; 
     myPin.Position = new Position(37.797513, -122.402068); 

     myPin.Label = "pin2"; 
     myPin.Address = "test2"; 
     myPin.Position = new Position(37.7, -122.3); 

     mymap.Pins.Add(myPin); 

Also zwei verschiedene Pins auf meiner Karte. Wie kann ich die Entfernung zwischen diesen beiden in km sehen? Mein Ziel ist es, ein Etikett mit der Entfernung (km) als Text zu erstellen.

(Ich habe eine Customer-Renderer-Basis bereit, falls die Entfernungsfunktion nur über einen Renderer gelöst werden kann).

+0

möchten Sie einfach eine Linie zwischen den Punkten ziehen? Oder eine Route berechnen? Oder einfach ein Etikett mit Abstand darauf fallen lassen? – Jason

+0

ein Etikett mit Abstand darauf. aktualisiert den Beitrag darüber, um klarer zu sein – medvedo

+1

die Standardformulare Karte unterstützt das nicht. Sie müssten dafür einen benutzerdefinierten Renderer erstellen. Sie müssten wahrscheinlich auch eine native Plattformmethode verwenden, um die Entfernung zu berechnen. – Jason

Antwort

7

wenn u zwei Stifte haben Sie haben ihre Längen- und Breitengradwerte, so kann die Entfernung zwischen em Code unten (aus geodatasource.com)

private double distance(double lat1, double lon1, double lat2, double lon2, char unit) { 
    double theta = lon1 - lon2; 
    double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta)); 
    dist = Math.Acos(dist); 
    dist = rad2deg(dist); 
    dist = dist * 60 * 1.1515; 
    if (unit == 'K') { 
    dist = dist * 1.609344; 
    } else if (unit == 'N') { 
    dist = dist * 0.8684; 
    } 
    return (dist); 
} 

private double deg2rad(double deg) { 
    return (deg * Math.PI/180.0); 
} 

private double rad2deg(double rad) { 
    return (rad/Math.PI * 180.0); 
} 

so dass im Grunde Sie müssen nur eine Startreferenz von lat Verwendung Berechnen/Long-Wert von wo aus Sie Referenz für weitere Stift nehmen diese Distanz als Etikett zeigen

+0

Es war ein bisschen eine schwierige mathematische Operation. Was ich nicht lösen kann, ist die Längeneinheit, die mit return (dist) zurückgegeben wird. Was kann "double dist" getan werden, um dies in Kilometer umzuwandeln? –

0

Es gibt einen in die Location Klasse gebaut ist

public static Void DistanceBetween (Double startLatitude, Double startLongitude, Double endLatitude, Double endLongitude, Single[] results) 

diese Option Siehe auch die Corelocation-Klasse

Calculate distance between two positions

Verwandte Themen