업데이트 망고에서
는 전화가 자동적으로 원을 보여줍니다.
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의 코드는 다음과 같습니다 :
private static double ToRadian (double degrees) { return degrees * (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;
}
결과 : '
AFAIK, API가 아무튼 (이것은 내가 약 3 미터 회색 원 사이에 표시되어있는 도로 사이에있다 확인할 수 있습니다, 내 집 옆) 위치 정확성을 나타내는 데이터를 반환합니다. 그렇게했다면 직경 2-5m의 원을 보더라도 훨씬 멀리 확대해야합니다. 대부분의 GPS 장치는 이것을 단순히 화면의 어딘가에 표시합니다. – Stonetip