Skip to content

Panzerschrek/PanzerMaps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PanzerMaps

Простейшее картографическое приложение, использующее данные OpenStreetMap.
Приложение умеет рисовать карту, android-версия умеет также отображать местоположение, получаемое от систем спутниковой навигации.

Проект PanzerMaps состоит из 3-х частей - самого приложения, экспортёра, файлов настройки экспортёра (стилей). Экпортёр осуществляет разбор OSM файла, отображение классов объектов OSM на свои классы, обрабатывает данные в зависимости от настроек, порождает итоговый файл карты. Приложение карты читает и рисует карту из получившегося файла.

Поддерживаемые платформы

Приложение и экспортёр можно собрать и запустить на GNU/Linux. Приложение можно собрать под Android, см. ниже про сборку.

Предназначение

Приложение создано как легковесная карта для нужд гуляющих пешеходов и велосипедистов. Ничего кроме карты приложение не содержит и содержать не будет. Приложение не содержит никаких подписей к объектам карты, т. к. для вышеизложенных целей они не очень то и нужны. Исходя из предназначения выделены классы объектов карты.

Описание классов объектов

Точечные объекты нужны, в основном как ориентиры.
Список классов точечных объектов:

  • Остановки наземного шинного транспорта (автобусов, троллейбусов, маршруток и т. д.).
  • Остановки трамваев. Отделены от других остановок, т. к. трамвай есть более привязанный к своим маршрутам транспорт.
  • Входы метро.
  • Железнодорожные станции. Станции метро отсутствуют, т. к. уже есть входы.
  • Церкви и мечети. Являются хорошими ориентирами, их видно издалека по крестам/полумесяцам на крышах.
  • Опоры линий электропередач. Являются хорошими ориентирами из-за своей высоты, особенно вне городской местности.
  • Памятники, статуи. Являются хорошими ориентирами в однообразной городской местности.
  • Водопады.
  • Естественные и памятные камни.
  • Вершины возвышенностей (гор, холмов).

Линейные объекты отчасти служат ориентирами, отчасти являются препятствиями, отчасти являются путями движения. Линейные объекты типа дорог имеют также толщину, зависящую от количества полос, т. к. это иногда бывает полезно.
Список классов линейных объектов:

  • Незначительные дороги (внутриквартальные проезды, служебные).
  • Подземные дороги.
  • Дороги классов 1, 2. Соответствуют дорогам типов road и tertiary, secondary из osm.
  • Дороги класса 3. Соответствуют дорогам типов primary и trunk из osm.
  • Пешеходные и подземные пешеходные дорожки. Нужны, т. к. пешеходам надо по ним ходить, а велосипедистам иногда по ним можно ездить.
  • Ручьи и малые реки. Нужны, т. к. являются препятствиями.
  • Морские/океанические побережья. Рисуем линейно, т. к. нету возможности просто нарисовать площадники морской/океанской воды.
  • Крутые склоны. Являются препятствиями, а иногда - ориентирами.
  • Железнодорожные пути. Нужны как ориентир.
  • Второстепенные железнодорожные пути. Рисуются бледнее, не рисуются на высоких масштабах. Нужны, т. к. могут иногда быть препятствиями.
  • Трамвайные пути.
  • Второстепенные трамвайные пути. Не рисуются на высоких масштабах.
  • Заборы. Нужны, т. к. через них не пройти и не проехать.

Площадные объекты. Нужны в основном для того, чтобы показать, куда можно/стоит заходить/заезжать и чего там стоит ожидать.
Список классов площадных объектов:

  • Вода. Через неё не пройти и не проехать. Соответствует объектам natural=water, waterway=riverbank, landuse=basin из osm.
  • Трава. Через неё можно иногда пройти и проехать, но лучше не надо, если есть дорога.
  • Кладбище. Это как парк, но с могилами.
  • Промышленная зона. В неё выделены территории, куда по обычной повседневной непрофессиональной необходимости заходить не стоит, или даже нельзя. В этот класс выделены собственно промышленные зоны, зону железнодорожных путей, стройки, гаражи.
  • Жилая зона. Как правило заходить можно и не очень опасно, хотя могут быть нюансы.
  • Публичные территории. Места, где располагаются городские здания, службы, сервисы и т. д,, необходимые большинству людей. В этот класс объединены территории образовательных учреждений (детских садов, школ, университетов и т. д.), медицинских учреждений, учреждений власти, территории офисов, развлечений и торговли.
  • Парковки. Через них можно пройти и проехать, но есть опасность автомобилей.
  • Деревья. Любая территория покрытая деревьями или крупным кустарником, будь то естественный лес или какой-нибудь парк.
  • Собственно парки. Это отдельный класс от деревьев, т. к. парки могут сильно отличаться от лесов - в них есть дорожки, стригут траву и т. д.
  • Спортивные площадки. Нужны как ориентиры.
  • Пешеходная территория. Нужна, чтобы явно было понятно, что можно ходить по всей их площади.
  • Мосты.
  • Сельскохозяйственные поля. Отличаются от просто травы, т. к. ходить по ним и топтать посевы не рекомендуется.
  • Дачные участки. Это особые территори, на которых надо проявлять некоторую осторожность и на которых может не быть нормальных дорог.
  • Пески, пляжи. По песку ходить можно, ездить тяжело. Поэтому обозначить их надо.
  • Болота. Обозначаются отдельно, т. к. визуально они сильно отличаются от воды, а по проходимости - от травы и лесов.
  • Дома. Пока что все дома рисуются одинаково.

Ограничения

  • Экспортёр, пока что, работает только с osm xml, при этом зачитывает весь osm файл в память. Поэтому, размер обрабатываемых карт ограничен доступным объёмом памяти. Ориентировочное потребление памяти - десятикратное, относительно исходного osm xml.
  • Не поддерживаются карты на границе долготы 180 градусов /-180 градусов.
  • Не поддерживается отображение морей площадниками, есть только линии побережий.
  • Экспортёр плохо работает с площадными объектами с большим количеством отверстий и может, иногда, зависнуть при их обработке.

Как собрать

  • Выкачать репозиторий со всеми подмодулями (git clone; git submodule update --recursive --init ).
  • Открыть CMakeLists.txt в IDE, которая умеет работать с CMake. Можно сгенерировать проект для системы сборки вручную.
  • Собрать.

Как собрать под Android

  • Скачать Android SDK и Android NDK.
  • Скачать SDL 2.
  • В скрипте android/build.sh указать необходимые пути.
  • Запустить вышеназванный скрипт.

Авторство

Copyright © 2019 Artöm "Panzerscrek" Kunz.

Стили заимствованы из https://github.com/gravitystorm/openstreetmap-carto Created by Andy Allan andy@gravitystorm.co.uk and contributors. Based on original cartography by Steve Chilton and others.

About

simple maps application, based on OSM data

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages