在WP8中将多边形添加到地图并更改不透明度/大小

时间:2012-11-11 23:35:11

标签: map polygon windows-phone

我正在尝试将项目从WP7转移到WP8(因此从Bing Maps更新到诺基亚的内置控件)。

最初我基于GeoCoordinates的一大堆(20个)创建了一个MapPolygon,然后在将MapPolygon作为Child添加到地图控件之前更改了MapPolygon的Opacity属性。

当我试图转换到诺基亚的地图控件时,在我看来,没有办法指定我想要使用GeoCoordinates创建的Polygon区域,但必须使用Points。 这意味着当我在地图上放大和缩小时,Polygon在屏幕上保持相同的形状。 肯定有一种方法可以让Polygon保持相同的比例大小,无论你放大/缩小?!?!?

我知道Bing地图仍然可以使用,但由于它已被弃用,我宁愿过渡到新的诺基亚地图。

以下是我尝试用来创建新映射的代码:

//Creating a Polygon
Polygon MyPolygon = new Polygon();


MyPolygon.Points.Add(new Point(2, 0));
MyPolygon.Points.Add(new Point(22, 0));
MyPolygon.Points.Add(new Point(2, 40));
MyPolygon.Stroke = new SolidColorBrush(Colors.Black);
MyPolygon.Fill = new SolidColorBrush(Colors.Black);
MyPolygon.SetValue(Grid.RowProperty, 1);
MyPolygon.SetValue(Grid.ColumnProperty, 0);
MyPolygon.Opacity = 0.5;

//Adding the Polygon to the Grid
//MyGrid.Children.Add(MyPolygon);

//Creating a MapOverlay and adding the Grid to it.
MapOverlay MyOverlay = new MapOverlay();
MyOverlay.Content = MyPolygon;

MyOverlay.GeoCoordinate = new GeoCoordinate(49.3393850118753, -0.4569707717895518);

//MyOverlay.PositionOrigin = new Point(0.99, 0.99);

//Creating a MapLayer and adding the MapOverlay to it
MapLayer MyLayer = new MapLayer();
MyLayer.Add(MyOverlay);

map1.Layers.Add(MyLayer);

据我所知,我可以将Polygon添加到Grid,然后将Grid添加到Overlay,但仍然无法解决问题。 但正如你所看到的那样,没有办法添加GeoCoordinates ......只有Point。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

嗯,你必须使用一些数学,但我发现的最简单的方法是使用 ConvertViewportPointToGeoCoordinate 利用ActualWidth和ActualHeight地图属性来获取地图视口的坐标。这就是你可以获得与中心相关的所有内容或者你想用来保持比例的任何数学。

您还可以使用 MapPolyline 进行绘制,这将需要GeoCoordinates。 http://msdn.microsoft.com/en-us/library/microsoft.maps.mapcontrol.mappolyline.aspx

几乎在任何情况下都应该涵盖你。

希望有帮助???

// Jed