在MapControl上画一个圆

时间:2018-10-15 15:48:39

标签: c# uwp uwp-xaml

我知道通过基本数学生成点,然后使用这些点创建MapPolygon来画圆的技术。

还有其他方法吗?

例如,我看到有一个关于圈子的课程:

public sealed class Geocircle : IGeocircle, IGeoshape

但是我不知道如何使用它,似乎没有MapLayer

2 个答案:

答案 0 :(得分:0)

您可以创建XAML形状并将其作为子元素添加到MapControl中。然后使用SetLocation设置其位置:

var circle = new Ellipse() { 
   Height = 20, 
   Width = 20, 
   Fill = new SolidColorBrush(Colors.Blue)
};
map.Children.Add(circle);
var location = new Geopoint(new BasicGeoposition()
{
   Latitude = 51.1789,
   Longitude = -1.8261
});
map.SetLocation(circle, location);

Geocircle类用于geofencing,因此在这里不适用。

答案 1 :(得分:0)

Geocircle用于为给定的位置和半径创建地理圆对象。它通常用于制作地图Geofence,但不用于在地图上显示周期。

有很多方法可以在地图上绘制圆圈

generating points通过基本数学

for (var i = 0; i < 360; i++)
{
//draw a cycle
BasicGeoposition point = new BasicGeoposition() 
{ Latitude = centerLatitude + ri * Math.Cos(3.6 * i * 3.14 / 180), Longitude = centerLongitude + ri * Math.Sin(3.6 * i * 3.14 / 180) };
list.Add(point);
}

Ellipse添加到map

private void MyMap_Loaded(object sender, RoutedEventArgs e)
{
    // Specify a known location.
    BasicGeoposition snPosition = new BasicGeoposition { Latitude = 47.620, Longitude = -122.349 };
    Geopoint snPoint = new Geopoint(snPosition);

    // Create a XAML border.
    var ellipse1 = new Ellipse();
    ellipse1.Fill = new SolidColorBrush(Windows.UI.Colors.Coral);
    ellipse1.Width = 200;
    ellipse1.Height = 200;

    // Center the map over the POI.
    MyMap.Center = snPoint;
    MyMap.ZoomLevel = 14;

    // Add XAML to the map.
    MyMap.Children.Add(ellipse1);
    MapControl.SetLocation(ellipse1, snPoint);
    MapControl.SetNormalizedAnchorPoint(ellipse1, new Point(0.5, 0.5));
}