Форум программистов, компьютерный форум, киберфорум
Sanya_sa
Войти
Регистрация
Восстановить пароль
Рейтинг: 4.17. Голосов: 6.

Карты офлайн.

Запись от Sanya_sa размещена 31.10.2016 в 11:02
Обновил(-а) Sanya_sa 30.05.2019 в 12:07

Простейший пример получения тайлов с картографических серверов. Их сохранение на диск и использование.
Все формулы взяты с https://msdn.microsoft.com/en-... 59689.aspx, подробнее о проекции Меркатора https://ru.wikipedia.org/wiki/... 1%80%D0%B0 .

Возможно кому нибудь поможет. В итоге можно доработать и получить неплохой контрол для работы с картами в офлайн. Например у меня реализованы (в полной версии) следующие функции:
- поддержка работы с несколькими картографическими сервисами (Гугл, ВиртуалЭс, OSM)
- возможность нанесения на карту "точек маркеров" (например для построения маршрута)
- возможность выбора зоны загрузки тайлов с учетом уровня детализации
- ну и еще всяка разна.

Добавил архив MapView, там можно зажав Ctrl, колесиком мыши вращать карту.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 917
Размер:	1.14 Мб
ID:	4014   Нажмите на изображение для увеличения
Название: Безымянный1.png
Просмотров: 999
Размер:	1.09 Мб
ID:	4015   Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 1138
Размер:	1.58 Мб
ID:	4016  

Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 1069
Размер:	1.57 Мб
ID:	4017   Нажмите на изображение для увеличения
Название: 3.png
Просмотров: 967
Размер:	1.37 Мб
ID:	4018   Нажмите на изображение для увеличения
Название: 4.png
Просмотров: 878
Размер:	463.9 Кб
ID:	4019  

Вложения
Тип файла: 7z GMapView.7z (2.70 Мб, 811 просмотров)
Тип файла: 7z MapView.7z (11.26 Мб, 618 просмотров)
Размещено в Без категории
Показов 23067 Комментарии 13
Всего комментариев 13
Комментарии
  1. Старый комментарий
    Интересная статья. Помню как-то видел описание метода хранения тайлов на хабре.

    Не по теме:

    А заголовок у вас с ошибкой...

    Запись от castaway размещена 07.11.2016 в 21:06 castaway вне форума
  2. Старый комментарий
    Запись от snake32 размещена 22.11.2016 в 15:47 snake32 на форуме
  3. Старый комментарий
    Аватар для Sanya_sa
    Что то там половина ссылок не работают) Но всё равно спасибо!
    Запись от Sanya_sa размещена 22.11.2016 в 15:52 Sanya_sa вне форума
    Обновил(-а) Sanya_sa 22.11.2016 в 15:54
  4. Старый комментарий
    Аватар для snake32
    Да, жаль загнулся сайт. Раньше часто пользовался САС.Планетой. Много разных карт можно было скачать для оффлайна.
    Запись от snake32 размещена 22.11.2016 в 18:00 snake32 на форуме
  5. Старый комментарий
    Аватар для Sanya_sa
    Много разных карт можно было скачать для оффлайна.

    Да тайлы скачать не проблема. Проблема их потом отрисовать в нужной последовательности.
    Запись от Sanya_sa размещена 22.11.2016 в 18:02 Sanya_sa вне форума
    Обновил(-а) Sanya_sa 23.11.2016 в 11:16
  6. Старый комментарий
    Увидел вашу запись - созрел вопрос: Не в курсе ли вы, есть ли возможность сделать карту водоемов глубин для эхолота Lowrance. А конкретно нужна карта реки Днепр с глубинами. Заранее спасибо
    Запись от WolF_RaM размещена 30.11.2016 в 13:38 WolF_RaM вне форума
  7. Старый комментарий
    Аватар для Sanya_sa
    есть ли возможность сделать карту водоемов глубин для эхолота Lowrance не совсем понятен вопрос. Данный эхолот работает с какими то картами (определенного формата)? Если да то возможно существует софт который их строит а так по глубинам можно использовать например сервис Мультимапс.https://multimaps.ru/#x=46.828... 12&t=depth
    Запись от Sanya_sa размещена 30.11.2016 в 13:47 Sanya_sa вне форума
  8. Старый комментарий

    GMap.Net сохранить путь к gmdb

    Доброго времени суток Осваиваю работу с GMap.Net Есть база gmdb необходимо указать к ней путь Как это сделать программно
    Запись от csm7 размещена 01.03.2017 в 13:42 csm7 вне форума
  9. Старый комментарий
    Аватар для Sanya_sa
    Не работал с GMap.Net, на форуме вопрос задайте. Там однозначно помогут.
    Запись от Sanya_sa размещена 01.03.2017 в 13:45 Sanya_sa вне форума
  10. Старый комментарий
    Аватар для SatanaXIII
    Sanya_sa, а расскажите пожалуйста в трех словах как работает программа:
    Карты загружены сразу в приложение, и, при необходимости, могут обновиться?
    Сколько весит программа с предзагруженными картами?
    Запись от SatanaXIII размещена 01.03.2017 в 15:05 SatanaXIII вне форума
  11. Старый комментарий
    Аватар для Sanya_sa
    SatanaXIII да это не программа, просто так для демонстрации выложил. Сам просто долго разбирался, думаю может кому интресно будет. Весь код давно написан как оказалось тут https://msdn.microsoft.com/en-... 59689.aspx . Мне оставалось только все заточить под свои нужды. Единственное добавил метод расчета расстояния:
    Кликните здесь для просмотра всего текста

    C#
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    // Градусы в радианы
    private const double GR = Math.PI / 180.0;
     
    /// <summary>
    /// Расстояние между точками в км
    /// </summary>
    /// <param name="one"></param>
    /// <param name="two"></param>
    /// <returns></returns>
    public static double DistanceBetweenPoints(PointD one, PointD two)
    {
        var d = Math.Acos((Math.Sin(one.Y * GR) * Math.Sin(two.Y * GR)) + (Math.Cos(one.Y * GR) * Math.Cos(two.Y * GR) * Math.Cos((one.X - two.X) * GR)));
        return d * EarthRadius / 1000;
    }


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

    1) Тайлы хранятся на серверах, каждый тайл имеет Quadkey (уникальный номер который определяет его позицию в многослойной карте https://i-msdn.sec.s-msft.com/dynimg/IC96238.jpeg). Пример запроса, для получения тайла (например с virtualearth)
    http://ecn.t1.tiles.virtualearth.net/tiles/a22.jpeg?g=282&mkt=en-us
    где 22 это Quadkey

    2) Размер тайла 256x256 pix отсюда зная уровень детализации карты можем посчитать ее размер в пикселах.

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


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

    a) Система координат самой карты MapSCpix в пикселах ее размер зависит уровня детализации.
    b) Система координат окна просмотра ViewSCpix (это и есть наш контрол который будет рисовать часть карты которую видит пользователь).
    с) ну а геокоординаты элементарно считаются по формулам ссылку на которые давал выше. Это будет наша 3я система координат GeoSC.

    Для систем MapSCpix и ViewSCpix за 0 (точка отсчета) возьмем верхний правый угол.

    Теперь рассчитываем какие тайлы у нас "видны в окне просмотра" и сохраняем их в буфер, если буфер достиг установленного нами максимума, ну на пример 500, то просто очистим его (тут конечно надо бы удалять тайлы те которые не видны в данный момент на просмотрщике, но я не стал заморачиваться).
    В буфер тайлы могут попасть двумя путями:
    1) Если тайл не сохранен на диске, то пробуем его загрузить из сети, если он загрузился то сохраняем его на диск и в буфер, если нет то берем рассчитываем область на самом нижнем слой тайлов (ее координаты), ресайзим и выводим, тут конечно тоже не плохо бы пронюхивать каждый слой ниже и если там есть сохраненный тайл пересчитывать и ресайзить его, но я тоже не стал заморачиваться.

    2) Если тайл сохранен на диске, то просто грузим его с диска.


    Все тайлы сохраняю в папках на диске, имя папки соответствует сервису с которого тайл был получен.

    (То что описал может не соответствовать представленному в данном блоге коду, т.к. здесь представлен один из первых вариантов)
    Запись от Sanya_sa размещена 01.03.2017 в 17:41 Sanya_sa вне форума
    Обновил(-а) Sanya_sa 30.05.2019 в 14:46
  12. Старый комментарий
    Аватар для Sanya_sa
    SatanaXIII, Ну как то так в 2х словах.
    Запись от Sanya_sa размещена 01.03.2017 в 17:47 Sanya_sa вне форума
  13. Старый комментарий
    Аватар для SatanaXIII
    Sanya_sa, ясненько. Спасибо за развернутый ответ.
    Запись от SatanaXIII размещена 03.03.2017 в 15:06 SatanaXIII вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru