Изменить видимость метки на основе уровня масштабирования в элементе управления Bing Maps для Silverlight - PullRequest
1 голос
/ 07 июня 2011

Так что я довольно новичок в использовании элемента управления Bing Maps в Silverlight, но мне удалось получить коллекцию объектов меток (каждый со значениями lat / long), нанесенных на карту.

Мой вопросТеперь, как я могу изменить их видимость в зависимости от текущего уровня масштабирования?

Скажем, у меня есть 10 мест, разбросанных по всей Великобритании, я хочу, чтобы они были видны только тогда, когда Великобритания находится в текущем виде, а не когда весь мир виден ...

Я понимаю, что этоэто очень общий вопрос, но любая помощь будет фантастической!

Kris

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

вам нужно обработать одно из событий элементов управления карты, таких как viewchangeend или TargetViewChanged, и решить, отображать ли выводы на основе уровня масштабирования нового вида и ограничительной рамки (широты / долготы, составляющие границу нового вида)

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

1 голос
/ 14 июня 2011

Поможет, если вы поймете, что

  • GeoCoordinate и Location совместимы.
  • Прямоугольник отсечения преднамеренно несколько больше, чем карта, так что край маркера для точек, немного смещенных от карты, будет виден, предлагая пользователю выполнить панорамирование.

Настройка метода расширения.

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 карты. Если у вас много булавок, ответом на следующий вопрос будет «quadtree». Посмотри.

...