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

Related tags

Location 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
GoogleMapsApp - Google Maps App With Swift

googleMapsApp Тестовое задание Current location: Import points from servers:

Fedot Evseev 0 Jan 11, 2022
The most power-efficient and lightweight iOS location manager for Swift and ObjC

IngeoSDK for iOS Overview IngeoSDK is a power-efficient location manager for iOS (Swift and Objective-C), which extends and improves CoreLocation. It

IngeoSDK 99 Feb 28, 2022
iOS and  Watch app to find city bicycles to rent in your city

Bike-Compass Bike Compass is a full-featured city bicycle finder app for iOS. Using a bike is enjoyable, that is why our app is fast, beautiful, and d

Raul Riera 80 May 18, 2022
Israel's tech jobs, startups, incubators and investors iOS App

Startups | Mapped In Israel Startups is a beautiful way to discover new startups, locate co-working spaces and get funded. Startups lets you: Visualiz

Sugar So Studio 31 Feb 9, 2022
Abandonned project - iOS and watchOS apps to travel with Geneva Public Transports

Presentation tpg offline is an iOS app that allows you to travel in Geneva by bus and tramay without cellular data. This application is available on t

tpg offline 14 Jan 1, 2023
A project to test the accuracy of iOS geofence and visits monitoring.

GeofenceTester iOS About This Component • Build • Support • Contribute • Licensing A project to test the accuracy of iOS geofence and visits monitorin

Telekom Open Source Software 3 Oct 27, 2022
A Location Manager for easily implementing location services & geofencing in iOS. Ready for iOS 11.

A Location Manager for easily implementing location services & geofencing in iOS, written in Objective-C. Ready for iOS 11. Features Get current/conti

Benzamin Basher 108 Jul 9, 2022
🛰 CoreLocation Made Easy - Efficient & Easy Location Tracker, IP Location, Gecoder, Geofence, Autocomplete, Beacon Ranging, Broadcaster and Visits Monitoring

Location Manager Made Easy SwiftLocation is a lightweight Swift Library that provides an easy way to work with location-related functionalities. No mo

Daniele Margutti 3.2k Dec 30, 2022
Simple library to detect motion type (walking, running, automotive) and count users steps. This library will make motion detection much more easily.

SOMotionDetector Simple library to detect motion for iOS by arturdev . Based on location updates and acceleration. ###Requierments iOS > 6.0 Compatibl

Artur  Mkrtchyan 1.1k Nov 25, 2022
A ready for use and fully customizable location picker for your app

LocationPicker A ready for use and fully customizable location picker for your app. Features Installation Cocoapods Carthage Swift Package Manager Qui

Zhuoran 397 Nov 16, 2022
A simple map with the location of the user and the control of permissions

Proposal The project is based on implementing a simple map with the location of

Raúl Pedraza León 0 Dec 26, 2021
An original project making use of custom UITableViewCells, date formatting, json parsing, and handling user location.

SunTimes An original project making use of custom UITableViewCells, date formatting, json parsing, date and time formatting based on the json data, an

David Chester 0 Feb 8, 2022
Open-source iOS application written to explore Swift in its early days

Cepp iOS application written in Swift. Icon by: Rodrigo Nascimento (tks :D) IMPORTANT: *This project uses CocoaPods as the dependency manager, make su

Filipe Alvarenga 14 Sep 12, 2022
Contains the swift rewrite of Find My Bus NJ iOS App

FIND MY BUS NJ 2 An app for tracking NJ Transit bus times. Dependancies Alamofire SwiftyJSON PKHUD Fabric Getting started Install fastlane and imagema

null 44 Dec 10, 2022
A native iOS client to map the Pokemon around you!

Pokemap client for iOS This is a client for the Pokemap server (https://github.com/RocketMap/RocketMap) iPokeGO is now officially available on the App

Dimitri Dessus 640 Oct 12, 2022
iOS app which uses the Moves API to visualize which places you spent the most time at in the last seven days.

Places Places uses the Moves API to visualize which places you spent the most time at in the last seven days. It runs on iOS 7 only and you need to ob

Boris Bügling 43 Feb 9, 2022
Neverlate is a self-improvement iOS app for people who are often late.

Neverlate Team: Ayuna Vogel, Charles Kang, Eric Sze. Neverlate is a self-improvement iOS app for people who are often late. Put money at stake and pic

Ayuna Vogel 28 Nov 1, 2022
🚗 iOS app for finding public parking lots

?? ParkenDD ParkenDD shows you the current parking situation for various European cities, including Dresden, Ingolstadt, Hamburg, Zürich and Aarhus to

Kilian Koeltzsch 49 Feb 9, 2022
iOS client for the Prey anti-theft software.

Here you will find all the source code for the current and in development releases of the Prey client for iOS devices. Prey is the most complete anti-

Prey 255 Dec 14, 2022