2017-02-09 6 views
1

Xamarin Forms Mapにロードしてピンを追加しています。Xamarinフォームマップ - センターと距離の更新複数のピン

中央緯度/経度を取得するには、以下の方法を使用する:

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

これは私にCENTERを取得します。

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

私の質問はRadiusのための二番目のパラメータに関してれます。半径を半径で計算する最良の方法は何ですか?

Distance.FromMiles(X) 
+0

あなたは半径の場合、中心から最も遠い点を見つけて、その点と中心の間の距離を外したいとは思わないでしょうか? 潜在的なデータセットの大きさはどれくらいですか? –

+0

ちょっと@ deckertron_9000これはまさに私が今やっていることです!しかし、ポイントが数百マイル離れているようであれば、正しく動作していないように見えます。より正確な方法があるかどうかはわかりませんでした。 – aherrick

答えて

1

MapSpanは、以下のようにcenter、latitudeDegrees、およびlongitudeDegreesから作成できます。

関連する問題