【问题标题】:How to add a PushPin item to a map? Windows Phone如何将 PushPin 项目添加到地图?视窗电话
【发布时间】:2015-10-22 17:29:33
【问题描述】:

我正在尝试在我的应用程序的地图页面中将图钉绘制到地图上,但是当我添加代码以将图钉覆盖到地图时,我收到以下错误:

找不到类型或命名空间名称PushPin(您是否缺少 using 指令或程序集引用?)

Microsoft.Phone.Maps.Controls.Map 不包含Children 的定义,并且找不到接受Microsoft.Phone.Maps.Controls.Map 类型的第一个参数的扩展方法Children

据我了解,我缺少参考资料?我有 controls.mapscontols.toolkit 的引用,所以我不明白为什么。

这也是我用来绘制图钉的代码:

PushPin myPin = new Pushpin();
myPin.Location = MyGeoPosition;
myPin.Content = "My car";
MyMap.Children.Add(myPin);

【问题讨论】:

    标签: c# map toolkit markers


    【解决方案1】:

    试试这个。

    MapLayer layer1 = new MapLayer();
    
    Pushpin pushpin1 = new Pushpin();
    
    pushpin1.GeoCoordinate = MyGeoPosition;
    pushpin1.Content = "My car";
    MapOverlay overlay1 = new MapOverlay();
    overlay1.Content = pushpin1;
    overlay1.GeoCoordinate = MyGeoPosition;
    layer1.Add(overlay1);
    
    myMap.Layers.Add(layer1);
    

    您为每个图钉创建新的叠加层,将所有叠加层添加到图层,然后将图层添加到地图元素。

    【讨论】:

    • 在我的实现中,我已将此代码提取到一个方法中,该方法采用一个字符串作为引脚名称和 MyGeoPosition,但似乎如果我第二次调用此代码,它会覆盖第一次。有没有简单的方法解决这个问题?
    • 您可以使用Map.remove.layers(layer_name) 删除现有图层或使用layer_name.Clear() 清空图层,但在这两种情况下,您都需要将图层的引用保存在某处。
    • 在我的解决方案中,我需要保存第一层,即第一个位置,然后将我的第二个位置附加到该层。您能否举例说明如何实现这一点或保存该层?
    • 我认为你应该提出一个新问题,提供代码并告诉你需要什么。这不再在这个问题的范围内。
    【解决方案2】:

    你可以试试..

     BitmapImage myImage1; myImage1 = new BitmapImage(new    Uri("/Assets/Images/pushpin-google-hi.png",    UriKind.RelativeOrAbsolute)); 
     var image = new Image(); 
     image.Width = 50; 
     image.Height = 50; 
     image.Opacity = 100; 
     image.Source = myImage1;
    
     var mapOverlay = new MapOverlay();
     mapOverlay.Content = image;
     mapOverlay.GeoCoordinate = new GeoCoordinate(lats, lons);
     var mapLayer = new MapLayer();
     mapLayer.Add(mapOverlay);
     MyMap.Layers.Add(mapLayer);
     MyMap.SetView(new GeoCoordinate(lats, lons), 16);
    

    【讨论】:

      【解决方案3】:

      试试这个。首先,我在 utils 类中有这个:

      public MapLayer GetCurrentPosition (out MapOverlay myPositionOverlay)
              {
                  MapLayer myPositionLayer = new MapLayer();
                  myPositionOverlay = new MapOverlay();
                  Image myPositionImage = new Image();
                  myPositionImage.Source = new System.Windows.Media.Imaging.BitmapImage(new Uri("/Assets/myImagePin.png", UriKind.RelativeOrAbsolute));
                  myPositionImage.Height = 70;
                  myPositionImage.Visibility = Visibility.Visible;
                  myPositionImage.HorizontalAlignment = HorizontalAlignment.Center;
                  myPositionOverlay.Content = myPositionImage;
                  myPositionLayer.Add(myPositionOverlay);
                  return myPositionLayer;
              }
      

      然后这将在您的 MapLoaded 方法上进行:

      MapLayer mypositionArrow = placePushPins.GetCurrentPosition(out myPositionOverlay);
              MyMap.Layers.Add(mypositionArrow);
      

      然后,如果您希望图钉不是静态的,而是根据您的位置移动,请将其添加到您的观察者:

      myPositionOverlay.GeoCoordinate = myCurrentPositionCoordinate;
      

      要使图钉移动顺畅,只需实现如下动画:http://blogs.bing.com/maps/2014/09/25/part-2-bring-your-maps-to-life-creating-animations-with-bing-maps-net/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-20
        • 2021-02-17
        • 2012-09-03
        相关资源
        最近更新 更多