2017-02-09 3 views
1

Ich lade und Stifte hinzufügen, um eine Xamarin Forms Map.Xamarin Forms Map - Zentrum und Entfernung Update Mehrere Pins

die folgende Methode unter Verwendung des zentralen Breite/Länge zu erhalten:

public static Position GetCenter(List<Position> geoCoordinates) 
    { 
     if (geoCoordinates.Count == 1) 
     { 
      return geoCoordinates.Single(); 
     } 

     double x = 0; 
     double y = 0; 
     double z = 0; 

     foreach (var geoCoordinate in geoCoordinates) 
     { 
      var latitude = geoCoordinate.Latitude * Math.PI/180; 
      var longitude = geoCoordinate.Longitude * Math.PI/180; 

      x += Math.Cos(latitude) * Math.Cos(longitude); 
      y += Math.Cos(latitude) * Math.Sin(longitude); 
      z += Math.Sin(latitude); 
     } 

     var total = geoCoordinates.Count; 

     x = x/total; 
     y = y/total; 
     z = z/total; 

     var centralLongitude = Math.Atan2(y, x); 
     var centralSquareRoot = Math.Sqrt(x * x + y * y); 
     var centralLatitude = Math.Atan2(z, centralSquareRoot); 

     var dtoReturn = new Position(centralLatitude * 180/Math.PI, centralLongitude * 180/Math.PI); 

     return dtoReturn; 
    } 

Das bringt mich auf die MITTE:

 map.MoveToRegion(MapSpan.FromCenterAndRadius(CENTER, Distance.FromMiles(X)); 

Meine Frage ist in Bezug auf den zweiten Parameter für Radius. Wie berechnet man den Radius am besten in Meilen?

Distance.FromMiles(X) 
+0

Sie haben das Zentrum der Standorte, also für einen Radius möchten Sie nicht den Punkt finden, der am weitesten vom Zentrum entfernt ist und die Entfernung zwischen diesem Punkt und dem Zentrum verlassen? Wie groß ist Ihr potenzieller Datensatz? –

+0

Hey @ deckertron_9000, genau das mache ich jetzt! Allerdings funktioniert es anscheinend nicht richtig, wenn die Punkte ein paar hundert Meilen voneinander entfernt sind. Ich wusste nicht, ob es einen präziseren Weg gab. – aherrick

Antwort

1

Sie können wie unten MapSpan vom Zentrum, latitudeDegrees und longitudeDegrees erstellen.