Картографический веб-сервис своими руками. Часть 1: Обзор инструментария

    image
    Приветствуем!
    До определенного момента, задачи отображения данных на карте в интернете можно решить с помощью достаточно мощных инструментов веб-картографии таких как Google Maps API, API Яндекс.Карт, OpenStreetMap API.

    Когда объектов много, разработка упирается в производительность клиента, поскольку на отрисовку тратиться вычислительная мощность компьютера человека который картой пользуется. Кроме того “художественные” возможности таких сервисов не всегда являются достаточными для расположения нужной информации на карте.

    Для решения этих проблем привлекается серверное картографическое ПО которое дает более широкие возможности.

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


    Постановка задачи

    Возьмем достаточно актуальную и приземленную задачу отображения объектов которые хранятся в базе данных. Источником данных буде гео-поле в базе данных PostgreSQL. На стороне сервера нам необходимо сгенерировать слой с объектами и наложить его на Google Maps. Так же необходимо все операции выполнять на бесплатном ПО с возможностью допила под собственные нужды. Также необходимо максимально уйти от использования сторонних картографических сервисов.

    Инструменты

    Для решения нашей задачи необходимо представлять принцип работы всей связки, поэтому рассмотрим схему:

    image

    В зависимости от гисовского веб-сервера можно использовать разные форматы входящих данных. В нашем случае мы будем пользоваться MapServer который может использовать векторные и растровые данные.

    Источник данных нужно предварительно подготовить, это значит что нужно взять с какого либо gps-устройства координаты и импортировать их в базу данные либо в любой другой формат, который поддерживает MapServer. В нашем случае мы будем брать данные из нашего gps-трекера M2M-mini, который посредством gprs канала складывает точки на сервер в базу данных PostgreSQL.

    PostgreSQL выбран исходя из того что у него есть замечательная прокладка PostGIS которая позволяет выполнять гео-запросы из базы данных. Например выбрать области которые пересекает маршрут.

    В геодезии есть такое понятие как проекция. Проекция — математически определённый способ отображения поверхности эллипсоида на плоскости. Т.е. то как глобус будет разложен на плоскую карту. Проекций существует достаточно много, данные которые будут импортированы в БД, могут быть в одной проекции а отображать их нам надо будет в другой, для этого вместе с MapServer на сервер нам необходимо будет установить библиотеку PROJ которая поможет работать нам с проекциями.

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

    Итого получается, что по определенному запросу, MapServer через PostGis с помощью PROJ выбирает данные из PostgreSQL и выводит их в одном из определенных форматом, начиная от обычного изображения и заканчивая WMS (которым мы и воспользуемся для организации именно веб-сервиса). При этом все это регулируется конфигурационном map файле который указывает серверу, какую информацию откуда брать.

    MapServer работает в связке с Apache и выдает информацию в браузер. Нас интересует режим работы MapServer — WMS. В этом режиме клиентская программа (десктопная или, например, Google API через специальную функцию), с помощью GET запроса, просит показать MapServer тайлы с определенными координатами, размерами и прозрачностью. В ответ на такой запрос MapServer возвращает изображения которые используются клиентской программой для наложения на карту.

    Если оставить выбранный путь работы сервиса для нашей задачи, то в сухом остатке останутся следующие инструменты:

    image

    Вывод

    С помощью PostgreSQL/PostGis + MapServer + Google Maps мы можем решить большинство задач, которые стоят сегодня перед веб-мастерами организовывающими свой гео-сервис, и в частности нашу задачу отображения точек на карте Google maps.

    Во второй части, мы рассмотрим установку MapServer и PostgreSQL/PostGis, а также их привязку между собой.

    Stay tuned!
    gps-tracker.com.ua
    M2M Украина
    0,00
    Компания
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 14

      0
      А как насчет соглашения об использовании Google Maps API "© No Navigation, Autonomous Vehicle Control, or Enterprise Applications. You must not use the Service or Content with any products, systems, or applications for or in connection with any of the following:… business asset tracking or similar applications. ..."?
        0
        Вы в рамках статьи интересуетесь? В статье не ставилось целью делать трекер, тем более как бизнес приложение, задача — отображать гео-объекты на карте, будь то дома, реки и леса
          0
          Ссылка в статье ведет на трекер автотранспорта, отсюда и вопрос.
            0
            На трекере, на сколько мне известно, плата берется за хранение точек с gps-устройств а не за использование приложения. Лучше всего спросить в обратной связи, там точно скажут.
          0
            0
            Ага, неплохо по затратам выходит: "… Google Maps API for Business is extremely cost-effective, starting at just $10,000 per year ..." ))
              +2
              Не, ну у нас есть крупные платные клиенты, и мы взимаем с них абонентскую плату + Премьер покупается официально с НДС, что с современной налоговой политикой крайне выгодно.
              Да и вопросы типа «вы политику гугло карт случаем не нарушаете?» уже поднадоели. )))
          0
          в ожидании продолжения…
            0
            кстати, какова нагрузка на железо и что за железо обслуживает данную связку. на сколько я понял на обслуживании данной системы запущено несколько серверов?
              0
              Задачи максимально разделены по серверам, отдельно парсеры, отдельно база, отдельно картография. Сейчас у нас 6*EX6
                0
                Все зависит от задач которые ставятся, обычная VPS с 1гб памяти на борту и 1ядром процессора справиться с отрисовкой небольшого количества (к примеру 20 000 — 50 000) объектов относительно быстро. На большее надо побольше ресурсы. И опять же если данные подтягивать из shp файла это быстрее будет чем через базу. Все зависит от решаемых задач.
              +1
              А какие-то неудобства/недостатки при работе с MapServer выявили? Пробовали до этого альтернативные геосервера?
                0
                Mapsever выбран из-за легкой интеграции, простоты и надежности, основным минусом на сегодня является то, что он имеет более слабые «художественные» возможности относительно своих конкурентов.
                  0
                  Имеете ввиду mapnik? А какой красивости не хватает? Интересуюсь, так как хотим тоже использовать MapServer, но о некоторых недостатках можно узнать только в процессе боевой эксплуатации) А хочется заранее знать)

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое