🗺️ MAPS.ME — Offline OpenStreetMap maps for iOS and Android

Related tags

Maps omim
Overview

MAPS.ME

MAPS.ME is an open source cross-platform offline maps application, built on top of crowd-sourced OpenStreetMap data. It was publicly released for iOS and Android.

Submodules

This repository contains submodules. Clone it with git clone --recursive. If you forgot, run git submodule update --init --recursive.

Translations

If you want to improve app translations or add more search synonyms, please check our wiki.

Compilation

To compile the project, you would need to initialize private key files. Run configure.sh and press Enter to create empty files, good enough to build desktop and Android debug packages.

For detailed installation instructions and Android/iOS building process, see INSTALL.md.

Building maps

To create one or many map files, first build the project, then use python module maps_generator.

Map styles

MAPS.ME uses its own binary format for map styles, drules_proto.bin, which is compiled from MapCSS using modified Kothic library. Feature set in MWM files depends on a compiled style, so make sure to rebuild maps after releasing a style.

For development, use MAPS.ME Designer app along with its generator tool: these allow for quick rebuilding of a style and symbols, and for producing a zoom-independent feature set in MWM files.

See STYLES.md for the format description, instructions on building a style and some links.

Development

You would need Qt 5 for development, most other libraries are included into the repository: see 3party directory. The team uses mostly XCode and Qt Creator, though these are not mandatory. We have an established c++ coding style and Objective-C coding style.

You can turn on experimental public transport support. For details please read simple instruction.

See CONTRIBUTING.md for the repository initialization process, the description of all the directories of this repository and other development-related information.

All contributors must sign a Contributor Agreement, so both our and their rights are protected.

Feedback

Please report bugs and suggestions to the issue tracker, or by mail to [email protected].

Authors and License

This source code is Copyright (C) 2020 My.com B.V. (Mail.Ru Group), published under Apache Public License 2.0, except third-party libraries. See NOTICE and data/copyright.html files for more information.

Comments
  • [transit] GTFS converter.

    [transit] GTFS converter.

    @bykoianko @darina @maksimandrianov PTAL

    Описание утилиты для генерации json с необходимыми данными из GTFS-фидов

    Исполняемый файл gtfs_converter. Параметры:

    • path_mapping - путь к мапингу сущностей GTFS на константные, не меняющиеся при перезапуске id из интервала FakeFeatureIds::IsTransitFeature(). Файл нужен, чтобы при перегенерации json'ов id не менялись, и у пользователя с разными версиями карт ничего бы не сломалось.
    • path_gtfs_feeds - путь к директории с поддиректориями, содержащими фиды.
    • path_directory_json - путь к директории для сохранения json'ов.
    • path_resources_dir - путь к omim/data. Нужен для работы color picker'а, притягивающего цвет route к ближайшему цвету из data/transit_colors.txt.
    • start_feed - опциональный параметр. С какого фида продолжить работу. Указывается название директории с фидом. Все фиды до данного пропускаются.
    • stop_feed - опциональный параметр. на каком фиде остановить работу. Все фиды после данного не обрабатываются.

    Пример запуска для обработки всех фидов в path_gtfs_feeds: ./gtfs_converter --path_gtfs_feeds=feeds --path_json=jsons_for_generator --path_mapping=mapping.txt --path_resources=omim/data

    Пример запуска для обработки только двух фидов - директорий с названиями "10" и "11": ./gtfs_converter --path_gtfs_feeds=feeds --path_json=jsons_for_generator --path_mapping=mapping.txt --path_resources=omim/data --start_feed="10" --stop_feed="11" В случае запуска с какого-то фида (указан start_feed), происходит дозапись в файлы из path_json. Если же этот параметр не указан, вместо дозаписи файлы полностью перезаписываются.

    Новый формат данных для работы с общественным транспортом

    Этот реквест реализует пайплайн преобразования директорий с GTFS-фидами (каждый из которых состоит из csv-файлов) в набор line-by-line json'ов. Путь к директории с результирующими json должен быть прописан для генератора в map_generator.ini вместо SUBWAY_URL. Генератор на основе json подготовит соответствующие mwm-секции для работы с общественным транспортом в приложении.

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

    Отличия новых json-файлов от старого формата json, в котором поставлялось метро:

    • Несколько файлов вместо единого.
    • Line-by-line json вместо обычного.
    • Замена osm id и внутреннего id на единый TransitId, который сохраняется между перегенерациями карт разных версий. TransitId либо находится в интервале FakeFeatureIds::IsTransitFeature(), и тогда он обозначает сущность из GTFS или метро, либо лежит в интервале обычных OSM id, и тогда обозначает те сущности метро, которые ссылаются на объекты OSM (выходы из метро и тд).

    Разбивка по сущностям, отличная от старой. Поля тоже отличаются. Ниже приведена схема, описания файлов и их полей и примеры строк.

    jsons **networks.json** - операторы - id - название оператора. Здесь и далее поля названия представляют собой мапу айди языка - текст. Если в GTFS feed_info.txt отсутствует информаци о языке, то по умолчанию ставится английский.
    {"id":4048948901,"title":[{"lang":"en","text":"LA Go Bus"}]}
    

    routes.json - маршруты. Один маршрут может состоять из нескольких lines

    • id
    • id оператора, к которому привязан маршрут
    • цвет линии
    • тип общественного транспорта
    • название маршрута
    {"id":4048915470,"network_id":4048915465,"color":"blue","type":"rail","title":[{"lang":"en","text":"Special Event Extra Service"}]}
    

    lines.json - линии маршрута. У двух линий одного и того же маршрута могут не совпадать: полилиния; список остановок; даты работы и дни-исключения в графике работы; расписание работы. То есть линией может быть не только "маршрут от одной конечной до другой" и "в обратную сторону", но и один и тот же отрезок пути, но с совершенно разными расписаниями. Или один и тот же отрезок пути, но с разным списком остановок и разными интервалами.

    • id
    • route id - маршут, к которому относится линия
    • ~~shape id - полилиния для данного line~~ DELETED
    • ShapeLink - "ссылка" на кусок shape, относящейся к этой линии. Состоит из: shape id, start idex, end index. ADDED
    • stop ids - список остановок. Остановки перечислены в порядке следования транспорта по данной линии.
    • название линии
    • интервалы циркуляции транспорта по этой линии. Могут быть не заполнены. Интервал - это пара значений: промежуток в секундах и отрезок дня, для которого он действителен. Отрезок дня - в формате osm opening hours. Таким образом интервал зависит от времени: интервал движения автобуса с 10:00 до 12:00 каждые 15 минут, c 12:01 до 18:00 каждые 10, а c 18:01 до 22:00 каждые 20 минут. UPDATE
    • osmoh::OpeningHours дни работы - в формате osm opening hours хранится информация, по каким дням недели начиная с какого числа и заканчивая каким числом эта линия активна или не активна, учитываются и исключения в расписании.
    {"id":4047400409,"route_id":4048911702,"shape":{"id":4048914922,"start_index":0,"end_index":205},"title":[{"lang":"en","text":""}],"stops_ids":[4048915038,4047400615,4047400616,4048915039,4047400617,4047400618,4048915040,4047400620,4048915041,4047400621,4047400622,4048915042,4047400624,4047400625,4047400626,4047400627,4047400628,4047400629,4048915043,4047400631,4047400632,4048915044,4047400634,4047400635,4047400636,4047400637,4047400638,4047400639,4047400640,4047400641,4047400642,4048915045,4047400644,4047400645,4048915046,4048915047,4047400647,4048915048,4047400648,4047400649,4048915049,4047400651,4047400652,4026542873,4048915050,4047400654,4047400655,4048915051,4047400657,4036441623,4048915052,4047400658,4047400659,4048915053,4047400661,4047400662,4047400663],"service_days":"2020 Apr 18-2020 May 29 Sa-Sa; 2020 Apr 18-2020 May 29 Su-Su closed","intervals":[]}
    

    shapes.json - полилинии

    • id
    • вектор m2::PointD точек - полилиния
    {"id":4048914807,"points":[{"x":-122.42373600000001,"y":40.775536922248669},{"x":-122.422065,"y":40.774955435607225},{"x":-122.421807,"y":40.774866948826073},{"x":-122.42111981639971,"y":40.774521158122255},{"x":-122.421081,"y":40.774501625714656},{"x":-122.41952658685517,"y":40.77395581671977},{"x":-122.394953,"y":40.873905644937466},{"x":-122.394987,"y":40.87402079957468}]}
    

    stops.json - остановки

    • id
    • ~~lines ids - список линий маршрутов, относящихся к этой остановке~~ DELETED
    • m2::PointD - координата остановки.
    • название остановки - нужно, потому что больше его взять попросту неоткуда. В метро этого поля не было, потому что название подтягивалось из ОСМ.
    • расписание. NEW пары line id - osmoh:: OpeningHours. Для каждой линии, проходящей через остановку, список времен прибытие-отбытие.
    {"id":4047401815,"point":{"x":-122.469273,"y":40.765036587936251},"title":[{"lang":"en","text":"Daly City Bart Station"}],"timetable":[{"line_id":4047391414,"arrivals":"05:20-05:20 open"},{"line_id":4047391416,"arrivals":"04:05-04:05 open"}]}
    

    edges.json - ребра дорожного графа по линиям

    • id from_stop
    • id to_stop
    • line id
    • вес - сколько секунд потребуется, чтобы по линии line id добраться от from_stop до to_stop.
    • ShapeLink - "ссылка" на кусок полилинии, описывающий это ребро. Состоит из: shape id, start idex, end index. По shape id определяется shape, и внутри ее вектора точек находится отрезок от start idex до end index включительно.
    {"line_id":4047391343,"stop_id_from":4048915463,"stop_id_to":4048915464,"weight":59,"shape":{"id":4047391340,"start_index":541,"end_index":545}}
    

    edges_transfer.json - ребра дорожного графа по пересадкам

    • id from_stop
    • id to_stop
    • вес - сколько секунд потребуется, чтобы сделать переход с from_stop к to_stop.
    {"stop_id_from":4046917465,"stop_id_to":4046917441,"weight":180}
    

    transfers.json - пересадочные узлы

    • id
    • m2::PointD - координата пересадки.
    • stops ids - список остановок, относящихся к этому пересадочному узлу.
    {"id":4046920600,"point":{"x":-117.15321790199999,"y":34.641982917905516},"stops_ids":[4046919060,4048936712]}
    

    gates.json - входы/выходы

    • id
    • is exit
    • is entrance
    • пары id остановки - вес UPDATED- сколько секунд потребуется, чтобы пройти расстояние от gate до остановки. Список остановок и их весов.
    {"id":4048918257,"weights":[{"stop_id":4048918228,"time_to_stop":198},{"stop_id":4048918218,"time_to_stop":198},{"stop_id":4048918215,"time_to_stop":198},{"stop_id":4048918210,"time_to_stop":198}],"exit":true,"entrance":true,"point":{"x":-74.061300000000003,"y":44.671850577887199}}
    

    Особенности реализации

    • В 99% фидов отсутствуют подсказки о матчинге последовательности остановок на полилинию маршрута. Поэтому в методе WorldFeed::ModifyShapes() реализован алгоритм, который по полилинии маршрута, последовательности остановок и их координатам проецирует остановки на ближайший участок маршрута. При необходимости добавляет точку-проекцию в полилинию маршрута и обновляет соответствующие ссылки на данную полилинию (edges, lines).

    • В фидах присутствуют полилинии, которые целиком включены в другие, более длинные полилинии. Чтобы не дублировать данные, метод WorldFeed::ModifyLinesAndShapes() удаляет такие shape, и обновляет ссылки из элементов line на shape.

    • В нашей 3party реализации opening hours отсутствует возможность задавать тип Event вместо интервала (то есть единственное время или единственную дату вместо пары начало-конец). Поэтому в расписании прибытия транспорта на остановку всегда присутствует начало-конец, даже если они совпадают.

    • Почти во всех фидах отсутствует прямое указание языка фида (оно должно быть в feed_info.txt). В методе WorldFeed::SetFeedLanguage() за язык по умолчанию считается "default", который есть в languages.txt и означающий язык, используемый в данной местности. Если в фиде указан язык, он ищется в нашем списке поддерживаемых языков. Если его там нет, язык фида сбрасывается в "default".

    opened by mesozoic-drones 69
  • [routing] Мaxspeed section.

    [routing] Мaxspeed section.

    Цель данного PR - создание секции с информацией об ограничениях скоростей на дорогах и использовании ее. Т.е. данная секция сохраняет таг maxspeed.

    Формат секции:

    1. Записываем заголовок с номером версии и со смещениями всех таблиц.
    2. Записываем elias_fano с feature ids, где заданы maxspeed с одним байтом. (Как вариант, для ускорения, на этапе чтения можно пробовать вычитать в map или unordered_map)
    3. Записываем SimpleDenseCoding с предопределенными значениями (не только скоростями в цифрах, а так же значениями типа none, walk и т.п.). Все варианты должны поместиться в 1 байт. Замечание. Предопределенные значения типа RU:Urban и т.п. будут конвертироваться в скорости. Это связано с тем, что основаная масса значений тага maxspeed сейчас задана цифрами. Однако, то что рисуется в osm (перерисовывается) сейчас задается через строки типа RU:Urban. Т.е. ожидается, что топ используемых значения по популярности будет меняться.
    4. Записываем вектор с feature id и ограничениями скорости в две стороны, по 2 байта на каждую скорость; (Это необходимо, поскольку в редких случаях на двусторонних дорогах бывают разные ограничения в разные стороны).

    Процесс создания секции:

    • В TranslatorPlanet::EmitElement() добавляем код, сохраняющий maxspeed.csv с ограничениями скоростей для всего мира. В каждой строчке osm id дороги,forward maxsteed или osm id дороги,forward maxspeed,backward maxspeed. DONE.

    • В generator_tool, в районе if (FLAGS_make_city_roads) создаем секцию, как описано выше на базе: maxspeed.csv и osmToFeatureFilename Т.е. перебираем все feature id в mwm, смотрим нет ли для каких-то из них maxspeed. И если есть, то сохраняем его.

    Тесты секции maxspeed

    Сравнительный тест на размеры секции maxspeed для Беларуси. Первая запись без сжатия (cfecf13ed2d9fb33bbecee43f2812a34c3f66633 данного PR). Вторая запись с сжатием, как описано и реализовано в PR.:

    Belarus_Brest Region.mwm (5181 forward and 184 bidirectional)
    Без сжатия: maxspeed: offs  21939528 len    53656
    maxspeed: offs  21939528 len     8824
    
    Belarus_Homiel Region.mwm (3266 forward and 1 bidirectional)
    Без сжатия: maxspeed: offs  24086896 len    32676
    elias_fano: maxspeed: offs  24086896 len     5246
    
    Belarus_Hrodna Region.mwm (7335 forward and 414 bidirectional)
    Без сжатия: maxspeed: offs  26565184 len    77496
    elias_fano: maxspeed: offs  26565184 len    13300
    
    Belarus_Maglieu Region.mwm (2830 forward and 41 bidirectional)
    Без сжатия: maxspeed: offs  19227968 len    28716
    elias_fano: maxspeed: offs  19227976 len     4894
    
    Belarus_Minsk Region.mwm (11760 forward and 151 bidirectional)
    Без сжатия: maxspeed: offs  45111888 len   119116
    elias_fano: maxspeed: offs  45111880 len    18418
    
    Belarus_Vitebsk Region.mwm (6649 forward and 12 bidirectional)
    Без сжатия: maxspeed: offs  39392632 len    66616
    elias_fano: maxspeed: offs  39392632 len     9768
    

    Секции maxspeed больших и хорошо замапленных городов со сжатием на базе elias_fano, как описано и реализовано в PR.

    Germany_Berlin.mwm (33598 forward and 21 bidirectional)
    maxspeed: offs  49142144 len    38982
    
    UK_England_Greater London.mwm (71430 forward and 1 bidirectional)
    maxspeed: offs  44348424 len    70342
    
    Netherlands_North Holland_Amsterdam.mwm (34556 forward and 3 bidirectional)
    maxspeed: offs  77695200 len    39234
    
    Russia_Moscow.mwm (12018 forward and 59 bidirectional)
    maxspeed: offs  41088144 len    18754
    

    @mpimenov @maksimandrianov @ygorshenin @gmoryes PTAL

    opened by bykoianko 48
  • [new downloader]

    [new downloader]

    PR new-downloader на new-search.

    Сейчас новый загрузчик (в new-downloader) работает и под Андроид и под iOS. Им можно скачать карту, как из загрузчика, так и с карты. А так же удалить карту.

    DUDE JTTP

    opened by bykoianko 43
  • Linear extrapolation of GPS position.

    Linear extrapolation of GPS position.

    Экстраполятор gps позиции.

    Эта версия не плохо работает в поле на android и iOS. Сейчас тестируется на расход аккумулятора: https://jira.mail.ru/browse/MAPSME-7500

    До ее мержа в мастер я хочу:

    • сделать одно из todo указанных в PR: // @TODO(bykoinako) Method m_extrapolatedLocationUpdate() is run on gui thread every // |kExtrapolationPeriodMs| milliseconds. But after changing GPS position // (that means after a call of method Routine::SetGpsInfo()) // m_extrapolatedLocationUpdate() should be run immediately on gui thread.

    • написать юнит тесты на Extrapolator

    • сделать, что экстраполятор включался только в режиме авто навигации

    @rokuz @mpimenov PTAL

    opened by bykoianko 40
  • [generator] [routing] Restrictions

    [generator] [routing] Restrictions

    Stage 1. Preprocess data.

    1. generator/restriction_writer.cpp
    2. generator/restriction_writer.hpp
    3. generator/relation_tags.cpp
    4. generator/translator_planet.cpp

    Это одна из начальных стадий, когда к нам приходит чистый Osm Relation, и записываем информацию о restrictions в restriction.csv. Здесь я изменил формат csv - теперь мы поддерживаем restrictions у которых есть way в качестве via, а в случае с restriction вида |way1| -> |node| -> |way2| мы запоминаем координаты |node|, чтобы в последствии удалить те restriction, у которых way1 и way2 не пересекаются в |node|.

    Stage 2. Process data.

    1. generator/restriction_collector.cpp
    2. generator/restriction_collector.hpp
    3. generator/generator_tool/generator_tool.cpp
    4. geometry/point2d.hpp
    5. generator/restriction_generator.cpp
    6. generator/restriction_generator.hpp

    Тут мы считываем строчки из restriction.csv. Добавил тут проверку пересечения feature, которые учавствуют в restrions. Поэтому теперь вначале делается BuildRoutingIndex() (generator_tool.cpp), а потом BuildRoadRestrictions().

    Для restriction вида |way1| -> |node| -> |way2|, просто проверяем, что |way1| и |way2| пересекаются в |node|. Для restriction вида |way1| -> |way2| -> ... -> |wayN|, проверяем, что |way1| и |way2| имеют общие Joint, ... , |wayN-1| и |wayN| имеют общие Joint.

    Stage 3. Generator tests.

    1. generator/generator_tests/restriction_collector_test.cpp
    2. generator/generator_tests/restriction_test.cpp
    3. routing_common/CMakeLists.txt
    4. routing/routing_tests/CMakeLists.txt
    5. routing/routing_tests/index_graph_test.cpp
    6. routing/routing_tests/index_graph_tools.cpp
    7. routing/routing_tests/index_graph_tools.hpp
    8. routing/routing_tests/road_access_test.cpp
    9. routing/routing_tests/applying_traffic_test.cpp
    10. routing/routing_integration_tests/routing_test_tools.cpp

    Я тут переписал тесты, какие-то удалил (бесполезные). В тестах добавился созданный руками IndexGraph (в комментах есть ascii-картинка). Для того, чтобы использовать штуки для IndexGraph пришлось перенести index_graph_tools.hpp, index_graph_tools.cpp из routing_tests в routing_common так как там уже реализованы некоторые ф-ии, а routing_tests является executable, а не library и линковать с generator_tests не получилось.

    В тестах проверяется добавляение restrictions в пустую mwm, сравнивается с ожидаемым результатом. Проверяется, что не добавляются фичи, с некорректными featureId, а также те, которые не пересекаются.

    Stage 4. Restrictions deserialization from mwm to routing data structure.

    1. routing/restriction_loader.hpp
    2. routing/restriction_loader.cpp
    3. routing/restrictions_serialization.cpp
    4. routing/restrictions_serialization.hpp
    5. routing/index_graph.cpp (IndexGraph::SetRestrictions)

    Тут происходит десериализация из mwm. Как было раньше: мы доставали restrictions, конвертировали все Only в No и после чего добавляли в std::vector у IndexGraph набор restrictions. Далее делали бинпоиск по этому вектору при построении маршрутов. Как будет сейчас:

    image

    Stage 5. Using restriction in routing

    1. routing/index_graph.hpp
    2. routing/joint_segment.cpp
    3. routing/joint_segment.hpp
    4. routing/segment.hpp
    5. routing/base/astar_algorithm.hpp
    6. routing/base/astar_graph.hpp
    7. routing/index_graph_starter_joints.hpp
    8. routing/single_vehicle_world_graph.cpp
    9. routing/single_vehicle_world_graph.hpp
    10. routing/transit_world_graph.cpp
    11. routing/transit_world_graph.hpp
    12. routing/world_graph.cpp
    13. routing/world_graph.hpp
    14. routing/index_graph_starter.hpp
    15. generator/routing_index_generator.cpp

    Как мы теперь их используем в index_graph.hpp есть ф-ия template <typename Parent> bool IsRestricted(...) Она принимает:

    1. Parent const & parent - чтобы селектить предков по 4)
    2. parentFeatureId - так как одного предка мы знаем (откуда мы пришли), то передаем его featureId сразу
    3. currentFeatureId - текущая фича, чтобы заселектить restrictions, которые относятся к ней
    4. std::map<Parent, Parent> & parents - предки из A*

    Именно эта ф-ия в конечном итоге проверяет запреты, использую предков из A*. Как она вызывается:

    1. В мастере уже PR, который делает graph абстрактным классом в A*.
    2. A* при создании BidirectionalStepContext вызывает graph.SetAStarParents(forward, parent)
    3. Последнее, в свою очередь, пробрасывается до WorldGraph (а именно до SingleVehicleWorldGraph) где уже и сохраняются raw pointers на std::map из A*.
    4. Вызов GetEdgeList имеет следующую цепочку: A* -> IndexGraphStarterJoints -> IndexGraphStarter -> WorldGraph -> (тут и передаются parents, которые мы сохранили) IndexGraph

    Stage 6. Routing unit tests.

    1. routing/routing_tests/cumulative_restriction_test.cpp
    2. routing/routing_tests/restriction_test.cpp

    Тут добавил unit tests на многозвенные restrictions.

    Results

    image image image image image image image image Был разговор о том, что osrm не поддерживает restrictions, в больше чем одним way, proof: image

    image

    opened by gmoryes 37
  • [altitude] Adding altitude section to mwm and using altitude for building pedestrian and bicycle routes.

    [altitude] Adding altitude section to mwm and using altitude for building pedestrian and bicycle routes.

    Добавление секции с высотами точек фичь в mwm.

    Данный PR:

    1. добавляет секцию для хранения высоты в mwm; В секции: хедер (16 байт): версия (2 байта), минимальная высота(2 байта), смещения до индексов и данных с высотами(3 смещения * 4 байта); индекс: rs_bit_vector (1 если фича имеет высоту и 0 если нет); elia_fano (смещения данными с высотами); данные с высотами: набор WriteVarInt с дельтами;
    2. тесты на создание и чтение этой секции;
    3. используются данные с высотами при прокладке пешего и вело маршрутов. Считается длина в пространстве вместо длины на плоскости.

    @ygorshenin @mpimenov @syershov @Zverik и те кому интересно PTAL

    https://jira.mail.ru/browse/MAPSME-793

    opened by bykoianko 37
  • [bicycle routing] Using attr bicycle=yes or no and oneway:bicycle for bicycle routing.

    [bicycle routing] Using attr bicycle=yes or no and oneway:bicycle for bicycle routing.

    Теперь используем для прокладки велосипедного маршрута добавленные в https://github.com/mapsme/omim/pull/3424 https://github.com/mapsme/omim/pull/3297 атрибуты: bicycle=yes or no and oneway:bicycle

    Если есть атрибут bicycle=yes и фича линейная - использовать ее для прокладки вело маршрута. Если есть атрибут bicycle=no не использовать фичу для прокладки вело маршрута. Если oneway:bicycle=no рассматривать фичу, как двустороннюю.

    https://jira.mail.ru/browse/MAPSME-1485

    Замечание. Данный PR влияет на генерацию карт. Дороги для которых hwtag=yesbicycle и hwtag"=yesfoot будут добавлены в карту.

    @ygorshenin @Zverik PTAL

    opened by bykoianko 37
  • [android] Yet another LocationHelper fix fix.

    [android] Yet another LocationHelper fix fix.

    @mgsergio or @bykoianko or @yunikkk or @trashkalmar PTAL

    https://fabric.io/mapsme/android/apps/com.mapswithme.maps.pro/issues/57b33942ffcdc04250c0aec0

    opened by ygorshenin 34
  • [Platform][Android][iOS] Upload file in background.

    [Platform][Android][iOS] Upload file in background.

    • Реализация структуры HttpPayload, содержащей поля для отправки данных по HTTP.
    • Замена отдельных полей в классе HttpUpload на структуру HttpPayload, добавление геттеров для полей структуры.
    • Класс HttpBackgroundUploader с методом-заглушкой Upload() и полем HttpPayload. Метод Upload() должен быть реализован на платформах для отправки файла по HTTP по событию подключения wi-fi, в том числе из бэкграунда.
    opened by mesozoic-drones 31
  • Getting rid of Edge oriented route and turn bug fix.

    Getting rid of Edge oriented route and turn bug fix.

    В этот PR будут добавляться коммиты, цель которых, исправить существенный баг в системе генерации тернов. Для реализации этой цели будет сделан сегменто-оринетированный маршрут.

    Сейчас в данном PR-те:

    • отключение поддержки прокладки пешего и вело маршрутов по картам до 28.03.2017 включительно;
    • починка routing_benchmarks тестов;
    • перевод routing_benchmarks на IndexRouter;
    • удаление RoadGraphRouter;
    • рефакторинг ReconstructPath;
    • исправление бага по тернам;

    Данный PR должен войти в мастер после реализации ветки 8.0.6. Пока работы по тернам я продолжаю в нем.

    Данный PR исправляет: https://jira.mail.ru/browse/MAPSME-3375 https://jira.mail.ru/browse/MAPSME-5188 https://jira.mail.ru/browse/MAPSME-1482 https://jira.mail.ru/browse/MAPSME-6787

    @mpimenov @tatiana-kondakova PTAL

    opened by bykoianko 31
  • Collect road restrictions in feature id term on generation step.

    Collect road restrictions in feature id term on generation step.

    PR реализует следующее. 1. На первом и втором проходе генерации собираются ограничения проездов в osm id и mapping из osm id в feature id. Примерно вот так:

    file: restrictions_in_osm_id.csv No, 157616943, 157616943, No, 5185062, 395192830, No, 37914683, 37914683, Only, 265752848, 265752852, No, 48601078, 5185021, No, 48601078, 48601078,

    file: feature_id_to_osm_ids.csv 778192, 421826190, 778193, 421829987, 778194, 421829988, 778195, 421829989, 778196, 421829990, 778197, 421829991, 778198, 421829992, 778199, 421829993,

    Названия файлов задаются параметрами generator_tool примерно вот так: --restriction_name="restrictions.csv" --feature_id_to_osm_ids_name="feature_id_to_osm_ids.csv"

    1. Если у generator_tool задан параметр --generate_routing, то будет создана секция routing и в нее будут положены restrictions. В дальнейшем в нее же будет добавлен и граф дорог в PR-те @dobriy-eeh (ожидается 7-го ноября).

    2. Рестрикшены уже хранятся в компактном виде. В Москве 10K рестрикшенов. Для них потребовалось 37KB. Update: 32KB.

    @ygorshenin @mpimenov @syershov @Zverik @dobriy-eeh PTAL

    opened by bykoianko 30
  • Maps.me always opens at same location

    Maps.me always opens at same location

    How can I make maps.me open to my most recent location or where I left off rather than to some sort of default location that it always goes to, despite me not having been there on the map or in person for years?

    opened by froisea 2
  • CVE-2007-4559 Patch

    CVE-2007-4559 Patch

    Patching CVE-2007-4559

    Hi, we are security researchers from the Advanced Research Center at Trellix. We have began a campaign to patch a widespread bug named CVE-2007-4559. CVE-2007-4559 is a 15 year old bug in the Python tarfile package. By using extract() or extractall() on a tarfile object without sanitizing input, a maliciously crafted .tar file could perform a directory path traversal attack. We found at least one unsantized extractall() in your codebase and are providing a patch for you via pull request. The patch essentially checks to see if all tarfile members will be extracted safely and throws an exception otherwise. We encourage you to use this patch or your own solution to secure against CVE-2007-4559. Further technical information about the vulnerability can be found in this blog.

    If you have further questions you may contact us through this projects lead researcher Kasimir Schulz.

    opened by TrellixVulnTeam 0
  • Download map buttons are unclickable on iOS

    Download map buttons are unclickable on iOS

    After updating to the latest version of the app I can no longer tap "Update all" link or individual maps' download buttons on "More/Download Maps" screen.

    iOS 14.8, iPhone 6s

    opened by ikonkere 1
  • BUILD_ROUTE not working with recent update of maps.me version at googlePlay

    BUILD_ROUTE not working with recent update of maps.me version at googlePlay

    As per the documentation, we are using the action (com.mapswithme.maps.pro.action.BUILD_ROUTE) to draw route and navigate on maps.me. But after the recent update on googlePlay, it's not working. When we use this action to open maps.me app with Intent from our application, it gives ActivityNotFound exception.

    opened by wasimshigri 0
Releases(py-modules-10.0.0)
Owner
MAPS.ME
The Best Open Offline Maps!
MAPS.ME
Android Maps Extensions is a library extending capabilities of Google Maps Android API v2.

Android Maps Extensions Library extending capabilities of Google Maps Android API v2. While Google Maps Android API v2 is a huge leap forward comapare

Maciej Górski 408 Dec 15, 2022
Maps application in Android Studio using the Maps SDK for android

Google-Maps-Application Maps application in Android Studio using the Maps SDK for android. This app was initially developed in Java, but then was conv

Kyle McInnis 0 Nov 30, 2021
Scale bar for Android Maps (Google Maps, OSM, MapBox, Yandex)

Map Scale View Scale view for any Android Maps SDK (not only Google Maps) Contributing I encourage you to participate in this project. Feel free to op

Stas Parshin 109 Nov 18, 2022
malik dawar 87 Sep 18, 2022
An android app that uses Google Maps API and SDK to track a user's location and calculate the total distance travelled

Bike Rush is an android app that uses Google Maps API and SDK to track a user's location and calculate the total distance travelled by him or her along with time and average speed.

Ishant Chauhan 21 Nov 14, 2022
Interactive, thoroughly customizable maps in native Android powered by vector tiles and OpenGL.

Interactive, thoroughly customizable maps in native Android powered by vector tiles and OpenGL.

Mapbox 247 Dec 27, 2022
Google Maps Api test using marker rotation and routes.

Google Maps Api test using marker rotation and routes. Features ✔️ Kotlin ✔️ DI: Hilt ✔️ Retrofit ✔️ Gson ✔️ View binding ✔️ Coroutines ✔️ AndroidX ✔️

Carlos Adan 39 Jul 15, 2022
Curve-Fit is an Android library for drawing curves on Google Maps

Curve-Fit Android library for drawing curves on Google Maps. This library uses Bezier cubic equation in order to compute all intermediate points of a

Sarweshkumar C R 63 Mar 7, 2021
Maps SDK for Android Utility Library

Maps SDK for Android Utility Library Description This open-source library contains utilities that are useful for a wide range of applications using th

Google Maps 3.4k Dec 30, 2022
Demo de uso de google maps en Android, charla para el GDG Chimbote

mapasbasico Demo de uso de google maps en Android, charla para el GDG Chimbote Puedes usar este proyecto como base para trabajar con mapas en Android.

Whiston Kendrick Borja Reyna 4 Sep 17, 2021
EasyRoutes allows you to easily draw routes through the google maps address api.

EasyRoutes EasyRoutes allows you to easily draw routes through the google maps address api. Note: You need to generate an API key from the google cons

Antonio Huerta Reyes 7 Jul 26, 2022
Membuat Custom Tooltip Marker Google Maps

Custom-Tooltip-Marker Membuat Custom Tooltip Marker Google Maps Tutorial Build with Android Studio https://youtu.be/E8ND0YThNiU Tutorial Build with St

Azhar Rivaldi 5 Feb 17, 2022
TileOverlay component for react-native-maps

TileOverlay component for react-native-maps

Joe Julik 1 Apr 10, 2022
App usage tracker which maps your app usage to geo location.

Guilt Guilt is an inspiration from Meta (pun intended), it tracks the apps usage and maps it with geo location data where the app was last used. The a

null 6 Dec 28, 2022
An app to search nearby businesses on Google Maps & Add Grocery Items to List!

GoStore: Internship Program Project A mobile app is built where the user can search for his nearby locations based on his requirement. Whenever the us

null 7 Nov 28, 2022
Positional is a location information app for Android with Compass, Clock, Level, Sun and Moon and many other features.

Positional is a location based app that utilizes the device's GPS and fetches various details of the current latitude and longitude data like Altitude, Speed, Address and similar other information and show it in easily understandable format to the user. Alongside this main functionality of being a location app, Positional also provides a separate panel for Compass and Clock, and they serve their own purpose as their name suggests.

Hamza Rizwan 85 Dec 28, 2022
Dual Camera, IMU, and GPS data recorder for Android

Dual Camera, IMU, and GPS data recorder for Android

AUT 3D Vision 17 Oct 24, 2022
This project allows you to calculate the route between two locations and displays it on a map.

Google-Directions-Android This project allows you to calculate the direction between two locations and display the route on a Google Map using the Goo

Joel Dean 970 Dec 15, 2022
LocationPicker 2.1 0.4 Java - A simple and easy to way to pick a location from map

Introduction LocationPicker is a simple and easy to use library that can be integrated into your project. The project is build with androidx. All libr

Shivpujan yadav 61 Sep 17, 2022