【问题标题】:Change Pushpin visibility based on Zoom level in the Bing Maps control for Silverlight根据 Silverlight 的 Bing 地图控件中的缩放级别更改图钉可见性
【发布时间】:2011-06-07 08:32:19
【问题描述】:

所以我对在 Silverlight 中使用 Bing 地图控件非常陌生,但我设法在地图上绘制了一组图钉对象(每个都有纬度/经度值)。

我现在的问题是,如何根据当前缩放级别更改这些的可见性?

假设我在英国有 10 个地点,我只希望它们在当前视图中英国时可见,而不是在整个世界都可见时...

我知道这是一个非常笼统的问题,但任何帮助都会很棒!

克里斯

【问题讨论】:

    标签: .net silverlight bing-maps


    【解决方案1】:

    您需要处理其中一个地图控件事件,例如 viewchangeend 或 TargetViewChanged,并根据新视图缩放级别和边界框(构成新视图边界的纬度/经度)决定是否显示图钉

    http://msdn.microsoft.com/en-us/library/microsoft.maps.mapcontrol.map_events.aspx

    【讨论】:

      【解决方案2】:

      如果你明白这一点会有所帮助

      • 地理坐标和位置是兼容的。
      • 剪裁矩形故意比地图稍大一些,以便可以看到稍微偏离地图的点的标记边缘,从而提示用户进行平移。

      设置扩展方法。

      public static class ExtensionMethods
      {
        public static bool Contains(this LocationRect r, GeoCoordinate p)
        {
          double w = r.West - 0.2;
          double e = r.East + 0.2;
          double s = r.South - 0.2;
          double n = r.North + 0.2;
          return w <= p.Longitude && p.Longitude <= e && s <= p.Latitude && p.Latitude <= n;
        }
      }
      

      用这样的表达式检查每个图钉是否在地图边界内。

      map.TargetBoundingRectangle.Contains(pin.Location)
      

      如果您的点在 IEnumerable 中,则导入 LINQ,您可以使用这样的表达式一次性处理它们,该表达式返回一个仅包含您需要显示的引脚的集合。

      pushpins.Where(pin => map.TargetBoundingRectangle.Contains(pin.Location))
      

      在地图的 ViewChangeEnd 事件处理程序中进行剪辑。如果你有很多别针,那么下一个问题的答案是“四叉树”。查一下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-21
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 2014-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多