Разработка элемента управления картой WPF - PullRequest
13 голосов
/ 17 сентября 2008

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

То, о чем я думаю, - это использование ScrollViewer (без полос прокрутки) в качестве моего «порта просмотра», а затем укладывание всего поверх холста. От Z-Index = 0 и выше, я думаю:

  1. Базовая канва для вычислений по широте / долготе, позиционирование управления, укладка по Z-Index.
  2. Несколько элементов сетки для представления карт на разных уровнях масштабирования. Использование сетки для облегчения укладки плитки.
  3. Карта объектов с позиционными данными.
  4. Элементы управления картой (ползунок масштабирования, обзор и т. Д.).
  5. Просмотрщик прокрутки с событиями перемещения мыши для панорамирования и масштабирования.

Есть ли какие-либо комментарии по поводу того, как мне это построить?

Ответы [ 9 ]

9 голосов
/ 18 сентября 2008

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

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

(РЕДАКТИРОВАТЬ: добавлено больше подробностей о том, как я использовал SharpMap)

5 голосов
/ 02 декабря 2008

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

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

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

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

Эти страницы MSDN в системе плиток Virtual Earth и в формате Deep Zoom и связанные с ними ссылки, вероятно, также являются полезными ссылками.

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

1 голос
/ 30 января 2010

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

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

1 голос
/ 04 декабря 2008

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

1 голос
/ 18 сентября 2008

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

1 голос
/ 18 сентября 2008

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

0 голосов
/ 13 марта 2012

Карты Bing Элемент управления Windows Presentation Foundation v1 является лучшим элементом управления картами в WPF.

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

0 голосов
/ 13 января 2012

Не создавайте его самостоятельно - используйте элемент управления WPF Bing Maps http://www.bing.com/community/site_blogs/b/maps/archive/2012/01/12/announcing-the-bing-maps-windows-presentation-foundation-control-v1.aspx

0 голосов
/ 17 сентября 2008

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

Также, если вы хотите, чтобы это было больше, чем просто просмотрщик игрушек, масштабирование от долгого до XY может стать «интересным»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...