Проектирование управления картой WPF

Я думаю о создании простого управления картой в WPF, и я думаю о дизайне базового интерфейса карты, и мне интересно, есть ли у кого-то хороший совет для этого.

То, что я думаю, это использовать ScrollViewer (sans scroll bars) как мой "порт представления", а затем складывать все поверх холста. От Z-Index = 0 вверх, я думаю:

  • Базовый холст для расчетов lat/long, позиционирования управления, укладки Z-Index.
  • Элементы с несколькими сетками для отображения карт с разными уровнями масштабирования. Использование сетки для упрощения оформления.
  • Объекты карты с позиционными данными.
  • Элементы управления картой (ползунок масштабирования, обзор и т.д.).
  • Прокрутить просмотрщик с помощью мыши, перемещая события для панорамирования и масштабирования.

Любые предложения комментариев о том, как я должен это строить?

Ответы

Ответ 1

Если вы ищете хороший старт, вы можете использовать основу кода, предоставленного проектом SharpMap и построить оттуда. Если я помню, было несколько человек, уже работающих над WPF-рендерером для SharpMap, поэтому у вас также может быть некоторый код для начала.

Я лично использовал SharpMap в приложении С# 2.0, которое объединило данные ГИС с данными GPS в реальном времени, и это было очень успешно. SharpMap предоставил мне комплект преобразования для обработки данных ГИС вместе с математической основой для работы с изменяющейся информацией ГИС. Было бы относительно просто использовать код без рендеринга с интерфейсом WPF, поскольку у них уже есть презентация, отделенная от данных.

(EDIT: добавлено больше сведений о том, как я использовал SharpMap)

Ответ 2

Скорее всего, это обходной путь, но вы можете найти полезный материал в javascript и XAML из SilverlightEarth.com, который основанный на Silverlight 1.0-map-tile-client. Он может загружать VE, Google, Yahoo (есть версия DeepZoom, которая также может загружать OpenStreetMap, Moon и Mars, но поскольку она использует MSI, она не делает 't действительно помочь на передней панели WPF 3/3.5).

Несмотря на то, что javascript немного неопрятен, вы можете ясно видеть, что он создает холст Silverlight 1.0 Xaml (динамически размер), заполняя его плитками (элементы управления изображением) и обрабатывая увеличение/уменьшение масштаба и запросы на панораму. Вам нужно будет понять весь javascript и преобразовать его в С# - XAML должен входить в WPF без изменений. Я проверил этот Silverlight 1.0 с пирамидой черепицы Deep Zoomздесь), поэтому понятия применимы (т.е. не только для карт).

Я знаю, что это работает, потому что я сделал это сам, чтобы создать средство просмотра карт в Geoquery2008.com (screenshot), который является WPF/С#. К сожалению, сборки Geoquery2008 запутаны, но вы все же можете получить некоторые идеи или полезный код через DASM/Reflector. Это по-прежнему бета-версия, поэтому я бы не стал утверждать, что она выполнена на 100%. Я действительно не думал о факторизации кода карты в отдельный элемент управления, но могу ли я рассмотреть, что если другой не появляется...

Кстати, я также начал работать с ScrollViewer, но планирую вырезать его и более точно имитировать javascript, чтобы было проще повторно использовать объекты Image при панорамировании/масштабировании (путем получения большего контроля над процессом, чем предоставляет ScrollViewer).

Эти страницы MSDN на системе виртуальной земли > и Deep Zoom формат файла и соответствующие ссылки, вероятно, также полезны.

Наконец, я думаю, вы видели с этого поста, что DeepZoom/MultiScaleImage скорее всего будет находиться в .NET 4.0/Studio 2010.

Ответ 3

Ваше желание создать инструмент сопоставления WPF аналогично моему, что заставляет меня задавать этот вопрос о DeepZoom (он же MultiScaleImage) от Silverlight. Я хочу версию WPF. Принятый ответ дает ссылку на очень хорошую отправную точку (аналогично описанному мышлению).

Ответ 4

Виртуальная Земля имеет что-то преимущество WPF

Ответ 5

Не знаю, используете ли вы программное обеспечение ESRI, но я слышал, что там разрабатывается Silverlight API для этого стека, поэтому вы можете удержаться.

Ответ 6

Это вообще не распространяется на мою область работы, но вы можете взглянуть на MapWindow GIS, который имеет Open Source Объект ActiveX, который обеспечивает множество функций отображения и ГИС. Вот сообщение, объясняющее, как вставлять его в приложения WPF:

http://www.mapwindow.org/phorum/read.php?13,13484

Ответ 7

Основной вопрос заключается в том, как вы храните и получаете доступ к элементам, которые вы собираетесь разместить на карте (если это не просто отображение изображения). Поиск сценографа для некоторых идей.

Кроме того, если вы хотите, чтобы это было больше, чем просмотрщик игрушечных изображений, масштабирование long long до XY может стать "интересным"

Ответ 9

Bing Maps Windows Presentation Foundation Control v1 - лучшее управление картой в WPF.

Поддержка слоев плитки - теперь вы можете накладывать свои собственные плиточные слои поверх контроля карты.
Отключение слоя базовой плитки - это полезно для тех случаев, когда вам не нужны/не нужны наши базовые плитки для карт, и вместо этого вы предпочтете использовать свои собственные, не накладывая их поверх наших. Контроль не потребует фрагментов, которые уменьшают загрузку и улучшают рендеринг производительность.
 Поддержка SSL - так как многие из вас используют элемент управления WPF в защищенных приложениях, теперь вы можете сделать запрос на черепицу и службу через SSL без проблем.
 Скрытие шкалы шкалы - если вы не хотите шкалу масштаба (возможно, ваша карта маленькая, а шкала шкалы загромождает карту) вы можете отключить ее. Фактически, единственными элементами, которые вы не можете отключить, являются логотип Bing и авторские права.
 Новое авторское право - обеспечивает точное авторское право для наших поставщиков данных. Дополнительная инерция - инерция теперь включена для мыши и включена по умолчанию для прикосновения.
Различные исправления ошибок - спасибо за отзывы о форумах MSDN, блоге Bing Maps, электронной почте и Twitter. Хорошие находят людей.