更新
マンゴーにおいて、電話機は自動的に、このような円を示しています。
Orginalポスト
それはかなり簡単です。あなたは、図面を行うために押しピンコントロールを使用するだけです。
1)あなたのコントロールにでMapLayerを追加します。
<maps:MapLayer>
<maps:MapPolygon Fill="Gray"
IsHitTestVisible="False"
Locations="{Binding AccuracyLocationCollection}"
Opacity="0.6"
Stroke="Black"
StrokeThickness="2" />
</maps:MapLayer>
2)円の大きさを計算し、GeoCoordinateWatcher_PositionChangedイベントハンドラであなたのViewModel
public LocationCollection AccuracyLocationCollection
{
get;
set;
}
3)でAccuracyLocationCollectionプロパティを追加します。 、AccuracyLocationCollectionに値を設定します。
ViewModel.AccuracyLocationCollection = DrawMapsCircle(e.Position.Location);
4)DrawMapsCircleのコードのように進む:
プライベート静的ダブルToRadian(二度) {戻り度*(にMath.PI/180)。 }
private static double ToDegrees(double radians)
{
return radians * (180/Math.PI);
}
public static LocationCollection DrawMapsCircle(GeoCoordinate location)
{
double earthRadiusInMeters = 6367.0 * 1000.0;
var lat = ToRadian(location.Latitude);
var lng = ToRadian(location.Longitude);
var d = location.HorizontalAccuracy/earthRadiusInMeters;
var locations = new LocationCollection();
for (var x = 0; x <= 360; x++)
{
var brng = ToRadian(x);
var latRadians = Math.Asin(Math.Sin(lat) * Math.Cos(d) + Math.Cos(lat) * Math.Sin(d) * Math.Cos(brng));
var lngRadians = lng + Math.Atan2(Math.Sin(brng) * Math.Sin(d) * Math.Cos(lat), Math.Cos(d) - Math.Sin(lat) * Math.Sin(latRadians));
locations.Add(new Location()
{
Latitude = ToDegrees(latRadians),
Longitude = ToDegrees(lngRadians)
});
}
return locations;
}
結果:(これは私の自宅の隣にあり、私は灰色の円の間表示される道路の間に約3メートルがあります確認することができます)
私の知る限り、APIは」doesnの位置精度を示すデータを返す。もしそうなら、直径2〜5メートルの円を見るためにはまだまだズームインしなければならないでしょう。ほとんどのGPSユニットは単にこれを画面のどこかの数字として表しています。 – Stonetip