1

这是我的代码

public GeoCoordinateCollection AddCirclePath(GeoCoordinate geoCoordinate, Color stroke, double strokeThickness)
{ 
    Point geoPoint = map.ConvertGeoCoordinateToViewportPoint(geoCoordinate);
    MapPolygon polyCircle = new MapPolygon();
    polyCircle.FillColor = Color.FromArgb(250, 220, 220, 0);
    polyCircle.StrokeColor = stroke;
    polyCircle.StrokeThickness = strokeThickness;
    polyCircle.StrokeDashed = false;
    polyCircle.Path = MapUtils.CreateCircle(geoCoordinate, geoCoordinate.HorizontalAccuracy);
    map.MapElements.Add(polyCircle);

    //click event
    GestureListener gestureListener = GestureService.GetGestureListener(polyCircle);
    gestureListener.Tap += new EventHandler<GestureEventArgs>(CircleTapped);

    return polyCircle.Path;
}

private void CircleTapped(object sender, GestureEventArgs e)
{
    Logger.Log("Circle tapped");
}

我使用上面的代码在地图上添加了圆圈,但我无法在这个地图元素上获得点击事件。我正在使用Microsoft.Phone.Maps.Controls.Map地图类

4

2 回答 2

0

(这是很老的帖子,但如果其他人正在寻找解决方案,这里有一个简单的例子。)

您应该能够直接使用 API 来获取点击的地图元素,而无需任何转换或解决方法。

添加一个多边形。

var collection = new GeoCoordinateCollection();
collection.Add(new GeoCoordinate(0d, 0d));
collection.Add(new GeoCoordinate(10d, 0d));
collection.Add(new GeoCoordinate(10d, 10d));
collection.Add(new GeoCoordinate(0d, 10d));
collection.Add(new GeoCoordinate(0d, 0d));

var poly = new MapPolygon();
poly.FillColor = Color.FromArgb(80, 255, 0, 0);
poly.StrokeColor = Colors.Red;
poly.StrokeThickness = 15;
poly.Path = collection;
Map.MapElements.Add(poly);

并抓住水龙头。

private void Map_OnTap(object sender, GestureEventArgs e)
{
    var point = e.GetPosition(Map);
    //var coordinate = Map.ConvertViewportPointToGeoCoordinate(point);

    int elements = Map.GetMapElementsAt(point).Count;
    System.Diagnostics.Debug.WriteLine(string.Format("Hit {0} map element(s)", elements));
}

关于折线的错误不适用于多边形,您不需要将最后一点添加两次。您仍然应该有相同的起点和终点以保持多边形闭合(尽管这也不是强制性的)。环方向似乎不影响元素是否可选。

于 2014-02-21T10:34:17.350 回答
0

控制和命中测试中有几个错误。一种解决方案有时是在元素中添加最后一个顶点两次(我知道这没有意义,但我已经看到这解决了折线的抽头问题,所以我猜它与多边形相同)。也可能是您的戒指方向错误(顺时针与逆时针)

于 2013-05-28T06:01:31.783 回答