Изменение видимости метки на основе уровня масштабирования в элементе управления Bing Maps для Silverlight

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

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

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

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

Крис


person lookitskris    schedule 07.06.2011    source источник


Ответы (2)


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

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

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

person Peter Wone    schedule 14.06.2011