Форум программистов, компьютерный форум, киберфорум
Комментарии
Войти
Регистрация
Восстановить пароль
Карта форума Блоги Сообщество Поиск Заказать работу  
  1. Старый комментарий
    Аватар для Sanya_sa
    WinForms контрол коротких сообщений.
    Цитата:
    Сообщение от ashsvis Просмотреть комментарий
    Пытаюсь понять, для чего это. Как применить в быту...
    Да как угодно)
    У меня например идут двухстрочные сообщения постоянно, я для наглядности сделал
    Запись от Sanya_sa размещена 15.06.2019 в 14:30 Sanya_sa вне форума
  2. Старый комментарий
    Аватар для ashsvis
    WinForms контрол коротких сообщений.
    Пытаюсь понять, для чего это. Как применить в быту...
    Запись от ashsvis размещена 15.06.2019 в 13:35 ashsvis вне форума
  3. Старый комментарий
    Аватар для SatanaXIII
    Карты офлайн.
    Sanya_sa, ясненько. Спасибо за развернутый ответ.
    Запись от SatanaXIII размещена 03.03.2017 в 15:06 SatanaXIII вне форума
  4. Старый комментарий
    Аватар для Sanya_sa
    Карты офлайн.
    SatanaXIII, Ну как то так в 2х словах.
    Запись от Sanya_sa размещена 01.03.2017 в 17:47 Sanya_sa вне форума
  5. Старый комментарий
    Аватар для 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
  6. Старый комментарий
    Аватар для SatanaXIII
    Карты офлайн.
    Sanya_sa, а расскажите пожалуйста в трех словах как работает программа:
    Карты загружены сразу в приложение, и, при необходимости, могут обновиться?
    Сколько весит программа с предзагруженными картами?
    Запись от SatanaXIII размещена 01.03.2017 в 15:05 SatanaXIII вне форума
  7. Старый комментарий
    Аватар для Sanya_sa
    Карты офлайн.
    Не работал с GMap.Net, на форуме вопрос задайте. Там однозначно помогут.
    Запись от Sanya_sa размещена 01.03.2017 в 13:45 Sanya_sa вне форума
  8. Старый комментарий
    Карты офлайн.

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

    Доброго времени суток Осваиваю работу с GMap.Net Есть база gmdb необходимо указать к ней путь Как это сделать программно
    Запись от csm7 размещена 01.03.2017 в 13:42 csm7 вне форума
  9. Старый комментарий
    Аватар для Sanya_sa
    Карты офлайн.
    есть ли возможность сделать карту водоемов глубин для эхолота Lowrance не совсем понятен вопрос. Данный эхолот работает с какими то картами (определенного формата)? Если да то возможно существует софт который их строит а так по глубинам можно использовать например сервис Мультимапс.https://multimaps.ru/#x=46.828... 12&t=depth
    Запись от Sanya_sa размещена 30.11.2016 в 13:47 Sanya_sa вне форума
  10. Старый комментарий
    Карты офлайн.
    Увидел вашу запись - созрел вопрос: Не в курсе ли вы, есть ли возможность сделать карту водоемов глубин для эхолота Lowrance. А конкретно нужна карта реки Днепр с глубинами. Заранее спасибо
    Запись от WolF_RaM размещена 30.11.2016 в 13:38 WolF_RaM вне форума
  11. Старый комментарий
    Аватар для Sanya_sa
    Карты офлайн.
    Много разных карт можно было скачать для оффлайна.

    Да тайлы скачать не проблема. Проблема их потом отрисовать в нужной последовательности.
    Запись от Sanya_sa размещена 22.11.2016 в 18:02 Sanya_sa вне форума
    Обновил(-а) Sanya_sa 23.11.2016 в 11:16
  12. Старый комментарий
    Аватар для snake32
    Карты офлайн.
    Да, жаль загнулся сайт. Раньше часто пользовался САС.Планетой. Много разных карт можно было скачать для оффлайна.
    Запись от snake32 размещена 22.11.2016 в 18:00 snake32 вне форума
  13. Старый комментарий
    Аватар для Sanya_sa
    Карты офлайн.
    Что то там половина ссылок не работают) Но всё равно спасибо!
    Запись от Sanya_sa размещена 22.11.2016 в 15:52 Sanya_sa вне форума
    Обновил(-а) Sanya_sa 22.11.2016 в 15:54
  14. Старый комментарий
    Запись от snake32 размещена 22.11.2016 в 15:47 snake32 вне форума
  15. Старый комментарий
    Карты офлайн.
    Интересная статья. Помню как-то видел описание метода хранения тайлов на хабре.

    Не по теме:

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

    Запись от castaway размещена 07.11.2016 в 21:06 castaway вне форума
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru