Масштаб вызывает (серьезные) проблемы в картах Bing с ломаными линиями

Здравствуйте, у меня проблемы с управлением картой Bing.

Если я приближаюсь к полилиниям, они начинают исчезать (снизу вверх и справа налево)
Полилинии генерируются динамически с помощью ItemsControl (того, который включен в пространство имен карт), привязанного к коллекции мои собственные LocationData из ViewModel, которые преобразуются IValueConverter в специфичные для карты LocationPoints.
Некоторые значения, недоступные из ViewModel, устанавливаются в загруженном событии.
Карта и контейнер растягиваются на весь экран.

Итак, если линии начинают исчезать, и я уменьшаю масштаб с помощью кнопки на панели приложений

private void ZoomOut_Click(object sender, RoutedEventArgs e)
{
    map1.ZoomLevel -= 1.0;
}

Приложение вылетает без исключения...
Я тестировал его на реальном устройстве с отладчиком и без, и отладчик только говорит, что он потерял соединение с устройством.

У кого-нибудь есть такая или подобная проблема и, надеюсь, она решена?

Спасибо за любую помощь.

PS: My LocationData содержит примерно 100-200 точек, которые разделены на 3-7 строк, что не может быть слишком много или?


person Drek    schedule 06.01.2011    source источник


Ответы (1)


Да, сотни очков — это слишком много, но это меньшая из ваших проблем. Как вы это закодировали, вы повторно конвертируете и перерисовываете свои точки каждый раз, когда происходит панорамирование или масштабирование.

  • Не используйте преобразователь типов. Преобразуйте свои очки один раз, кэшируйте преобразованные очки и привяжите их к преобразованным очкам.
  • Изучите деревья квадрантов и то, как они применяются для отбраковки вашего набора точек пропорционально уровню масштабирования.
  • Примените обтравочный прямоугольник. По моему опыту, увеличение на полградуса с каждой стороны области отображения работает хорошо.
  • Изучите модель событий карты Bing и перепроектируйте свой код так, чтобы отбраковывать, обрезать и строить графики можно было только тогда, когда манипуляции с картой прекращаются.
  • В идеале, напишите свою логику отбраковки, обрезки и графика так, чтобы она была асинхронной и чтобы можно было подать сигнал о прекращении, чтобы, если манипуляция перезапускается до завершения отбраковки, обрезки и графика, ее можно было прервать и перезапустить.

Используя описанные выше методы, я могу получить производительность, сравнимую со встроенной картой.

person Peter Wone    schedule 02.08.2011