Merge commit '20c9fc5f' into traffic-2025072304

# Conflicts:
#	android/app/src/main/res/xml/prefs_main.xml
#	qt/CMakeLists.txt
This commit is contained in:
mvglasow
2025-07-28 18:27:49 +03:00
3129 changed files with 108805 additions and 125926 deletions

View File

@@ -2,447 +2,47 @@
---
BasedOnStyle: Google
IndentWidth: 2
BreakBeforeBraces: Allman
ColumnLimit: 120
---
Language: Cpp
AccessModifierOffset: -2
AllowShortBlocksOnASingleLine: false
AlignOperands: AlignAfterOperator
AllowShortBlocksOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: true
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
BreakConstructorInitializersBeforeComma: true
ConstructorInitializerIndentWidth: 2
DerivePointerAlignment: false
IndentCaseLabels: false
NamespaceIndentation: None
PointerAlignment: Middle
SortIncludes: true
Standard: c++20
IncludeBlocks: Regroup
IncludeCategories:
# Tests --------------------------------------------------------------------------------------------
- Regex: '^"track_analyzing/track_analyzing_tests/'
Priority: 4730
- Regex: '^"poly_borders/poly_borders_tests/'
Priority: 4740
- Regex: '^"generator/generator_integration_tests/'
Priority: 4750
- Regex: '^"generator/generator_tests/'
Priority: 4751
- Regex: '^"generator/mwm_diff_tests/'
Priority: 4752
- Regex: '^"map/style_tests/'
Priority: 4760
- Regex: '^"map/mwm_tests/'
Priority: 4761
- Regex: '^"map/map_tests/'
Priority: 4762
- Regex: '^"map/map_integration_tests/'
Priority: 4763
- Regex: '^"ge0/ge0_tests/'
Priority: 4765
- Regex: '^"openlr/openlr_tests/'
Priority: 4770
- Regex: '^"descriptions/descriptions_tests/'
Priority: 4790
- Regex: '^"ugc/ugc_tests'
Priority: 4810
- Regex: '^"search/search_integration_tests/'
Priority: 4820
- Regex: '^"search/search_tests/'
Priority: 4821
- Regex: '^"search/search_quality/search_quality_tests/'
Priority: 4822
- Regex: '^"drape_frontend/drape_frontend_tests/'
Priority: 4830
- Regex: '^"routing/routing_tests/'
Priority: 4840
- Regex: '^"routing/routing_integration_tests/'
Priority: 4841
- Regex: '^"routing/routing_quality/routing_quality_tests/'
Priority: 4842
- Regex: '^"routing/routing_consistency_tests/'
Priority: 4843
- Regex: '^"routing/routing_benchmarks/'
Priority: 4844
- Regex: '^"kml/kml_tests'
Priority: 4850
- Regex: '^"tracking/tracking_tests/'
Priority: 4860
- Regex: '^"partners_api/partners_api_tests/'
Priority: 4870
- Regex: '^"traffic/traffic_tests/'
Priority: 4880
- Regex: '^"storage/storage_tests/'
Priority: 4890
- Regex: '^"storage/storage_integration_tests/'
Priority: 4891
- Regex: '^"editor/editor_tests/'
Priority: 4900
- Regex: '^"editor/osm_auth_tests/'
Priority: 4910
- Regex: '^"drape/drape_tests/'
Priority: 4920
- Regex: '^"transit/transit_tests'
Priority: 4930
- Regex: '^"routing_common/routing_common_tests/'
Priority: 4940
- Regex: '^"indexer/indexer_tests/'
Priority: 4950
- Regex: '^"platform/platform_tests/'
Priority: 4960
- Regex: '^"coding/coding_tests/'
Priority: 4970
- Regex: '^"geometry/geometry_tests/'
Priority: 4980
- Regex: '^"base/base_tests/'
Priority: 4990
- Regex: '^"testing/'
Priority: 5000
# Binaries (tools) ---------------------------------------------------------------------------------
- Regex: '^"openlr/openlr_match_quality/openlr_assessment_tool/'
Priority: 18908
- Regex: '^"search/search_quality/assessment_tool/'
Priority: 18909
- Regex: '^"qt/'
Priority: 18910
- Regex: '^"track_analyzing/track_analyzer/'
Priority: 19000
- Regex: '^"feature_list/'
Priority: 19100
- Regex: '^"generator/booking_quality_check/'
Priority: 19206
- Regex: '^"generator/complex_generator/'
Priority: 19207
- Regex: '^"generator/feature_segments_checker/'
Priority: 19208
- Regex: '^"generator/srtm_coverage_checker/'
Priority: 19209
- Regex: '^"generator/generator_tool/'
Priority: 19210
- Regex: '^"map/extrapolation_benchmark/'
Priority: 19309
- Regex: '^"map/benchmark_tool/'
Priority: 19310
- Regex: '^"openlr/openlr_stat/'
Priority: 19400
- Regex: '^"search/search_quality/booking_dataset_generator/'
Priority: 19707
- Regex: '^"search/search_quality/features_collector_tool/'
Priority: 19708
- Regex: '^"search/search_quality/samples_generation_tool/'
Priority: 19709
- Regex: '^"search/search_quality/search_quality_tool/'
Priority: 19710
- Regex: '^"track_generator/'
Priority: 19800
- Regex: '^"routing/routing_quality/routing_quality_tool/'
Priority: 19909
- Regex: '^"routing/routes_builder/routes_builder_tool/'
Priority: 19910
- Regex: '^"skin_generator/'
Priority: 20000
# Libraries ----------------------------------------------------------------------------------------
- Regex: '^"poly_borders/'
Priority: 46700
- Regex: '^"track_analyzing/'
Priority: 46800
- Regex: '^"generator/mwm_diff/pymwm_diff/'
Priority: 46907
- Regex: '^"generator/mwm_diff/'
Priority: 46908
- Regex: '^"generator/generator_tests_support/'
Priority: 46909
- Regex: '^"generator/'
Priority: 46910
- Regex: '^"map/'
Priority: 47000
- Regex: '^"ge0/'
Priority: 47050
- Regex: '^"openlr/'
Priority: 47100
- Regex: '^"descriptions/'
Priority: 47300
- Regex: '^"search/search_quality/'
Priority: 47407
- Regex: '^"search/search_tests_support/'
Priority: 47408
- Regex: '^"search/pysearch/'
Priority: 47409
- Regex: '^"search/'
Priority: 47410
- Regex: '^"ugc/'
Priority: 47500
- Regex: '^"track_generator/pytrack_generator/'
Priority: 47600
- Regex: '^"routing/routing_quality/api/'
Priority: 47707
- Regex: '^"routing/routing_quality/'
Priority: 47708
- Regex: '^"routing/routes_builder/'
Priority: 47709
- Regex: '^"routing/'
Priority: 47710
- Regex: '^"tracking/pytracking/'
Priority: 47809
- Regex: '^"tracking/'
Priority: 47810
- Regex: '^"partners_api/'
Priority: 47900
- Regex: '^"traffic/pytraffic/'
Priority: 48109
- Regex: '^"traffic/'
Priority: 48110
- Regex: '^"storage/'
Priority: 48200
- Regex: '^"editor/editor_tests_support/'
Priority: 48309
- Regex: '^"editor/'
Priority: 48310
- Regex: '^"drape_frontend/'
Priority: 48500
- Regex: '^"shaders/'
Priority: 48600
- Regex: '^"drape/'
Priority: 48700
- Regex: '^"qt_tstfrm/'
Priority: 48800
- Regex: '^"kml/pykmlib/'
Priority: 48909
- Regex: '^"kml/'
Priority: 48910
- Regex: '^"transit/'
Priority: 49000
- Regex: '^"routing_common/'
Priority: 49100
- Regex: '^"indexer/'
Priority: 49200
- Regex: '^"platform/platform_tests_support/'
Priority: 49409
- Regex: '^"platform/'
Priority: 49410
- Regex: '^"coding/'
Priority: 49500
- Regex: '^"geometry/'
Priority: 49600
- Regex: '^"base/'
Priority: 49700
- Regex: '^"pyhelpers/'
Priority: 49800
- Regex: '^"app/organicmaps/util/'
Priority: 49840
- Regex: '^"app/organicmaps/maps/'
Priority: 49850
- Regex: '^"app/organicmaps/platform/'
Priority: 49860
- Regex: '^"app/organicmaps/opengl/'
Priority: 49870
- Regex: '^"app/organicmaps/vulkan/'
Priority: 49880
- Regex: '^"app/organicmaps/core/'
Priority: 49890
- Regex: '^"private\.h"$'
Priority: 49900
- Regex: '^"std/'
Priority: 50000
- Regex: '^"defines\.hpp"$'
Priority: 50100
- Regex: '^<Qt.*>$'
Priority: 50140
- Regex: '^<jni.h>$'
Priority: 50180
- Regex: '^<.*>$'
Priority: 50200
- Regex: '^"(3party/boost|boost)/'
Priority: 50300
- Regex: '^<boost'
Priority: 50300
- Regex: '^"3party/.*'
Priority: 50400
- Regex: '^"build_version\.hpp"$'
Priority: 99999
---
Language: Java
BreakAfterJavaFieldAnnotations: true
---
Language: ObjC
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: true
BinPackParameters: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: AfterColon
BreakBeforeTernaryOperators: true
BreakStringLiterals: true
BraceWrapping:
AfterCaseLabel: true
AfterClass: true
AfterControlStatement: Always
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
BeforeLambdaBody: true
BeforeWhile: true
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
BreakBeforeBraces: Custom
BreakConstructorInitializers: BeforeComma
BreakInheritanceList: BeforeComma
ColumnLimit: 120
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ConstructorInitializerIndentWidth: 2
ContinuationIndentWidth: 2
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^<.*\.h>'
Priority: 1
- Regex: '^<.*'
Priority: 2
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseLabels: true
IndentPPDirectives: None
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Never
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Right
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
IndentCaseLabels: false
IndentExternBlock: NoIndent
InsertNewlineAtEOF: true
PackConstructorInitializers: Never
PointerAlignment: Middle
QualifierAlignment: Right
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
TabWidth: 8
Standard: Latest
TabWidth: 2
UseTab: Never

View File

@@ -49,13 +49,13 @@
/docs/STYLES.md
/tools/kothic/ @organicmaps/styles
# DevOps.
/.github/workflows @organicmaps/devops
/.forgejo/workflows @organicmaps/devops
/android/*gradle* @organicmaps/devops
/docs/RELEASE_MANAGEMENT.md @organicmaps/devops
/xcode/fastlane/ @organicmaps/devops
# Growth.
README.md @organicmaps/growth
/.github/FUNDING.yml @organicmaps/growth
/.forgejo/FUNDING.yml @organicmaps/growth
/android/app/src/fdroid/play/ @organicmaps/growth
/android/app/src/google/play/ @organicmaps/growth
/iphone/metadata/ @organicmaps/growth

1
.forgejo/FUNDING.yml Normal file
View File

@@ -0,0 +1 @@
open_collective: comaps

View File

@@ -0,0 +1,70 @@
name: 🐞 Bug Report
description: Report a problem you've encountered
title: "bug: "
labels:
- bug
body:
- type: markdown
attributes:
value: |
⚠ **Have you searched for similar, already existing issues?**
Please do that before submitting a new one.
- type: textarea
id: issue-description
attributes:
label: Describe the issue
description: Please write a clear and concise description of the issue here.
placeholder: Describe what is not working as expected...
validations:
required: true
- type: textarea
id: steps-to-reproduce
attributes:
label: Steps to reproduce
description: Describe the steps needed to reproduce the issue.
placeholder: |
1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See the error
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behaviour
description: A clear and concise description of what you expected to happen.
placeholder: I expected that...
validations:
required: false
- type: textarea
id: screenshots
attributes:
label: Screenshots
description: If applicable, add screenshots or screen recordings to help explain your problem.
validations:
required: false
- type: textarea
id: system-info
attributes:
label: System information
description: Provide information about the system where the issue occurred.
placeholder: |
- OS: e.g. Ubuntu 22, iOS 12
- CoMaps version: e.g. 1.2.3
- Device model: e.g. iPhone 6, Samsung S22
validations:
required: true
- type: textarea
id: additional-context
attributes:
label: Additional context
description: Add any other context or comments that may be useful.
validations:
required: false

View File

@@ -0,0 +1,8 @@
blank_issues_enabled: true
contact_links:
- name: Translations
url: https://codeberg.org/comaps/comaps/src/branch/main/docs/TRANSLATIONS.md
about: Translate CoMaps into your language
- name: News
url: https://comaps.app/news/
about: Check the latest project news

View File

@@ -0,0 +1,47 @@
name: "💡 Feature Request"
description: "Suggest an idea or improvement for CoMaps"
title: "feat: "
labels:
- "enhancement"
body:
- type: markdown
attributes:
value: |
⚠ **Have you searched for similar, already existing issues?**
Please make sure your idea hasn't been suggested before.
- type: textarea
id: related-problem
attributes:
label: "What problem would this feature help solve?"
description: "Share how this feature could make the experience better, smoother, or more enjoyable."
placeholder: "It would be great if..."
validations:
required: true
- type: textarea
id: ideal-solution
attributes:
label: "Describe the ideal solution"
description: "What would you like to see in CoMaps?"
placeholder: "I would like CoMaps to..."
validations:
required: false
- type: textarea
id: alternatives
attributes:
label: "Describe alternatives you have considered"
description: |
How do you solve this issue now with CoMaps or other apps?
You can also share screenshots or examples from other apps.
validations:
required: false
- type: textarea
id: additional-context
attributes:
label: "Additional context"
description: "Any other context, comments, or screenshots to support your request."
validations:
required: false

View File

@@ -3,11 +3,11 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- master
- main
paths-ignore:
- .gitignore
- .github/**
- '!.github/workflows/android-beta.yaml' # Run check on self change
- .forgejo/**
- '!.forgejo/workflows/android-beta.yaml' # Run check on self change
- '**/*_tests/**'
- '**/CMakeLists.txt'
- CONTRIBUTORS

View File

@@ -0,0 +1,121 @@
name: Android Check
on:
workflow_dispatch: # Manual trigger
push:
branches:
- main
pull_request:
paths-ignore:
- .gitignore
- .forgejo/**
- '!.forgejo/workflows/android-check.yaml' # Run check on self change
- '**/*_tests/**'
- CONTRIBUTORS
- LICENSE
- NOTICE
- README.md
- android/app/src/fdroid/**
- android/app/src/google/**
- iphone/**
- data/strings/**
- docs/**
- generator/**
- packaging/**
- platform/*apple*
- platform/*_ios*
- platform/*_linux*
- platform/*_mac*
- platform/*qt*
- platform/*_win*
- pyhelpers/**
- qt*/**
- skin_generator/**
- tools/**
- track_generator/**
- xcode/**
env:
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
jobs:
lint:
name: Android Lint
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Parallel submodules checkout
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Lint
shell: bash
working-directory: android
run: ./gradlew -Pandroidauto=true lint
android-check:
name: Build Android Debug
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
flavor: [WebDebug, FdroidDebug]
include:
- flavor: WebDebug
arch: arm64
- flavor: FdroidDebug
arch: arm32
# Cancels previous jobs if the same branch or PR was updated again.
concurrency:
group: ${{ github.workflow }}-${{ matrix.flavor }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install build tools and dependencies
shell: bash
run: |
sudo apt-get update -y
sudo apt-get install -y ninja-build
- name: Checkout sources
uses: actions/checkout@v4
with:
fetch-depth: 200 # enough to get all commits for the current day
- name: Parallel submodules checkout
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Configure ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ${{ github.workflow }}-${{ matrix.flavor }}
- name: Compile ${{ matrix.flavor }}
shell: bash
working-directory: android
env:
CMAKE_C_COMPILER_LAUNCHER: ccache
CMAKE_CXX_COMPILER_LAUNCHER: ccache
run: |
cmake --version
ninja --version
./gradlew -P${{ matrix.arch }} assemble${{ matrix.flavor }}
- name: Upload ${{ matrix.flavor }} apk
uses: actions/upload-artifact@v4
with:
name: android-${{ matrix.flavor }}
path: android/app/build/outputs/apk/**/OrganicMaps-*.apk
if-no-files-found: error

View File

@@ -12,19 +12,12 @@ jobs:
environment: production
steps:
- name: Checkout sources
# TODO: use shallow (and sparse?) checkout
uses: actions/checkout@v4
- name: Parallel submodules checkout
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Checkout screenshots
uses: actions/checkout@v4
with:
repository: ${{ secrets.SCREENSHOTS_REPO }}
ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }}
ref: master
path: screenshots
# - name: Parallel submodules checkout
# shell: bash
# run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Restore release keys
shell: bash
@@ -37,6 +30,6 @@ jobs:
- name: Upload
shell: bash
run: ./gradlew prepareGoogleReleaseListing publishGoogleReleaseListing
run: ./gradlew publishGoogleReleaseListing
working-directory: android
timeout-minutes: 5

View File

@@ -97,7 +97,7 @@ jobs:
with:
repository: ${{ secrets.SCREENSHOTS_REPO }}
ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }}
ref: master
ref: main
path: screenshots
- name: Restore release keys
@@ -156,7 +156,7 @@ jobs:
cat ${{ env.RELEASE_NOTES }}
echo ""
echo "See [a detailed announce](https://organicmaps.app/news/) on our website when app updates are published in all stores."
echo "You can get automatic app updates from GitHub [using Obtainium](https://github.com/organicmaps/organicmaps/wiki/Installing-Organic-Maps-from-GitHub-using-Obtainium)."
echo "You can get automatic app updates from Codeberg [using Obtainium](https://codeberg.org/comaps/comaps/wiki/Installing-Organic-Maps-from-GitHub-using-Obtainium)."
echo ""
echo "sha256sum:"
echo -e '\n```'
@@ -164,7 +164,7 @@ jobs:
echo -e '\n```'
} > ${{ runner.temp }}/release-notes.txt
- name: Upload universal APK to GitHub
- name: Upload universal APK to Codeberg
uses: softprops/action-gh-release@v1
if: ${{ matrix.flavor == 'web' }}
with:

View File

@@ -4,7 +4,7 @@ on:
pull_request:
paths:
- packaging/app.organicmaps.desktop.metainfo.xml
- .github/workflows/appstream-check.yaml # Run check on self change
- .forgejo/workflows/appstream-check.yaml # Run check on self change
jobs:
validate-appstream:
@@ -25,11 +25,7 @@ jobs:
sudo apt install -y \
flatpak
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
sudo flatpak install -y org.freedesktop.appstream-glib org.flatpak.Builder
- name: Validate appstream data
shell: bash
run: flatpak run org.freedesktop.appstream-glib validate --nonet packaging/app.organicmaps.desktop.metainfo.xml
sudo flatpak install -y org.flatpak.Builder
- name: Lint appstream data with flatpak Builder
shell: bash

View File

@@ -0,0 +1,8 @@
name: dco
on: [pull_request]
jobs:
check:
runs-on: codeberg-tiny
steps:
- uses: https://github.com/KineticCafe/actions-dco@v1

View File

@@ -4,7 +4,7 @@ on:
pull_request:
paths:
- qt/res/app.organicmaps.desktop.desktop
- .github/workflows/desktop-file-check.yaml # Run check on self change
- .forgejo/workflows/desktop-file-check.yaml # Run check on self change
jobs:
validate-desktop-file:

View File

@@ -3,11 +3,11 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- master
- main
paths-ignore:
- .gitignore
- .github/**
- '!.github/workflows/ios-beta.yaml' # Run check on self change
- .forgejo/**
- '!.forgejo/workflows/ios-beta.yaml' # Run check on self change
- '**/*_tests/**'
- '**/CMakeLists.txt'
- CONTRIBUTORS

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger
pull_request:
paths:
- .github/workflows/ios-check-metadata.yaml # Run check on self change
- .forgejo/workflows/ios-check-metadata.yaml # Run check on self change
- iphone/metadata/**
- tools/python/check_store_metadata.py

View File

@@ -0,0 +1,106 @@
name: iOS Check
on:
workflow_dispatch: # Manual trigger
push:
branches:
- main
pull_request:
paths-ignore:
- .gitignore
- .forgejo/**
- '!.forgejo/workflows/ios-check.yaml' # Run check on self change
- '**/*_tests/**'
- '**/CMakeLists.txt'
- CONTRIBUTORS
- LICENSE
- NOTICE
- README.md
- android/**
- data/strings/**
- docs/**
- generator/**
- iphone/metadata/**
- packaging/**
- platform/*_android*
- platform/*_linux*
- platform/*_mac*
- platform/*qt*
- platform/*_win*
- pyhelpers/**
- qt*/**
- skin_generator/**
- tools/**
- track_generator/**
jobs:
ios-check:
name: Build iOS
runs-on: macos-15
env:
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
LANGUAGE: en_US.UTF-8
LC_ALL: en_US.UTF-8
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results
strategy:
fail-fast: false
matrix:
buildType: [Debug, Release]
# Cancels previous jobs if the same branch or PR was updated again.
concurrency:
group: ${{ github.workflow }}-${{ matrix.buildType }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Parallel submodules checkout
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Configure XCode cache
uses: irgaly/xcode-cache@v1
with:
key: xcode-cache-deriveddata-${{ github.workflow }}-${{ matrix.buildType }}-${{ github.sha }}
restore-keys: xcode-cache-deriveddata-${{ github.workflow }}-${{ matrix.buildType }}
- name: Build and Run Tests (Debug)
if: matrix.buildType == 'Debug'
shell: bash
run: |
xcodebuild test \
-workspace xcode/CoMaps.xcworkspace \
-scheme CoMaps \
-configuration Debug \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
-quiet \
-resultBundlePath ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO
- name: Upload Test Results On Failure (Debug)
if: ${{ matrix.buildType == 'Debug' && failure() }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.TEST_RESULTS_BUNDLE_NAME }}-${{ github.run_number }}.xcresult
path: ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult
if-no-files-found: error
- name: Build (Release)
if: matrix.buildType == 'Release'
shell: bash
run: |
xcodebuild build \
-workspace xcode/CoMaps.xcworkspace \
-scheme CoMaps \
-configuration Release \
-destination 'generic/platform=iOS' \
-quiet \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO

View File

@@ -29,7 +29,7 @@ jobs:
with:
repository: ${{ secrets.SCREENSHOTS_REPO }}
ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }}
ref: master
ref: main
path: screenshots
- name: Checkout keywords
@@ -37,7 +37,7 @@ jobs:
with:
repository: ${{ secrets.KEYWORDS_REPO }}
ssh-key: ${{ secrets.KEYWORDS_SSH_KEY }}
ref: master
ref: main
path: keywords
- name: Update metadata

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- master
- main
pull_request:
paths-ignore:
- .gitignore
@@ -90,7 +90,7 @@ jobs:
# -g1 should slightly reduce build time.
run: |
cmake . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CXX_FLAGS=-g1 -DUNITY_DISABLE=ON
-DCMAKE_CXX_FLAGS=-g1 -DCMAKE_UNITY_BUILD=OFF
- name: Compile
shell: bash

View File

@@ -3,12 +3,12 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- master
- main
pull_request:
paths-ignore:
- .gitignore
- .github/**
- '!.github/workflows/macos-check.yaml' # Run check on self change
- .forgejo/**
- '!.forgejo/workflows/macos-check.yaml' # Run check on self change
- CONTRIBUTORS
- LICENSE
- NOTICE

4
.github/FUNDING.yml vendored
View File

@@ -1,4 +0,0 @@
github: organicmaps
liberapay: OrganicMaps
open_collective: organicmaps
custom: ["https://organicmaps.app/donate/", "https://donate.organicmaps.app/"]

View File

@@ -1,38 +0,0 @@
---
name: Bug Report
about: Describe your issue in detail to help us improve Organic Maps
title: ''
labels: ''
assignees: ''
---
⚠ Have you searched for similar, already existing issues?
**Describe the issue**
Please write a clear and concise description of the issue here.
**Steps to reproduce**
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behaviour**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots or screen recordings to help explain your problem.
**System information:**
- Operating system and its version: [iOS 12, Android 10, Ubuntu 22, MacOS Big Sur, etc.]
- Organic Maps version: [you can find it by tapping the button with the green Organic Maps logo]
- Device Model: [e.g. iPhone 6, Samsung S22]
**Additional context**
Please add any other context or comments here that may be useful.

View File

@@ -1,11 +0,0 @@
blank_issues_enabled: true
contact_links:
- name: Discussions
url: https://github.com/organicmaps/organicmaps/discussions
about: Discuss the usage of Organic Maps, ask questions, or talk about ideas that aren't yet actionable.
- name: Translations
url: https://github.com/organicmaps/organicmaps/blob/master/docs/TRANSLATIONS.md
about: Translate Organic Maps into your language
- name: News
url: https://organicmaps.app/news/
about: Check the latest project news

View File

@@ -1,27 +0,0 @@
---
name: Feature Request
about: Suggest an idea for Organic Maps
title: ''
labels: []
assignees: ''
---
⚠ Have you searched for similar, already existing issues?
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. For example:
I'm always frustrated when [...]
**Describe the ideal solution**
A clear and concise description of what you want to see in Organic Maps.
**Describe alternatives you have considered**
- How do you solve this issue now with Organic Maps or other apps?
- Attach any examples, screenshots, or screen recordings from other apps that help us to better understand the idea.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -3,36 +3,7 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- master
pull_request:
paths-ignore:
- .gitignore
- .github/**
- '!.github/workflows/android-check.yaml' # Run check on self change
- '**/*_tests/**'
- CONTRIBUTORS
- LICENSE
- NOTICE
- README.md
- android/app/src/fdroid/**
- android/app/src/google/**
- iphone/**
- data/strings/**
- docs/**
- generator/**
- packaging/**
- platform/*apple*
- platform/*_ios*
- platform/*_linux*
- platform/*_mac*
- platform/*qt*
- platform/*_win*
- pyhelpers/**
- qt*/**
- skin_generator/**
- tools/**
- track_generator/**
- xcode/**
- main
env:
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
@@ -51,9 +22,9 @@ jobs:
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Configure repository
- name: Init boost, generate textures
shell: bash
run: ./configure.sh
run: ./configure.sh --skip-map-download
- name: Lint
shell: bash
@@ -61,14 +32,14 @@ jobs:
run: ./gradlew -Pandroidauto=true lint
android-check:
name: Build Android Debug
name: Build Android apps
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
flavor: [WebDebug, FdroidDebug]
flavor: [WebBeta, FdroidDebug]
include:
- flavor: WebDebug
- flavor: WebBeta
arch: arm64
- flavor: FdroidDebug
arch: arm32
@@ -82,7 +53,19 @@ jobs:
shell: bash
run: |
sudo apt-get update -y
sudo apt-get install -y ninja-build
sudo apt-get install -y ninja-build \
qt6-base-dev \
qt6-declarative-dev \
qt6-positioning-dev \
libqt6svg6-dev \
optipng \
libfreetype-dev \
libharfbuzz-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
zlib1g-dev
- name: Checkout sources
uses: actions/checkout@v4
@@ -93,9 +76,9 @@ jobs:
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Configure repository
- name: Init boost, generate textures
shell: bash
run: ./configure.sh
run: ./configure.sh --skip-map-download
- name: Configure ccache
uses: hendrikmuhs/ccache-action@v1.2
@@ -117,5 +100,5 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: android-${{ matrix.flavor }}
path: android/app/build/outputs/apk/**/OrganicMaps-*.apk
path: android/app/build/outputs/apk/**/CoMaps-*.apk
if-no-files-found: error

View File

@@ -3,34 +3,7 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- master
pull_request:
paths-ignore:
- .gitignore
- .github/**
- '!.github/workflows/ios-check.yaml' # Run check on self change
- '**/*_tests/**'
- '**/CMakeLists.txt'
- CONTRIBUTORS
- LICENSE
- NOTICE
- README.md
- android/**
- data/strings/**
- docs/**
- generator/**
- iphone/metadata/**
- packaging/**
- platform/*_android*
- platform/*_linux*
- platform/*_mac*
- platform/*qt*
- platform/*_win*
- pyhelpers/**
- qt*/**
- skin_generator/**
- tools/**
- track_generator/**
- main
jobs:
ios-check:
@@ -41,7 +14,8 @@ jobs:
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
LANGUAGE: en_US.UTF-8
LC_ALL: en_US.UTF-8
TEST_RESULTS_BUNDLE_NAME: OMaps-Test-Results
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results
SIMULATOR_DEVICE: 'iPhone 16 Pro Max'
strategy:
fail-fast: false
matrix:
@@ -52,6 +26,10 @@ jobs:
cancel-in-progress: true
steps:
- name: Install dependencies
run: |
brew install qt \
optipng
- name: Checkout sources
uses: actions/checkout@v4
@@ -59,7 +37,7 @@ jobs:
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
- name: Configure repository
- name: Init boost, download World map, generate textures
shell: bash
run: ./configure.sh
@@ -73,12 +51,15 @@ jobs:
if: matrix.buildType == 'Debug'
shell: bash
run: |
# Start sim before the build to make sure it's booted when tests start.
xcrun simctl boot "${{ env.SIMULATOR_DEVICE }}" || true
xcrun simctl bootstatus "${{ env.SIMULATOR_DEVICE }}" -b
xcodebuild test \
-workspace xcode/omim.xcworkspace \
-scheme OMaps \
-workspace xcode/CoMaps.xcworkspace \
-scheme CoMaps \
-configuration Debug \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
-destination "platform=iOS Simulator,name=${{ env.SIMULATOR_DEVICE }},OS=latest" \
-quiet \
-resultBundlePath ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult \
CODE_SIGNING_REQUIRED=NO \
@@ -97,8 +78,8 @@ jobs:
shell: bash
run: |
xcodebuild build \
-workspace xcode/omim.xcworkspace \
-scheme OMaps \
-workspace xcode/CoMaps.xcworkspace \
-scheme CoMaps \
-configuration Release \
-destination 'generic/platform=iOS' \
-quiet \

18
.gitignore vendored
View File

@@ -16,11 +16,16 @@ screenlog.0
data/styles/*/*/out/*
data/resources-*_design/*
# symbols png/sdf are now generated at build
data/resources-*_*/symbols.png
data/resources-*_*/symbols.sdf
data/drules_proto_default_design.bin
data/colors_design.txt
data/patterns_design.txt
data/bookmarks
data/edits.xml
data/World.mwm
data/WorldCoasts.mwm
# Compiled Python
*.pyc
@@ -57,7 +62,7 @@ iphone/*/build/*
tools/emacsmode/build
**/DerivedData/*
**/xcshareddata/*
!iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme
!iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/CoMaps.xcscheme
**/xcuserdata
**/xcschemes
iphone/**/*.moved-aside
@@ -134,10 +139,7 @@ private.h
android/release.keystore
android/secure.properties
android/libnotify.properties
android/google-services.json
android/google-play.json
android/firebase-app-distribution.json
android/firebase-test-lab.json
android/huawei-appgallery.json
android/res/xml/network_security_config.xml
./server/
@@ -173,6 +175,7 @@ tools/python/*/venv/
# Configs
tools/python/maps_generator/var/etc/map_generator.ini
tools/python/routing/etc/*.ini
tools/unix/maps/settings.sh
# Helpers
/node_modules/
@@ -183,9 +186,4 @@ tools/python/routing/etc/*.ini
# VS Code
.vscode
# AppStore metadata
screenshots/
android/src/google/play/listings/
keywords/
iphone/metadata/**/keywords.txt
.cache

10
.gitmodules vendored
View File

@@ -1,12 +1,12 @@
[submodule "tools/osmctools"]
path = tools/osmctools
url = https://git.omaps.dev/organicmaps/osmctools.git
url = https://github.com/organicmaps/osmctools.git
[submodule "tools/kothic"]
path = tools/kothic
url = https://git.omaps.dev/organicmaps/kothic.git
url = https://codeberg.org/comaps/kothic.git
[submodule "3party/protobuf/protobuf"]
path = 3party/protobuf/protobuf
url = https://git.omaps.dev/organicmaps/protobuf.git
url = https://codeberg.org/comaps/protobuf.git
[submodule "3party/Vulkan-Headers"]
path = 3party/Vulkan-Headers
url = https://github.com/KhronosGroup/Vulkan-Headers.git
@@ -17,7 +17,7 @@
ignore = dirty
[submodule "3party/just_gtfs"]
path = 3party/just_gtfs
url = https://git.omaps.dev/organicmaps/just_gtfs.git
url = https://github.com/organicmaps/just_gtfs.git
branch = for-usage-as-submodule
[submodule "3party/expat"]
path = 3party/expat
@@ -31,7 +31,7 @@
url = https://github.com/unicode-org/icu.git
[submodule "3party/freetype/freetype"]
path = 3party/freetype/freetype
url = https://git.omaps.dev/organicmaps/freetype.git
url = https://gitlab.freedesktop.org/freetype/freetype.git
[submodule "3party/googletest"]
path = 3party/googletest
url = https://github.com/google/googletest.git

View File

@@ -31,9 +31,10 @@ if (NOT WITH_SYSTEM_PROVIDED_3PARTY)
set(JANSSON_WITHOUT_TESTS ON)
add_subdirectory(jansson/jansson/)
target_include_directories(jansson INTERFACE "${PROJECT_BINARY_DIR}/3party/jansson/jansson/include")
add_library(jansson::jansson ALIAS jansson)
# Add gflags library.
set(GFLAGS_BUILD_TESTING OFF)
set(GFLAGS_BUILD_PACKAGING OFF)
add_subdirectory(gflags)
target_compile_options(gflags_nothreads_static PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wno-subobject-linkage>)

View File

@@ -11,11 +11,28 @@ set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
# Disable build-id generation to make builds reproducible.
if (NOT APPLE)
add_link_options("LINKER:--build-id=none")
endif()
# Fixes warning ld: warning: ignoring duplicate libraries on Mac and Windows.
if (POLICY CMP0156)
cmake_policy(SET CMP0156 NEW)
endif()
set(OMIM_ROOT ${CMAKE_SOURCE_DIR})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${OMIM_ROOT}/cmake")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
include(OmimPlatform)
include(OmimOptions)
include(OmimConfig)
include(OmimHelpers)
include(OmimTesting)
if (APPLE AND NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL Android))
# OBJC/OBJCXX are needed to skip m/mm files in Unity builds.
# https://gitlab.kitware.com/cmake/cmake/-/issues/21963
@@ -33,24 +50,14 @@ endif()
message(STATUS "Using compiler ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
option(COVERAGE_REPORT "Configure for coverage report" OFF)
option(UNITY_DISABLE "Disable unity build" OFF)
if (NOT UNITY_DISABLE AND NOT DEFINED ENV{UNITY_DISABLE})
set(CMAKE_UNITY_BUILD ON)
if (DEFINED ENV{UNITY_BUILD_BATCH_SIZE})
set(CMAKE_UNITY_BUILD_BATCH_SIZE $ENV{UNITY_BUILD_BATCH_SIZE})
else()
set(CMAKE_UNITY_BUILD_BATCH_SIZE 50)
endif()
message(STATUS "Using Unity Build with batch ${CMAKE_UNITY_BUILD_BATCH_SIZE}, export UNITY_DISABLE=1 or use -DUNITY_DISABLE=ON to disable it.")
if (CMAKE_UNITY_BUILD)
message(STATUS "Using Unity Build with batch ${CMAKE_UNITY_BUILD_BATCH_SIZE}, use -DCMAKE_UNITY_BUILD=OFF to disable it.")
endif()
option(CCACHE_DISABLE "Disable ccache" OFF)
if (NOT CCACHE_DISABLE AND NOT DEFINED ENV{CCACHE_DISABLE})
if (USE_CCACHE)
find_program(CCACHE_PROGRAM ccache HINTS /usr/local/bin/)
if (CCACHE_PROGRAM)
message(STATUS "Using ccache, export CCACHE_DISABLE=1 or use -DCCACHE_DISABLE=ON to disable it.")
message(STATUS "Using ccache, use -DUSE_CCACHE=OFF to disable it.")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_PROGRAM}")
set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
@@ -58,44 +65,13 @@ if (NOT CCACHE_DISABLE AND NOT DEFINED ENV{CCACHE_DISABLE})
endif()
endif()
option(COLORS_DISABLE "Disable colored compiler output" OFF)
if (NOT DEFINED ENV{COLORS_DISABLE} AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
message(STATUS "export COLORS_DISABLE=1 or use -DCOLORS_DISABLE=ON to disable colored compiler output.")
add_compile_options($<$<CXX_COMPILER_ID:GNU>:-fdiagnostics-color=always> $<$<CXX_COMPILER_ID:Clang,AppleClang>:-fcolor-diagnostics>)
add_link_options($<$<CXX_COMPILER_ID:GNU>:-fdiagnostics-color=always> $<$<CXX_COMPILER_ID:Clang,AppleClang>:-fcolor-diagnostics>)
endif()
option(WITH_SYSTEM_PROVIDED_3PARTY "Enable compilation with system provided dependencies" OFF)
set(OMIM_ROOT ${CMAKE_SOURCE_DIR})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${OMIM_ROOT}/cmake")
include(OmimHelpers)
include(OmimTesting)
set(PLATFORM_DESKTOP TRUE)
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(PLATFORM_LINUX TRUE)
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(PLATFORM_MAC TRUE)
elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(PLATFORM_WIN TRUE)
elseif (CMAKE_SYSTEM_NAME STREQUAL "Android")
set(PLATFORM_ANDROID TRUE)
set(PLATFORM_DESKTOP FALSE)
elseif (CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(PLATFORM_IPHONE TRUE)
set(PLATFORM_DESKTOP FALSE)
else()
message(FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}")
endif()
if(${PLATFORM_MAC})
set(XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
# Metal language support
list(APPEND CMAKE_MODULE_PATH ${OMIM_ROOT}/3party/CMake-MetalShaderSupport/cmake)
include(CheckLanguage)
include(CMakeMetalInformation)
include(MetalShaderSupport)
check_language(Metal)
if(CMAKE_Metal_COMPILER)
@@ -103,23 +79,6 @@ if(${PLATFORM_MAC})
endif()
endif()
# Sanitizer
if (PLATFORM_DESKTOP)
# https://clang.llvm.org/docs/UsersManual.html#controlling-code-generation
set(BUILD_WITH_SANITIZER None CACHE STRING "Set to 'address' or others to enable sanitizer")
if (NOT ${BUILD_WITH_SANITIZER} MATCHES "None")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${BUILD_WITH_SANITIZER} -fno-omit-frame-pointer")
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fsanitize=${BUILD_WITH_SANITIZER} -fno-omit-frame-pointer")
message(STATUS "Enable sanitizer: ${BUILD_WITH_SANITIZER}")
endif()
endif()
# Set build type:
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif()
# Global compile options for all configurations.
if (MSVC)
add_compile_options(/utf-8)
@@ -151,103 +110,11 @@ else()
endif()
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
# End of setting build type
# Options
# Call `make package` after cmake to build design tool.
option(BUILD_DESIGNER "Build application as design tool" OFF)
if (BUILD_DESIGNER)
message(STATUS "Designer tool building is enabled")
add_definitions(-DBUILD_DESIGNER)
endif()
option(BUILD_STANDALONE "Build standalone application" OFF)
if (BUILD_STANDALONE)
message(STATUS "Standalone building is enabled")
add_definitions(-DBUILD_STANDALONE)
endif()
option(USE_ASAN "Enable Address Sanitizer" OFF)
option(USE_TSAN "Enable Thread Sanitizer" OFF)
option(USE_LIBFUZZER "Enable LibFuzzer" OFF)
option(PYBINDINGS "Create makefiles for building python bindings" OFF)
option(SKIP_QT_GUI "Skip building of Qt GUI" OFF)
option(USE_PCH "Use precompiled headers" OFF)
option(NJOBS "Number of parallel processes" OFF)
option(ENABLE_VULKAN_DIAGNOSTICS "Enable Vulkan diagnostics" OFF)
option(ENABLE_TRACE "Enable Tracing" OFF)
if (NJOBS)
message(STATUS "Number of parallel processes: ${NJOBS}")
set(CMAKE_JOB_POOLS custom=${NJOBS})
set(CMAKE_JOB_POOL_COMPILE custom)
set(CMAKE_JOB_POOL_LINK custom)
set(CMAKE_JOB_POOL_PRECOMPILE_HEADER custom)
endif()
# GCC 10.0 is required to support <charconv> header inclusion in base/string_utils.hpp
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
message(FATAL_ERROR "Minimum supported g++ version is 10.0, yours is ${CMAKE_CXX_COMPILER_VERSION}")
endif()
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(PCH_EXTENSION "pch")
endif()
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set(PCH_EXTENSION "gch")
endif()
if (PLATFORM_LINUX)
option(USE_PPROF "Enable Google Profiler" OFF)
endif()
if (USE_ASAN)
message(STATUS "Address Sanitizer is enabled")
endif()
if (USE_TSAN)
message(STATUS "Thread Sanitizer is enabled")
endif()
if (USE_ASAN AND USE_TSAN)
message(FATAL_ERROR "Can't use two different sanitizers together")
endif()
if (USE_LIBFUZZER)
message(STATUS "LibFuzzer is enabled")
endif()
if (USE_PPROF)
message(STATUS "Google Profiler is enabled")
add_definitions(-DUSE_PPROF)
endif()
if (USE_HEAPPROF)
message(STATUS "Heap Profiler is enabled")
endif()
if (ENABLE_VULKAN_DIAGNOSTICS)
message(WARNING "Vulkan diagnostics are enabled. Be aware of performance impact!")
add_definitions(-DENABLE_VULKAN_DIAGNOSTICS)
endif()
if (ENABLE_TRACE)
message(STATUS "Tracing is enabled")
add_definitions(-DENABLE_TRACE)
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Set environment variables
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
if (PLATFORM_LINUX OR PLATFORM_ANDROID)
find_program(LLD_FOUND ld.lld)
if (LLD_FOUND)
message(STATUS "Using ld.ldd linker")
message(STATUS "Using ld.lld linker")
set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=lld")
else()
find_program(GOLD_FOUND ld.gold)
@@ -300,28 +167,6 @@ endif()
# To allow #include "base/file_name.hpp" in all sources.
include_directories(${CMAKE_HOME_DIRECTORY})
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (USE_ASAN)
add_compile_options(
"-fsanitize=address"
"-fno-omit-frame-pointer"
)
endif()
if (USE_TSAN)
add_compile_options(
"-fsanitize=thread"
"-fno-omit-frame-pointer"
)
endif()
if (USE_LIBFUZZER)
add_compile_options(
"-fsanitize=fuzzer"
)
endif()
if (USE_PCH)
message(STATUS "Precompiled headers are ON")
set(OMIM_PCH_TARGET_NAME "omim_pch")

View File

@@ -2,6 +2,17 @@ This file contains a list of people who have contributed to this project.
Its not neccesarily comprehensive.
Feel free to add yourself here along with your first contribution!
--------------------------------------------------------------------------------
CoMaps contributors:
(in alphabetic order)
--------------------------------------------------------------------------------
Bastian Greshake Tzovaras
clover sage
Harry Bond <me@hbond.xyz>
vikiawv
Yannik Bloscheck
--------------------------------------------------------------------------------
Organic Maps (formerly OMaps) contributors:
(in alphabetic order)

9
LEGAL
View File

@@ -1,9 +0,0 @@
Certain project resources, including but not limited to domain names, trademarks, hosting accounts, payment accounts, and others, are overseen and managed by Organic Maps OÜ. The governance of these digital assets is subject to policies established by Organic Maps OÜ, in compliance with applicable statutory laws.
Organic Maps OÜ is a legal entity established on 2021-05-01 under the laws of the Republic of Estonia and the European Union, with registration number 16225385. The primary purpose of the entity is to shield the project's members from personal liability and to ensure the legal protection of the project's assets. Official up-to-date information about the entity can be found in the Estonian Business Register:
https://ariregister.rik.ee/eng/company/16225385/Organic-Maps-O%C3%9C
Organic Maps OÜ does not require contributors to transfer copyright ownership and does not retain any copyright over the code contributed to the repository. See the NOTICE file and docs/DCO.md for additional information.
For any legal inquiries, feel free to contact legal@organicmaps.app.

3
NOTICE
View File

@@ -1,5 +1,6 @@
Copyright 2020 My.com B.V. (Mail.Ru Group)
Copyright 2024 Organic Maps Contributors
Copyright 2025 Organic Maps Contributors
Copyright 2025 CoMaps Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

286
README.md
View File

@@ -1,185 +1,163 @@
<div align="center">
<img src="qt/res/logo.png" height="100"/>
<!-- Navigation Bar -->
<p align="center">
<a href="https://codeberg.org/comaps#comaps">Project Intro</a> |
<a href="https://codeberg.org/comaps/Governance#comaps-project-governance-docs">Governance</a> |
<a href="https://codeberg.org/comaps/Governance/src/branch/main/FAQ.md">FAQ</a> |
<a href="#contributing">Contribute</a> |
<a href="https://www.comaps.app/donate">Donate</a> |
<a href="https://codeberg.org/comaps#keep-connected">Keep Connected</a>
</p>
<div align="center" >
<img src="docs/badges/logo.svg" width="150">
</div>
<h1 align="center"">Organic Maps</h1>
[Organic Maps](https://organicmaps.app) is a free Android & iOS offline maps app for travellers, tourists, drivers, hikers, and cyclists.
It uses crowd-sourced [OpenStreetMap](https://www.openstreetmap.org) data and is developed with love by the creators of **MapsWithMe** (later renamed to **Maps.Me**) and by our community.
No ads, no tracking, no data collection, no crapware. Your [donations](https://organicmaps.app/donate/) and positive reviews motivate and inspire us, thanks ❤️!
[<img src="docs/badges/apple-appstore.png" alt="App Store" width="160">](https://apps.apple.com/app/organic-maps/id1567437057)
[<img src="docs/badges/google-play.png" alt="Google Play" width="160">](https://play.google.com/store/apps/details?id=app.organicmaps)
[<img src="docs/badges/huawei-appgallery.png" alt="AppGallery" width="160">](https://appgallery.huawei.com/#/app/C104325611)
[<img src="docs/badges/obtainium.png" alt="Obtainium" width="160">](https://github.com/organicmaps/organicmaps/wiki/Installing-Organic-Maps-from-GitHub-using-Obtainium)
[<img src="docs/badges/fdroid.png" alt="F-Droid" width="160">](https://f-droid.org/en/packages/app.organicmaps/)
<div align="center">
<h1><a href="https://comaps.app/">CoMaps</a></h1>
<h2>Hike, Bike, Drive Offline - Easy Map Navigation with Privacy</h2>
</div>
<div align="center">
<p align="center">
<a href="https://codeberg.org/comaps/comaps/releases">
<img src="https://img.shields.io/github/license/comaps/comaps?style=for-the-badge&logo=opensourceinitiative&logoColor=white&color=588157" alt="License" style="width: 90%; max-width: 150px;"/>
</a>
<a href="https://github.com/comaps/comaps/actions/workflows/android-check.yaml">
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/android-check.yaml?label=Android%20Build&logo=android&logoColor=white&style=for-the-badge&color=588157" alt="Android Build Status" style="width: 90%; max-width: 170px;"/>
</a>
<a href="https://github.com/comaps/comaps/actions/workflows/ios-check.yaml">
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/ios-check.yaml?label=iOS%20Build&logo=apple&logoColor=white&style=for-the-badge&color=588157" alt="iOS Build Status" style="width: 90%; max-width: 145px;"/>
</a>
<a href="https://opencollective.com/comaps">
<img src="https://img.shields.io/opencollective/all/comaps?label=Open%20Collective%20Donors&logo=opencollective&logoColor=white&style=for-the-badge&color=588157" alt="Open Collective Donors" style="width: 90%; max-width: 191px;"/>
</a>
<a href="https://liberapay.com/CoMaps">
<img src="https://img.shields.io/liberapay/patrons/CoMaps.svg?label=Liberapay%20Patrons&logo=liberapay&logoColor=white&style=for-the-badge&color=588157" alt="Liberapay Patrons" style="width: 90%; max-width: 160px;"/>
</a>
</p>
</div>
<p float="left">
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.jpg" width="400" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/2.jpg" width="400" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/3.jpg" width="400" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/4.jpg" width="400" />
---
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org), built for transparency, privacy, and not-for-profit values. A fork of Organic Maps, originally based on Maps.ME.
**Available for:** Android, iOS, ARM macOS, and alpha Linux/macOS desktop builds (also usable on Linux phones).
<p align="center">
<a href="https://apps.apple.com/app/comaps/id6747180809">
<img src="docs/badges/apple-appstore.png" alt="App Store" width="160"/>
</a>
<a href="https://play.google.com/store/apps/details?id=app.comaps.google">
<img src="docs/badges/google-play.png" alt="Google Play" width="160"/>
</a>
<a href="https://f-droid.org/en/packages/app.comaps.fdroid/">
<img src="docs/badges/fdroid.png" alt="F-Droid" width="160"/>
</a>
<a href="https://codeberg.org/comaps/comaps/releases">
<img src="docs/badges/codeberg.png" alt="Codeberg" width="160"/>
</a>
</p>
## Features
Organic Maps is the ultimate companion app for travellers, tourists, hikers, and cyclists:
- Detailed offline maps with places that don't exist on other maps, thanks to [OpenStreetMap](https://openstreetmap.org)
- Cycling routes, hiking trails, and walking paths
- Contour lines, elevation profiles, peaks, and slopes
- Turn-by-turn walking, cycling, and car navigation with voice guidance
- Fast offline search on the map
- Bookmarks and tracks import and export in KML, KMZ & GPX formats
- Dark Mode to protect your eyes
- Countries and regions don't take a lot of space
- Free and open-source
## Why Organic?
Organic Maps is pure and organic, made with love:
- Respects your privacy
- Saves your battery
- No unexpected mobile data charges
Organic Maps is free from trackers and other bad stuff:
- No ads
- No tracking
- No data collection
- No phoning home
- No annoying registration
- No mandatory tutorials
- No noisy email spam
- No push notifications
- No crapware
- ~~No pesticides~~ Purely organic!
The Android application is verified by the <a href="https://reports.exodus-privacy.eu.org/en/reports/app.organicmaps/latest/">Exodus Privacy Project:
<img src="docs/privacy/exodus.png" width="400">
</a>
The iOS application is verified by <a href="https://ios.trackercontrol.org/analysis/app.organicmaps">TrackerControl for iOS:
<img src="docs/privacy/trackercontrol-ios.png" width="400">
</a>
<br/>
Organic Maps doesn't request excessive permissions to spy on you:
<p float="left">
<img src="docs/privacy/om.jpg" width="400">
<img src="docs/privacy/mm.jpg" width="400">
<!-- Screenshots -->
<p align="center">
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/2.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/3.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/4.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/5.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/6.png" width="180" />
</p>
At Organic Maps, we believe that privacy is a fundamental human right:
---
- Organic Maps is an indie community-driven open-source project
- We protect your privacy from Big Tech's prying eyes
- Stay safe no matter where you are
## ⚡️ Highlights
Reject surveillance - embrace your freedom.
- **Offline-first**: Navigate without a connection
- **Privacy-respecting**: No tracking, Ads or data collection
- **Lightweight**: Battery- and space-efficient
- **Simple**: Polished, user-focused interface
- **Community-built**: Free, open source, and collaborative
- **Transparent**: Open finances and governance
[**Give Organic Maps a try!**](#install)
---
## Who is paying for the development?
## 🚀 Main Features
The app is free for everyone, so we rely on donations. Please donate at [organicmaps.app/donate](https://organicmaps.app/donate) to support us!
- Downloadable detailed maps with places which are not available with Google Maps
Beloved institutional sponsors below have provided targeted grants to cover some infrastructure costs and fund development of new selected features:
- Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc
<table>
<tr>
<td>
<a href="https://nlnet.nl/"><img src="docs/sponsors/nlnet.svg" alt="The NLnet Foundation" width="200px"></a>
</td>
<td>
<a href="https://github.com/organicmaps/organicmaps/milestone/7">The Search & Fonts improvement project</a> has been <a href="https://nlnet.nl/project/OrganicMaps/">funded</a> through NGI0 Entrust Fund. <a href="https://nlnet.nl/entrust/">NGI0 Entrust Fund</a> is established by the <a href="https://nlnet.nl/">NLnet Foundation</a> with financial support from the European Commission's <a href="https://www.ngi.eu/">Next Generation Internet programme</a>, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 101069594.
</td>
</tr>
<tr>
<td>
<a href="https://summerofcode.withgoogle.com/"><img src="docs/sponsors/gsoc.svg" alt="Google Summer of Code" width="200px"></a>
</td>
<td>
<a href="https://summerofcode.withgoogle.com/">Google</a> backed 5 student's projects in the Google Summer of Code program during <a href="https://summerofcode.withgoogle.com/programs/2022/organizations/organic-maps">2022</a> and <a href="https://summerofcode.withgoogle.com/programs/2023/organizations/organic-maps">2023</a> programs. Noteworthy projects included Android Auto and Wikipedia Dump Extractor.
</td>
</tr>
<tr>
<td>
<a href="https://www.mythic-beasts.com/"><img src="docs/sponsors/mythic-beasts.png" alt="Mythic Beasts" width="200px"></a>
</td>
<td>
<a href="https://www.mythic-beasts.com/">Mythic Beasts</a> ISP <a href="https://www.mythic-beasts.com/blog/2021/10/06/improving-the-world-bit-by-expensive-bit/">provides us</a> two virtual servers with 400 TB/month of free bandwidth to host and serve maps downloads and updates.
</td>
</tr>
<tr>
<td>
<a href="https://44plus.vn"><img src="docs/sponsors/44plus.svg" alt="44+ Technologies" width="200px"></a>
</td>
<td>
<a href="https://44plus.vn">44+ Technologies</a> is <a href="https://44plus.vn/organicmaps">providing us </a>with a free dedicated server worth around $12,000/year to serve maps across Vietnam & Southeast Asia.
</td>
</tr>
<tr>
<td>
<a href="https://futo.org"><img src="docs/sponsors/futo.svg" alt="FUTO" width="200px"></a>
</td>
<td>
<a href="https://futo.org">FUTO</a> has <a href="https://www.youtube.com/watch?v=fJJclgBHrEw">awarded $1000 micro-grant</a> to Organic Maps in February 2023.
</td>
</tr>
</table>
- Walking paths and cycleways
The majority of all expenses have been funded by founders of the project since its inception. The project is far from achieving any sort of financial sustainability. The current level of voluntary donations falls significantly short of covering efforts needed to sustain the app. Any new developments of features are beyond the scope of possibility due to the absence of the necessary financial resources.
- Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more
Please consider [donating](https://organicmaps.app/donate) if you want to see this open-source project thriving, not dying. There are [other ways how to support the project](#contributing). No coding skills required.
- Search by name or an address or by point of interest category
## Copyrights
- Navigation with voice announcements for walking, cycling, or driving
Licensed under the Apache License, Version 2.0. See
[LICENSE](https://github.com/organicmaps/organicmaps/blob/master/LICENSE),
[NOTICE](https://github.com/organicmaps/organicmaps/blob/master/NOTICE)
and [data/copyright.html](http://htmlpreview.github.io/?https://github.com/organicmaps/organicmaps/blob/master/data/copyright.html)
for more information.
- Bookmark your favorite places with a single tap
## Governance
- Offline Wikipedia articles
See [docs/GOVERNANCE.md](docs/GOVERNANCE.md).
- Subway transit layer and directions
<a name="contributing">
- Track recording
## Contributing
- Export and import bookmarks and tracks in KML, KMZ, GPX formats
If you want to build the project, check [docs/INSTALL.md](docs/INSTALL.md). If you want to help the project,
see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md). You can [help in many ways](https://organicmaps.app/support-us/), the ability to code is not necessary.
- A dark mode to use during the night
## Beta
- Improve map data for everyone using a basic built-in editor
Please join our beta program, suggest your features, and report bugs:
- Android Auto and CarPlay support
- [iOS Beta (TestFlight)](https://testflight.apple.com/join/lrKCl08I)
- [Android Beta (Firebase)](https://appdistribution.firebase.dev/i/2f0fee463107b137)
***Freedom Is Here Navigate the world with privacy and community at the forefront.***
## Feedback
---
- **Rate us on the [App Store](https://apps.apple.com/app/organic-maps/id1567437057)
and [Google Play](https://play.google.com/store/apps/details?id=app.organicmaps)**.
- **Star us on Forgejo**.
- Report bugs or issues to [the issue tracker](https://git.omaps.dev/organicmaps/organicmaps/issues).
- Subscribe to our [Telegram Channel](https://t.me/OrganicMapsApp) or to the [[matrix] space](https://matrix.to/#/#organicmaps:matrix.org) for updates.
- Join our [Telegram Group](https://t.me/OrganicMaps) to discuss with other users.
- Присоединяйтесь к нашей [русскоязычной группе в Telegram](https://t.me/OrganicMapsRu) для обратной связи и помощи.
- Diğer kullanıcılarla tartışmak için [Telegram Grubumuza](https://t.me/OrganicMapsTR) katılın.
- Rejoignez notre groupe [Telegram](https://t.me/OrganicMapsFR) pour obtenir de l'aide.
- Contact us by [email](mailto:hello@organicmaps.app).
- Follow our updates in
[Mastodon](https://fosstodon.org/@organicmaps),
[Facebook](https://facebook.com/OrganicMaps),
[X (Twitter)](https://x.com/OrganicMapsApp),
[Instagram](https://instagram.com/organicmaps.app/).
- Güncellemelerimizi [Instagram](https://instagram.com/organicmapstr/) üzerinden takip edin.
## 🤝 Contributing
The Organic Maps community abides by the CNCF [code of conduct](https://github.com/organicmaps/organicmaps/blob/master/docs/CODE_OF_CONDUCT.md).
You can help by donating, contributing code, translating, or by telling others about it. To build the best maps app there is a need for software development, design, product, community development, and other areas. Reach out to us and let us know how you want to help.
- Build instructions: [docs/INSTALL.md](docs/INSTALL.md)
- Contribution guide: [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)
> [!NOTE]
> Some docs might be outdated, contain broken links or old references to Organic Maps, etc. Its a work in progress and help is much appreciated!
There is a dedicated Zulip chat for active contributors: [Zulip](https://comaps.zulipchat.com)
---
## 💬 Feedback
- Rate us on [App Store](https://apps.apple.com/app/comaps/id6747180809) and [Google Play](https://play.google.com/store/apps/details?id=app.comaps.google)
- Star our repos on Codeberg
- Report bugs or request features on the [issue tracker](https://codeberg.org/comaps/comaps/issues)
---
## 💸 Funding
CoMaps is free. To stay that way, it relies on your support.
Donate via [OpenCollective](https://opencollective.com/comaps/donate) or [Liberapay](https://liberapay.com/CoMaps).
The project's financial information is completely open and transparent at [our Open Collective](https://opencollective.com/comaps).
---
## 🔒 Privacy
The Android app has been reviewed by [Exodus Privacy](https://reports.exodus-privacy.eu.org/en/reports/app.comaps.google/latest/).
To [verify](https://developer.android.com/studio/command-line/apksigner#usage-verify) the APK, use the following signing certificate fingerprints:
```
SHA-256: 4894e8e6963627ef660031d8593fe77297f835acb4e23810003e926135023b4c
SHA-1: 8b7b5739f917e9f7c681671ced0c9c8562123ade
MD5: 9cce0ffea281dc2f0e0a154d6d2e281e
```
---
## ⚖️ License
Licensed under the Apache License 2.0.
See [LICENSE](LICENSE), [NOTICE](NOTICE), and [data/copyright.html](data/copyright.html).

10
android/.idea/icon.svg generated
View File

@@ -1,8 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
<g inkscape:groupmode="layer" inkscape:label="Layer 1">
<rect fill="#006c35" fill-opacity="1.0" x="0" y="0" width="1024" height="1024"/>
<path fill="#ffffff" d="m861.3562052 256.9139426c18.220574 48.4374573-79.2585233 166.2022835-172.1806378 196.4226995-168.0803471-58.2153969-173.5457836 39.5504743-311.1096159 132.4296677 162.6149552 112.4329497 332.9737882 24.8856325 329.7844002-85.7673036-127.9956457 73.3254376-208.1650824 81.3238121-254.1719349 79.1032962 154.8710218-30.6636026 322.0404219-125.7633124 357.0667834-165.7616685 0.032202 1.7749817 0.049863 3.5523114 0.049863 5.33456 0 191.0905993-295.1650572 474.6148576-295.1650572 474.6148576s-154.5086464-147.95159-239.9499331-302.4701423c-11.943516-0.1614425-83.8230022 25.9633002-110.3310391-9.051445-29.6082623-39.1049397 80.1693081-170.2028122 175.3699196-209.3102117 170.3563508 77.3261904 263.7351577-123.0971499 317.0292402-134.2068293-158.9688193-94.2135154-316.1183714-55.5493358-333.8847017 84.4353407 88.3675802-50.2172465 196.7775505-78.65765 246.8822227-76.4346744-140.7606999 28.7623957-301.9981102 132.8752019-350.2809443 172.4255642 0-159.041983 132.1505407-287.9677052 295.1650569-287.9677052 96.4018995 0 182.0095151 45.0859887 235.8744518 114.8252613 0.00335 0 96.1884344-31.2834041 109.851981 11.3787329zm-33.7059144 14.218972c-12.6607646-17.2289278-56.7341326 2.8936807-56.7341326 2.8936807 6.1678152 10.3446685 11.7002555 21.0960758 16.5352245 32.2084942 4.8995467 11.2622344 9.0867303 22.8954305 12.5044868 34.8382086 0 0 45.0041042-46.3863227 27.6944213-69.9403835zm-629.5734431 294.3797539c13.6858848 18.6189721 61.3258973-3.1309266 61.3258973-3.1309266-6.6716772-11.1802827-12.6484216-22.8033047-17.8755617-34.8139472-5.2966478-12.1727565-9.8213865-24.7454316-13.5171072-37.6545218 0 0-48.6427553 50.1397674-29.9332284 75.5993956z"/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" width="64pt" height="64pt" viewBox="0 0 835 835">
<path d="M698.5 141.1a20 20 0 0 1 30.8-1.3A416 416 0 0 1 835 417.4a416 416 0 0 1-93.3 263 20 20 0 0 1-31.3-.6l-43-56.6a20 20 0 0 1-.2-24 307 307 0 0 0 59.3-181.8c0-74.2-26.2-142.3-69.9-195.6a20 20 0 0 1-.5-24.8zM260.7 456.4a20 20 0 0 1-7.7-36.7l282-177.4a20 20 0 0 1 29.9 22.7l-97 318.9a20 20 0 0 1-37.5 2.2l-49.2-111.5z" style="fill:#ccdfca"/>
<path d="M626.3 753a20 20 0 0 1-6.2 29.6A416 416 0 0 1 417.5 835 417.7 417.7 0 0 1 0 417.4 417.7 417.7 0 0 1 603.3 43.5a20 20 0 0 1 7 30l-42.4 55.8a20 20 0 0 1-24.2 6.1 307 307 0 0 0-126.2-27 309 309 0 0 0-309 309c0 170.6 138.5 309 309 309a307 307 0 0 0 141.6-34.3 20 20 0 0 1 25.1 5.6z" style="fill:#fefdf6"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 753 B

22
android/Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
FROM ubuntu:latest
ENV TZ=Etc/UTC
ENV QT_QPA_PLATFORM=offscreen
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cmake \
qt6-base-dev \
qt6-svg-dev \
qt6-positioning-dev \
libicu-dev \
libfreetype-dev \
libharfbuzz-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
optipng
WORKDIR /root/comaps
RUN ./configure.sh
CMD ./gradlew -Parm64 assembleFdroidDebug

View File

@@ -1,8 +1,8 @@
To build, install and run e.g. a Web Debug version on your device/emulator: './gradlew runWebDebug'
Or to compile a redistributable Fdroid Beta apk for testing: './gradlew assembleFdroidBeta'
Or to compile a redistributable Fdroid Test apk for testing: './gradlew assembleFdroidBeta'
Or to build beta apks for all flavors: './gradlew assembleBeta'
Or to build test apks for all flavors: './gradlew assembleBeta'
To see all available build targets './gradlew tasks'

View File

@@ -2,18 +2,14 @@
/nativeOutputs
# ignore private keys
/google-services.json
/secure.properties
/release.keystore
/secure.properties
/secure.properties.test
/secure.properties.release
/comaps-test.keystore
/comaps-release.keystore
/libnotify.properties
/google-services.json
/google-play.json
/firebase-app-distribution.json
/firebase-test-lab.json
/huawei-appgallery.json
/agconnect-services.json
/src/main/res/xml/network_security_config.xml
# ignore flags symlinks
/src/main/res/drawable-xhdpi/??.png
@@ -28,6 +24,3 @@
/src/main/res/drawable-mdpi/uk_northern_ireland.png
/src/main/res/drawable-mdpi/uk_scotland.png
/src/main/res/drawable-mdpi/uk_wales.png
# ignore autogenerated metadata (see prepareGoogleReleaseListing in build.gradle)
/src/google/play/listings

View File

@@ -3,38 +3,15 @@ buildscript {
google()
mavenCentral()
}
//
// The magic below is needed to disable Google Firebase Services during the build time.
// Unfortunately, the only way to disable Gradle plugins is to add these hardcore switches to buildscript().
//
// Detect flavors from the task name.
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
def isFdroid = taskName.contains('fdroid')
def isBeta = taskName.contains('beta')
// Firebase Crashlytics compile-time feature flag: -Pfirebase=true|false
def googleFirebaseServicesFlag = findProperty('firebase')
// Enable Firebase for all beta flavors except fdroid only if google-services.json exists.
def googleFirebaseServicesDefault = isBeta && !isFdroid && file("$projectDir/google-services.json").exists()
ext.googleFirebaseServicesEnabled = googleFirebaseServicesFlag != null ?
googleFirebaseServicesFlag == '' || googleFirebaseServicesFlag.toBoolean() :
googleFirebaseServicesDefault
dependencies {
classpath 'com.android.tools.build:gradle:8.7.3'
if (googleFirebaseServicesEnabled) {
println('Building with Google Firebase Services')
classpath 'com.google.gms:google-services:4.4.2'
classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2'
classpath 'com.google.firebase:firebase-appdistribution-gradle:5.0.0'
} else {
println('Building without Google Firebase Services')
}
classpath('com.github.triplet.gradle:play-publisher:3.10.1')
classpath('ru.cian:huawei-publish-gradle-plugin:1.4.2')
classpath libs.android.tools
classpath(libs.triplet.play.publisher)
classpath(libs.huawei.publish)
}
}
@@ -45,11 +22,6 @@ repositories {
}
apply plugin: 'com.android.application'
if (googleFirebaseServicesEnabled) {
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'com.google.firebase.appdistribution'
}
apply plugin: 'com.github.triplet.play'
apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
@@ -80,8 +52,8 @@ def getCommitMessage() {
def osName = System.properties['os.name'].toLowerCase()
project.ext.appId = 'app.organicmaps'
project.ext.appName = 'Organic Maps'
project.ext.appId = 'app.comaps'
project.ext.appName = 'CoMaps'
// I have Java 21 installed, but this doesn't work on MacOS.
//java {
@@ -93,6 +65,13 @@ project.ext.appName = 'Organic Maps'
android {
namespace 'app.organicmaps'
dependenciesInfo {
// Disables dependency metadata when building APKs (for IzzyOnDroid/F-Droid)
includeInApk = false
// Disables dependency metadata when building Android App Bundles (for Google Play)
includeInBundle = false
}
buildFeatures {
dataBinding = true
buildConfig = true
@@ -103,7 +82,7 @@ android {
ndkVersion '27.2.12479018'
defaultConfig {
// Default package name is taken from the manifest and should be app.organicmaps
// Default package name is taken from the manifest and should be app.comaps
def ver = getVersion()
versionCode = ver.V1
versionName = ver.V2
@@ -112,10 +91,9 @@ android {
minSdk propMinSdkVersion.toInteger()
targetSdk propTargetSdkVersion.toInteger()
applicationId project.ext.appId
buildConfigField 'String', 'SUPPORT_MAIL', '"android@organicmaps.app"'
buildConfigField 'String', 'SUPPORT_MAIL', '"android@comaps.app"'
// Should be customized in flavors.
buildConfigField 'String', 'REVIEW_URL', '""'
resourceConfigurations += [project.ext.supportedLocalizations]
externalNativeBuild {
def pchFlag = 'OFF'
@@ -182,30 +160,33 @@ android {
google {
dimension 'default'
applicationIdSuffix '.google'
versionName = android.defaultConfig.versionName + '-Google'
buildConfigField 'String', 'SUPPORT_MAIL', '"googleplay@organicmaps.app"'
buildConfigField 'String', 'REVIEW_URL', '"market://details?id=app.organicmaps"'
buildConfigField 'String', 'SUPPORT_MAIL', '"gplay@comaps.app"'
buildConfigField 'String', 'REVIEW_URL', '"market://details?id=app.comaps.google"'
}
// Distributed directly by the project, e.g. in repo releases, chats, etc.
web {
dimension 'default'
applicationIdSuffix '.web'
versionName = android.defaultConfig.versionName + '-Web'
buildConfigField 'String', 'SUPPORT_MAIL', '"apk@organicmaps.app"'
versionName = android.defaultConfig.versionName
buildConfigField 'String', 'SUPPORT_MAIL', '"apk@comaps.app"'
}
fdroid {
dimension 'default'
applicationIdSuffix '.fdroid'
versionName = android.defaultConfig.versionName + '-FDroid'
buildConfigField 'String', 'SUPPORT_MAIL', '"fdroid@organicmaps.app"'
buildConfigField 'String', 'SUPPORT_MAIL', '"fdroid@comaps.app"'
}
huawei {
dimension 'default'
applicationIdSuffix '.huawei'
versionName = android.defaultConfig.versionName + '-Huawei'
versionCode = HUAWEI_VERSION_CODE_BASE + android.defaultConfig.versionCode
buildConfigField 'String', 'SUPPORT_MAIL', '"huawei@organicmaps.app"'
buildConfigField 'String', 'REVIEW_URL', '"appmarket://details?id=app.organicmaps"'
buildConfigField 'String', 'SUPPORT_MAIL', '"huawei@comaps.app"'
buildConfigField 'String', 'REVIEW_URL', '"appmarket://details?id=app.comaps"'
}
}
@@ -246,54 +227,72 @@ android {
}
}
def securityPropertiesFileExists = file('secure.properties').exists()
if (securityPropertiesFileExists) {
apply from: 'secure.properties'
def secureReleasePropertiesFileExists = file('secure.properties.release').exists()
if (secureReleasePropertiesFileExists) {
apply from: 'secure.properties.release'
}
def secureTestPropertiesFileExists = file('secure.properties.test').exists()
if (secureTestPropertiesFileExists) {
apply from: 'secure.properties.test'
}
signingConfigs {
debug {
storeFile file('debug.keystore')
storeFile file('comaps-debug.keystore')
storePassword '12345678'
keyAlias 'debug'
keyAlias 'CoMaps Debug'
keyPassword '12345678'
}
release {
if (securityPropertiesFileExists) {
println('The release signing keys are available')
storeFile file(spropStoreFile)
storePassword spropStorePassword
keyAlias spropKeyAlias
keyPassword spropKeyPassword
test {
if (secureTestPropertiesFileExists) {
storeFile file(secretTestStoreFile)
storePassword secretTestStorePassword
keyAlias secretTestKeyAlias
keyPassword secretTestKeyPassword
} else {
println('The release signing keys are unavailable')
println('secure.properties.test doesn\'t exist')
}
}
release {
if (secureReleasePropertiesFileExists) {
storeFile file(secretReleaseStoreFile)
storePassword secretReleaseStorePassword
keyAlias secretReleaseKeyAlias
keyPassword secretReleaseKeyPassword
} else {
println('secure.properties.release doesn\'t exist')
}
}
}
buildTypes {
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
debug {
applicationIdSuffix '.debug' // Allows to install debug and release builds together
versionNameSuffix '-debug'
jniDebuggable true // Enable jni debug build
zipAlignEnabled true
signingConfig signingConfigs.debug
resValue 'string', 'app_name', 'Debug Organic Maps'
resValue 'string', 'app_name', 'CoMaps Debug'
// Do not generate separate debug symbols for debug apps, because we don't distribute them.
ndk.debugSymbolLevel = 'none'
if (googleFirebaseServicesEnabled) {
// Keep debug symbols for test lab.
ndk.debugSymbolLevel = 'symbol_table'
firebaseCrashlytics {
nativeSymbolUploadEnabled true
}
}
}
release {
if (taskName.contains('release')) {
if (secureReleasePropertiesFileExists) {
println('Using RELEASE signing keys from secure.properties.release')
signingConfig signingConfigs.release
} else {
println('NO RELEASE signing keys found')
println('Using DEBUG signing keys')
signingConfig signingConfigs.debug
}
}
minifyEnabled true
shrinkResources true
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
@@ -302,40 +301,30 @@ android {
resValue 'string', 'app_name', project.ext.appName
// Full size symbols are too big for Google, 217mb aab vs 95mb.
ndk.debugSymbolLevel = 'symbol_table'
if (googleFirebaseServicesEnabled) {
firebaseCrashlytics {
nativeSymbolUploadEnabled true
}
}
}
beta {
applicationIdSuffix '.beta'
versionNameSuffix '-beta'
signingConfig signingConfigs.release
applicationIdSuffix '.test'
versionNameSuffix '-test'
if (taskName.contains('beta')) {
if (secureTestPropertiesFileExists) {
println('Using TEST signing keys from secure.properties.test')
signingConfig signingConfigs.test
} else {
println('NO TEST signing keys found')
println('Using DEBUG signing keys')
signingConfig signingConfigs.debug
}
}
minifyEnabled true
shrinkResources true
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
// To learn more, go to the documentation section about R8 configuration files.
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
matchingFallbacks = ['debug', 'release']
resValue 'string', 'app_name', 'Beta Organic Maps'
matchingFallbacks = ['release'] // use dependencies of "release" build type
resValue 'string', 'app_name', 'CoMaps Test'
// Full size symbols are too big for Google, 217mb aab vs 95mb.
ndk.debugSymbolLevel = 'symbol_table'
if (googleFirebaseServicesEnabled) {
firebaseCrashlytics {
nativeSymbolUploadEnabled true
}
firebaseAppDistribution {
// A new beta release is created for each commit.
// Use the last commit message for the release notes.
releaseNotes = getCommitMessage()
groups = 'qa' // Notify only selected people.
serviceCredentialsFile = "$projectDir/firebase-app-distribution.json"
}
}
}
}
@@ -352,6 +341,58 @@ android {
androidResources {
ignoreAssetsPattern '!.svn:!.git:!.DS_Store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
noCompress = ['txt', 'bin', 'html', 'png', 'json', 'mwm', 'ttf', 'sdf', 'ui', 'config', 'csv', 'spv', 'obj']
localeFilters += [
"af",
"ar",
"az",
"be",
"bg",
"ca",
"cs",
"da",
"de",
"el",
"en",
"en-rGB",
"es",
"es-rMX",
"et",
"eu",
"fa",
"fi",
"fr",
"fr-rCA",
"iw",
"hi",
"hu",
"in",
"it",
"ja",
"ko",
"lt",
"lv",
"mr",
"mt",
"nb",
"nl",
"pl",
"pt",
"pt-rBR",
"ro",
"ru",
"sk",
"sr",
"sv",
"sw",
"th",
"tr",
"uk",
"vi",
"zh",
"zh-rHK",
"zh-rMO",
"zh-rTW"
]
}
compileOptions {
@@ -363,9 +404,11 @@ android {
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
coreLibraryDesugaring libs.android.tools.desugar
// Google Play Location Services
// TODO(@pastk): enabled via microG in all flavors,
// so move google/java/app/organicmaps/location/* into main/ and remove symlinks.
//
// Please add symlinks to google/java/app/organicmaps/location for each new gms-enabled flavor below:
// ```
@@ -374,51 +417,36 @@ dependencies {
// ls -la src/$flavor/java/app/organicmaps/location/GoogleFusedLocationProvider.java
// ```
//
webImplementation 'com.google.android.gms:play-services-location:21.3.0'
googleImplementation 'com.google.android.gms:play-services-location:21.3.0'
huaweiImplementation 'com.google.android.gms:play-services-location:21.3.0'
// This is the microG project's re-implementation which is permissible on
// F-droid because it's Apache-2.0.
fdroidImplementation 'org.microg.gms:play-services-location:0.3.6.244735'
// Google Firebase Services
if (googleFirebaseServicesEnabled) {
// Import the BoM for the Firebase platform
implementation platform('com.google.firebase:firebase-bom:33.5.1')
// Add the dependencies for the Crashlytics and Analytics libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.firebase:firebase-crashlytics-ndk'
}
// microG project's FOSS re-implementation of the proprietary libs.google.services.location
implementation libs.microg.services.location
// This line is added as a workaround for duplicate classes error caused by some outdated dependency:
// > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
// We don't use Kotlin, but some dependencies are actively using it.
// See https://stackoverflow.com/a/75719642
implementation 'androidx.core:core:1.15.0'
implementation(platform('org.jetbrains.kotlin:kotlin-bom:2.1.10'))
implementation 'androidx.annotation:annotation:1.9.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.car.app:app:1.7.0-rc01'
implementation 'androidx.car.app:app-projected:1.7.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
implementation 'androidx.fragment:fragment:1.8.5'
implementation 'androidx.preference:preference:1.2.1'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.work:work-runtime:2.10.0'
implementation 'androidx.lifecycle:lifecycle-process:2.8.7'
implementation 'com.google.android.material:material:1.12.0'
implementation libs.androidx.core
implementation(platform(libs.jetbrains.kotlin.bom))
implementation libs.androidx.annotation
implementation libs.androidx.appcompat
implementation libs.androidx.car.app
implementation libs.androidx.car.app.projected
implementation libs.androidx.constraintlayout
implementation libs.androidx.fragment
implementation libs.androidx.preference
implementation libs.androidx.recyclerview
implementation libs.androidx.work.runtime
implementation libs.androidx.lifecycle.process
implementation libs.android.material
// Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture
// https://github.com/organicmaps/organicmaps/issues/6106
implementation 'com.google.guava:guava:33.3.0-android'
implementation 'com.github.devnullorthrow:MPAndroidChart:3.2.0-alpha'
implementation 'net.jcip:jcip-annotations:1.0'
implementation libs.google.guava
implementation libs.devnullorthrow.mpandroidchart
implementation libs.jcip.annotations
// Test Dependencies
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.mockito:mockito-core:5.15.2'
testImplementation 'org.mockito:mockito-inline:5.2.0'
androidTestImplementation libs.androidx.test.junit
testImplementation libs.junit
testImplementation libs.mockito.core
}
tasks.withType(JavaCompile) {
@@ -434,32 +462,6 @@ android.applicationVariants.all { variant ->
variant.resValue 'string', 'app_id', variant.applicationId
}
task prepareGoogleReleaseListing {
// Prepares Google Play metainfo from F-Droid metainfo.
final sourceFlavor = 'fdroid'
final targetFlavor = 'google'
doLast {
final sourceDir = new File("${projectDir}/src/$sourceFlavor/play/listings")
final targetDir = new File("${projectDir}/src/$targetFlavor/play/listings")
final sourceFiles = fileTree(dir: sourceDir,
include: '**/*.txt', exclude: "**/*-${targetFlavor}.txt")
sourceFiles.each { File sourceFile ->
final locale = sourceFile.parentFile.getName()
final targetLocaleDir = new File(targetDir, locale)
if (!targetLocaleDir.isDirectory())
targetLocaleDir.mkdirs()
final targetFile = new File(targetLocaleDir, sourceFile.getName())
// Override Google-specific values by using ${name}-google.txt files.
final overrideFile = new File(sourceFile.getPath().replace('.txt', "-${targetFlavor}.txt"))
targetFile.text = overrideFile.exists() ? overrideFile.text : sourceFile.text
}
copy {
from "${projectDir}/../../screenshots/android"
into targetDir
}
}
}
play {
enabled.set(false)
track.set('production')

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -1 +1 @@
fdroid@organicmaps.app
fdroid@comaps.app

View File

@@ -1 +1 @@
https://organicmaps.app/
https://www.comaps.app/

View File

@@ -1,53 +0,0 @@
‣ تطبيقنا المجاني لا يتتبعك ولا يحتوي على إعلانات ويحتاج إلى دعمك.
‣ يتم تحسينه باستمرار من قبل المساهمين وفريقنا الصغير، في أوقات فراغنا.
‣ إذا كان هناك شيء خاطئ أو مفقود على الخريطة، يرجى إصلاحه في <b>OpenStreetMap</b> وانظر إلى تعديلاتك في تحديث الخرائط المستقبلية.
‣ إذا لم ينجح التنقل أو البحث، يرجى إرسال بريد إلكتروني إلينا. نرد على <i>كل بريد إلكتروني</i> وسنصلحه في أسرع وقت ممكن!
<b>ملاحظاتك ومراجعات الخمس نجوم هي أفضل المحفزات لنا!</b>
الميزات الرئيسية:
• مجاني، مفتوح المصدر، لا إعلانات، لا تتبع
• خرائط مفصلة غير متصلة بالإنترنت مع أماكن غير موجودة على خرائط Google، وذلك بفضل مجتمع <b>OpenStreetMap</b>
• طرق ركوب الدراجات ومسارات المشي لمسافات طويلة ومسارات المشي
• خطوط الكنتور وملامح الارتفاع والقمم والمنحدرات
• المشي بدوران وركوب الدراجات والملاحة التجريبية بالسيارة مع التوجيه الصوتي
• البحث السريع في وضع عدم الاتصال
• العلامات المرجعية وتتبع التصدير والاستيراد بأشكال KML و KMZ و GPX
• الوضع المظلم لحماية عينيك
لا يوجد نظام وسائل النقل العام وخرائط الأقمار الصناعية وغيرها من الميزات الرائعة <i>حتى الآن</i> في الخرائط العضوية. ولكن مع <i>مساعدتك ودعمك</i>، يمكننا أن نجعل هذا العالم أفضل خطوة بخطوة.
الخرائط العضوية هي <b>نقية وعضوية، مصنوعة من الحب</b>:
• تجربة سريعة مشتعلة في وضع عدم الاتصال
• يحترم خصوصيتك
• يحفظ بطاريتك
• لا توجد رسوم غير متوقعة لبيانات الهاتف المحمول
• سهل الاستخدام، مع تضمين أهم الميزات فقط
خالية من أجهزة التعقب والأشياء السيئة الأخرى:
• لا إعلانات
• لا تتبع
• عدم جمع البيانات
• لا يوجد اتصال هاتفي بالمنزل
• لا تسجيل مزعج
• لا توجد دروس إلزامية
• لا بريد إلكتروني مزعج
• لا توجد إشعارات دفع
• لا توجد أواني حلوى
• لا مبيدات عضوية بالكامل
في Organic Maps نعتقد أن <b>الخصوصية هي حق أساسي من حقوق الإنسان:</b>
• Organic Maps هو مشروع مفتوح المصدر يحركه المجتمع المستقل
• نحن نحمي خصوصيتك من أعين المتطفلين لدى شركات التقنيات الكبيرة
•ابق آمنًا بغض النظر عن مكان وجودك
يتم العثور على أجهزة تعقب صفرية والأذونات المطلوبة بشكل ضئيل فقط وفقًا لتقرير Exodus Privacy.
الرجاء زيارة <b><i>organicmaps.app</i></b> للحصول على مزيد من التفاصيل والأسئلة الشائعة، والاتصال بنا مباشرة على @OrganicMapsApp في Telegram.
ارفض المراقبة - احتضن حريتك.
<b>أعطي Organic Maps تجربة!</b>

View File

@@ -1,8 +0,0 @@
• New OpenStreetMap data as of February 27
• Ability to manually arrange intermediate route points
• Share a single selected track from the list
• Improved routing for bicycles
• Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -1 +0,0 @@
التنقل بالخصوصية - مفتوح المصدر و مُدار من طرف المُجتمع

View File

@@ -1 +0,0 @@
تنزه Organic Maps بدون إنترنت

View File

@@ -1 +0,0 @@
Organic Maps: تنزه والدراجة والقيادة بدون إنترنت

View File

@@ -1 +0,0 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,53 +0,0 @@
‣ Our free app does not track you, does not have ads, and it needs your support.
‣ It is constantly being improved by contributors and our small team, in our free time.
‣ If something is wrong or missing on the map, please fix it in <b>OpenStreetMap</b> and see your changes in the future maps update.
‣ If navigation or search doesn't work, please check it on osm.org first, and then email us. We reply to <i>EVERY</i> email, and we'll fix it ASAP!
<b>Your feedback and 5-star reviews are the best motivators for us!</b>
Key features:
• Free, open-source, no ads, no tracking
• Detailed offline maps with places that don't exist on Google maps, thanks to the <b>OpenStreetMap</b> community
• Cycling routes, hiking trails, and walking paths
• Contour lines, elevation profiles, peaks, and slopes
• Turn-by-turn walking, cycling, and car navigation with voice guidance and Android Auto
• Fast offline search
• Bookmarks and tracks export and import in KML, KMZ, GPX formats
• Dark mode to protect your eyes
There is no public transport, satellite maps, and other cool features <i>yet</i> in Organic Maps. But with <i>your help and support</i>, we can make better maps step by step.
Organic Maps is <b>pure and organic, made with love</b>:
• Blazing fast offline experience
• Respects your privacy
• Saves your battery
• No unexpected mobile data charges
• Simple to use, with only most important features included
Free from trackers and other bad stuff:
• No ads
• No tracking
• No data collection
• No phoning home
• No annoying registration
• No mandatory tutorials
• No noisy email spam
• No push notifications
• No crapware
• N̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purely organic
At Organic Maps, we believe that <b>privacy is a fundamental human right</b>:
• Organic Maps is an indie community-driven open-source project
• We protect privacy from Big Tech's prying eyes
• Stay safe no matter wherever you are
Zero trackers and only minimally required permissions are found according to Exodus Privacy Report.
Please visit <b><i>organicmaps.app</i></b> website for additional details and FAQ, and contact us directly at @OrganicMapsApp in Telegram.
Reject surveillance - embrace your freedom.
<b>Give Organic Maps a try!</b>

View File

@@ -1,8 +0,0 @@
• New OpenStreetMap data as of February 27
• Ability to manually arrange intermediate route points
• Share a single selected track from the list
• Improved routing for bicycles
• Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -1 +0,0 @@
Open-source, community-driven maps for travelers, tourists, cyclists & hikers

View File

@@ -1 +0,0 @@
Organic Maps: offline maps

View File

@@ -1 +0,0 @@
Organic Maps Offline Hike, Bike, GPS Navigation

View File

@@ -1 +0,0 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,53 +0,0 @@
‣ Our free app does not track you, does not have ads, and it needs your support.
‣ It is constantly being improved by contributors and our small team, in our free time.
‣ If something is wrong or missing on the map, please fix it in <b>OpenStreetMap</b> and see your changes in the future maps update.
‣ If navigation or search doesn't work, please check it on osm.org first, and then email us. We reply to <i>EVERY</i> email, and we'll fix it ASAP!
<b>Your feedback and 5-star reviews are the best motivators for us!</b>
Key features:
• Free, open-source, no ads, no tracking
• Detailed offline maps with places that don't exist on Google maps, thanks to the <b>OpenStreetMap</b> community
• Cycling routes, hiking trails, and walking paths
• Contour lines, elevation profiles, peaks, and slopes
• Turn-by-turn walking, cycling, and car navigation with voice guidance and Android Auto
• Fast offline search
• Bookmarks and tracks export and import in KML, KMZ, GPX formats
• Dark mode to protect your eyes
There is no public transport, satellite maps, and other cool features <i>yet</i> in Organic Maps. But with <i>your help and support</i>, we can make better maps step by step.
Organic Maps is <b>pure and organic, made with love</b>:
• Blazing fast offline experience
• Respects your privacy
• Saves your battery
• No unexpected mobile data charges
• Simple to use, with only most important features included
Free from trackers and other bad stuff:
• No ads
• No tracking
• No data collection
• No phoning home
• No annoying registration
• No mandatory tutorials
• No noisy email spam
• No push notifications
• No crapware
• N̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purely organic
At Organic Maps, we believe that <b>privacy is a fundamental human right</b>:
• Organic Maps is an indie community-driven open-source project
• We protect privacy from Big Tech's prying eyes
• Stay safe no matter wherever you are
Zero trackers and only minimally required permissions are found according to Exodus Privacy Report.
Please visit <b><i>organicmaps.app</i></b> website for additional details and FAQ, and contact us directly at @OrganicMapsApp in Telegram.
Reject surveillance - embrace your freedom.
<b>Give Organic Maps a try!</b>

View File

@@ -1,8 +0,0 @@
• Новыя дадзеныя OpenStreetMap ад 27 лютага
• Магчымасць уручную расстаўляць прамежкавыя кропкі маршруту
• Экспарт аднаго абранага трэка са спісу
• Палепшаная маршрутызацыя для веласіпедыстаў
• Дададзена сістэмнае апавяшчэнне пры загрузцы карт, фонавыя загрузкі больш не перарываюцца
• Дададзены мігатлівы віджэт запісу трэка
…і шматлікае іншае на omaps.org/news

View File

@@ -1 +0,0 @@
Open-source, community-driven maps for travelers, tourists, cyclists & hikers

View File

@@ -1 +0,0 @@
Offline Organic Maps Hike Bike

View File

@@ -1 +0,0 @@
Organic Maps Offline Hike, Bike, GPS Navigation

View File

@@ -1 +0,0 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,53 +0,0 @@
‣ Our free app does not track you, does not have ads, and it needs your support.
‣ It is constantly being improved by contributors and our small team, in our free time.
‣ If something is wrong or missing on the map, please fix it in <b>OpenStreetMap</b> and see your changes in the future maps update.
‣ If navigation or search doesn't work, please check it on osm.org first, and then email us. We reply to <i>EVERY</i> email, and we'll fix it ASAP!
<b>Your feedback and 5-star reviews are the best motivators for us!</b>
Key features:
• Free, open-source, no ads, no tracking
• Detailed offline maps with places that don't exist on Google maps, thanks to the <b>OpenStreetMap</b> community
• Cycling routes, hiking trails, and walking paths
• Contour lines, elevation profiles, peaks, and slopes
• Turn-by-turn walking, cycling, and car navigation with voice guidance and Android Auto
• Fast offline search
• Bookmarks and tracks export and import in KML, KMZ, GPX formats
• Dark mode to protect your eyes
There is no public transport, satellite maps, and other cool features <i>yet</i> in Organic Maps. But with <i>your help and support</i>, we can make better maps step by step.
Organic Maps is <b>pure and organic, made with love</b>:
• Blazing fast offline experience
• Respects your privacy
• Saves your battery
• No unexpected mobile data charges
• Simple to use, with only most important features included
Free from trackers and other bad stuff:
• No ads
• No tracking
• No data collection
• No phoning home
• No annoying registration
• No mandatory tutorials
• No noisy email spam
• No push notifications
• No crapware
• N̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purely organic
At Organic Maps, we believe that <b>privacy is a fundamental human right</b>:
• Organic Maps is an indie community-driven open-source project
• We protect privacy from Big Tech's prying eyes
• Stay safe no matter wherever you are
Zero trackers and only minimally required permissions are found according to Exodus Privacy Report.
Please visit <b><i>organicmaps.app</i></b> website for additional details and FAQ, and contact us directly at @OrganicMapsApp in Telegram.
Reject surveillance - embrace your freedom.
<b>Give Organic Maps a try!</b>

View File

@@ -1,8 +0,0 @@
• New OpenStreetMap data as of February 27
• Ability to manually arrange intermediate route points
• Share a single selected track from the list
• Improved routing for bicycles
• Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -1 +0,0 @@
Open-source, community-driven maps for travelers, tourists, cyclists & hikers

View File

@@ -1 +0,0 @@
Organic Maps: gps и навигиране

View File

@@ -1 +0,0 @@
Organic Maps Offline Hike, Bike, GPS Navigation

View File

@@ -1 +0,0 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,10 +0,0 @@
Organic Maps হল একটি GPS নেভিগেশন অ্যাপ যার গোপনীয়তা রয়েছে, ড্রাইভার, হাইকার এবং সাইক্লিস্টদের জন্য। অ্যাপটিতে গোপনীয়তা সহ নেভিগেশন বৈশিষ্ট্য রয়েছে - কোন অবস্থান ট্র্যাকিং, কোন তথ্য সংগ্রহ এবং কোন বিজ্ঞাপন নেই। অনুসন্ধান, রাউটিং এবং নেভিগেশন সেল ফোন সিগন্যাল ছাড়াই কাজ করে, দূরবর্তী হাইকিং ট্রেইলে ভ্রমণের জন্য আদর্শ বা দুর্বল সংযোগ সহ অবস্থানগুলি। জৈব মানচিত্র সারা বিশ্ব থেকে অবদানকারীদের সাথে ক্রাউড-সোর্সড OpenStreetMap ডেটা ব্যবহার করে। প্রকল্পটি সম্প্রদায়-চালিত, কোডটি ওপেন সোর্স, এবং সম্প্রদায়ের উন্নয়ন এবং সহযোগিতাকে অগ্রাধিকার দেয়।
• কোন সেল সিগন্যাল প্রয়োজন নেই - অনুসন্ধান এবং একটি সংকেত ছাড়া রুট
• দক্ষ ব্যাটারি ব্যবহার - ব্যাটারি ড্রেন হ্রাস
• দ্রুত অনুসন্ধান - দ্রুত অবস্থান খুঁজুন
অর্গানিক ম্যাপে, আমরা গোপনীয়তাকে গুরুত্ব দিই:
• কোন অবস্থান ট্র্যাকিং
• কোন ডেটা সংগ্রহ নেই
• কোন বিজ্ঞাপন নেই

View File

@@ -1,8 +0,0 @@
• New OpenStreetMap data as of February 27
• Ability to manually arrange intermediate route points
• Share a single selected track from the list
• Improved routing for bicycles
• Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -1 +0,0 @@
গোপনীয়তার সাথে নেভিগেট করুন - সম্প্রদায়-চালিত এবং ওপেন-সোর্স

View File

@@ -1 +0,0 @@
Organic Maps: হাইক বাইক ড্রাইভ

View File

@@ -1 +0,0 @@
Organic Maps: হাইক, বাইক, ড্রাইভ অফলাইন

View File

@@ -1 +0,0 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,52 +0,0 @@
‣ La nostra aplicació gratuïta no té cap mena de publicitat ni us fa un seguiment.
‣ És millorada constantment durant el temps lliure dels seus usuaris i el nostre petit equip.
‣ Si hi ha res malament o inacabat al mapa, podeu arreglar-ho a l'<b>OpenStreetMap</b> i veureu els vostres canvis a la propera actualització dels mapes.
‣ Si la navegació o la cerca no funciona, envieu-nos un correu electrònic. Responem a <i>TOTS</i> els correus-e i ho solucionem tan aviat com es pugui.
<b>Els vostres comentaris i comentaris de 5 estrelles són els millors motivadors per a nosaltres!</b>
Característiques clau:
• Gratuït, de codi obert, sense anuncis, sense seguiment
• Mapes detallats fora de línia amb llocs que no existeixen a Google Maps, gràcies a la comunitat de l'<b>OpenStreetMap</b>
• Rutes amb bicicleta, rutes d'excursionisme i senderisme
• Corbes de nivell, perfils d'elevació, cims i pendents
• Passeig, bicicleta i navegació en cotxe amb guia de veu, Android Auto
• Cerca ràpida fora de línia
• Exportació i importació d'adreces d'interès en formats KML, KMZ i GPX
• Mode fosc per a protegir els ulls
No hi ha <i>de moment</i> transport públic, mapes per satèl·lit i altres funcions interessants a l'Organic Maps. Però amb <i>la vostra ajuda i suport</i>, podem millorar aquest món pas a pas.
L'Organic Maps és <b>pur i orgànic, fet amb amor</b>:
• Experiència fora de línia ràpida i brillant
• Respecta la vostra privadesa
• Estalvia la bateria
• Sense càrrecs inesperats de dades mòbils
• Fàcil d'utilitzar, amb només les funcions més importants incloses
Lliure de rastrejadors i altres coses dolentes:
• Sense anuncis
• Sense seguiment
• Sense recollida de dades
• Sense trucades per a vendre-us res
• Sense cap mena de registre
• Sense tutorials obligatoris
• Sense enviar-vos correu brossa
• Sense notificacions push
• Sense crapware
• So̶ns̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purament orgànic
A Organic Maps, creiem que la privadesa <b> és un dret humà fonamental</b>:
• Organic Maps és un projecte de codi obert impulsat per la comunitat independent
• Protegim la privadesa de les mirades indiscretes de les grans multinacionals
• Estigueu segurs siguis on siguis
Segons l'informe de privadesa d'Exodus, no s'ha trobat cap rastrejador i s'utilitzen només els permisos mínims necessaris.
Per a més informació, visiteu el web <b><i>organicmaps.app</i></b> o bé contacteu-nos (en anglès) a @OrganicMapsApp al Telegram.
Rebutgeu la vigilància: accepteu la vostra llibertat.
<b>Proveu els mapes orgànics!</b>

View File

@@ -1,8 +0,0 @@
• New OpenStreetMap data as of February 27
• Ability to manually arrange intermediate route points
• Share a single selected track from the list
• Improved routing for bicycles
• Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -1 +0,0 @@
Mapes comunitaris i de codi obert per a turistes, ciclistes i excursionistes

View File

@@ -1 +0,0 @@
Organic Maps GPS fora de línia

View File

@@ -1 +0,0 @@
Organic Maps: GPS, senderisme i BTT sense dades

View File

@@ -1 +0,0 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,53 +1,32 @@
‣ Naše bezplatná aplikace vás nesleduje, neobsahuje reklamy a potřebuje vaši podporu.
‣ Je neustále vylepšována přispěvateli a naším malým týmem v našem volném čase.
‣ Pokud je na mapě něco špatně nebo na ní něco chybí, opravte to prosím na <b>OpenStreetMap</b>. Své změny uvidíte v pozdějších aktualizacích map.
‣ Pokud nefunguje navigace nebo vyhledávání, zkontrolujte to prosím nejprve na osm.org a až poté nám napište e-mail. Odpovídáme na <i>KAŽDÝ</i> e-mail a problémy opravujeme jak nejdříve můžeme.
Komunitou vedená bezplatná a otevřená mapová aplikace založená na datech z projektu OpenStreetMap a posílená závazkem k transparentnosti, soukromí a neziskovosti. Aplikace CoMaps je fork/odnož aplikace Organic Maps, která je zase forkem aplikace Maps.ME.
<b>Vaše zpětná vazba a 5-hvězdičková hodnocení jsou pro nás nejlepší motivací!</b>
Důvody vzniku projektu a jeho směr si můžete přečíst na adrese <b><i>codeberg.org/comaps</i></b>.
Můžete se zde také připojit ke komunitě pomáhat s vytvářením nejlepší mapové aplikace
• Používejte aplikaci a sdílejte ji se známými
• Poskytujte zpětnou vazbu a nahlašujte problémy
• Aktualizujte mapová data v aplikaci nebo na webu OpenStreetMap
Klíčové funkce:
‣ <b>Zaměřené na offline použití</b>: Plánujte a navigujte své cesty do zahraničí bez nutnosti mobilních dat, hledejte body na vzdálených túrách apod. Všechny funkce aplikace jsou navrženy tak, aby fungovaly offline.
‣ <b>S ohledem na soukromí</b>: Aplikace je navržená s důrazem na soukromí neidentifikuje lidi, nesleduje vás a nesbírá osobní údaje. Bez reklam.
‣ <b>Jednoduché a vyladěné</b>: Základní, snadno použitelné funkce, které prostě fungují.
‣ <b>Šetří vaši baterii a místo</b>: Nevybíjí vaší baterii, jako ostatní navigační aplikace. Kompaktní mapy šetří cenné místo ve vašem telefonu.
‣ <b>Bezplatné a vytvořené komunitou</b>: S vytvářením aplikace pomáhají lidé, jako jste vy, přidáváním míst do projektu OpenStreetMap, testováním a poskytováním zpětné vazby k funkcím a přispíváním svými vývojářskými schopnostmi a penězi.
‣ <b>Otevřené a transparentní rozhodování a nakládání s financemi, neziskovost a plně otevřený zdrojový kód.</b>
• Bezplatné, open-source, bez reklam, bez sledování
Podrobné offline mapy s místy, které neexistují v Mapách Google, díky komunitě <b>OpenStreetMap</b>
Cyklotrasy, turistické trasy a pěší stezky
Vrstevnice, výškové profily, vrcholy a svahy
Pěší, cyklistická a automobilová navigace krok po kroku s hlasovými pokyny a Android Auto
Rychlý offline vyhledávač
<b>Hlavní funkce</b>:
Stahovatelné podrobné mapy s místy, která nenajdete ani v Mapách Google
Outdoorový režim se zvýrazněnými turistickými trasami, tábořišti, vodními zdroji, vrcholy, vrstevnicemi atd.
Pěší trasy a cyklostezky
Body zájmu, jako jsou restaurace, čerpací stanice, hotely, obchody, vyhlídky a mnoho dalšího
Hledání podle názvu nebo adresy nebo podle kategorie bodů zájmu
• Navigace s hlasovými pokyny pro chůzi, jízdu na kole nebo řízení
• Uložení oblíbených míst jedním klepnutím
• Offline články z Wikipedie
• Vrstva metra a navigace v něm
• Záznam tras
• Export a import záložek a tras ve formátech KML, KMZ a GPX
• Tmavý režim pro ochranu vašich očí
• Tmavý režim k použití během noci
• Zlepšování mapových dat pro všechny pomocí jednoduchého vestavěného editoru
Organic Maps <i>zatím</i> neobsahují cool vychytávky jako veřejnou dopravu nebo satelitní mapy, <i>s vaší pomocí a podporou</i> ale můžeme postupně mapy vylepšovat.
Aplikace Organic Maps je <b>čistá a organická, vytvořená s láskou</b>:
• Neskutečně rychlý offline zážitek
• Respektuje vaše soukromí
• Šetří vaší baterii
• Žádné neočekávané poplatky za mobilní data
• Je jednoduchá na používání, obsahuje pouze nejdůležitější funkce
Neobsahuje sledovací prvky a další špatnosti:
• Žádné reklamy
• Žádné sledování
• Žádné sbírání dat
• Žádné volání domů
• Žádná otravná registrace
• Žádné povinné tutoriály
• Žádný e-mailový spam
• Žádná vyskakovací oznámení
• Žádný crapware
• Ž̶á̶d̶n̶é̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶y̶ Plně organické
V Organic Maps věříme, že <b>soukromí je základní lidské právo</b>:
• Organic Maps jsou nezávislý komunitní open-source projekt
• Chráníme vaše soukromí před zvědavýma očima Big Tech firem
• Nezávisle na vašem umístění jste v bezpečí
Podle hlášení Exodus Privacy neobsahuje aplikace žádné sledovací prvky a vyžaduje pouze minimální množství oprávnění.
Pro další podrobnosti a často kladené dotazy prosím navštivte webové stránky <b><i>organicmaps.app</i></b>. Kontaktovat nás můžete přes @OrganicMapsApp na Telegramu.
Odmítněte sledování - přijměte svou svobodu.
<b>Vyzkoušejte Organic Maps!</b>
<b>Svoboda je tady</b>
Objevujte své cesty, navigujte se světem se soukromím a komunitou na prvním místě!

View File

@@ -1,8 +0,0 @@
• New OpenStreetMap data as of February 27
• Ability to manually arrange intermediate route points
• Share a single selected track from the list
• Improved routing for bicycles
• Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -1 +1 @@
Navigace s ochranou soukromí - vedená komunitou a open-source
Jednoduchá navigace v mapě Objevte více na své cestě Vyvíjeno komunitou

View File

@@ -1 +0,0 @@
Organic Maps: pěšky kolo auto

View File

@@ -1 +1 @@
Organic Maps: pěšky, na kole a autem offline
CoMaps pěšky, na kole a autem offline a soukromě

View File

@@ -1 +0,0 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,53 +0,0 @@
‣ Our free app does not track you, does not have ads, and it needs your support.
‣ It is constantly being improved by contributors and our small team, in our free time.
‣ If something is wrong or missing on the map, please fix it in <b>OpenStreetMap</b> and see your changes in the future maps update.
‣ If navigation or search doesn't work, please check it on osm.org first, and then email us. We reply to <i>EVERY</i> email, and we'll fix it ASAP!
<b>Your feedback and 5-star reviews are the best motivators for us!</b>
Key features:
• Free, open-source, no ads, no tracking
• Detailed offline maps with places that don't exist on Google maps, thanks to the <b>OpenStreetMap</b> community
• Cycling routes, hiking trails, and walking paths
• Contour lines, elevation profiles, peaks, and slopes
• Turn-by-turn walking, cycling, and car navigation with voice guidance and Android Auto
• Fast offline search
• Bookmarks and tracks export and import in KML, KMZ, GPX formats
• Dark mode to protect your eyes
There is no public transport, satellite maps, and other cool features <i>yet</i> in Organic Maps. But with <i>your help and support</i>, we can make better maps step by step.
Organic Maps is <b>pure and organic, made with love</b>:
• Blazing fast offline experience
• Respects your privacy
• Saves your battery
• No unexpected mobile data charges
• Simple to use, with only most important features included
Free from trackers and other bad stuff:
• No ads
• No tracking
• No data collection
• No phoning home
• No annoying registration
• No mandatory tutorials
• No noisy email spam
• No push notifications
• No crapware
• N̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purely organic
At Organic Maps, we believe that <b>privacy is a fundamental human right</b>:
• Organic Maps is an indie community-driven open-source project
• We protect privacy from Big Tech's prying eyes
• Stay safe no matter wherever you are
Zero trackers and only minimally required permissions are found according to Exodus Privacy Report.
Please visit <b><i>organicmaps.app</i></b> website for additional details and FAQ, and contact us directly at @OrganicMapsApp in Telegram.
Reject surveillance - embrace your freedom.
<b>Give Organic Maps a try!</b>

View File

@@ -1,8 +0,0 @@
• New OpenStreetMap data as of February 27
• Ability to manually arrange intermediate route points
• Share a single selected track from the list
• Improved routing for bicycles
• Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -1 +1 @@
Open-source, community-driven maps for travelers, tourists, cyclists & hikers
Nem kortnavigation - Oplev mere af din rejse - Drevet af fællesskabet

View File

@@ -1 +0,0 @@
Offline Organic Maps Hike Bike

View File

@@ -1 +1 @@
Organic Maps Offline Hike, Bike, GPS Navigation
CoMaps - vandr, cykl og kør offline med privatliv

View File

@@ -1 +0,0 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,53 +1,32 @@
‣ Unsere kostenlose App trackt niemanden, enthält keine Werbung und braucht deine Unterstützung.
‣ Sie wird ständig von Mitwirkenden und unserem kleinen Team verbessert, in unserer Freizeit.
‣ Wenn etwas auf der Karte falsch ist oder fehlt, dann korrigiere es bitte in <b>OpenStreetMap</b> und sieh deine Änderungen in der zukünftigen Kartenaktualisierung.
‣ Sollte die Navigation oder die Suche nicht funktionieren, sende uns bitte eine E-Mail. Wir antworten auf <i>JEDE</i> E-Mail und werden das Problem so schnell wie möglich beheben!
Eine von der Community betriebene, kostenlose Open-Source Karten-App, die auf OpenStreetMap Daten basiert. Transparent und nicht gewinnorientiert. CoMaps ist ein Fork/Abspaltung von Organic Maps, die wiederum ein Fork/Abspaltung von Maps.Me ist.
<b>Dein Feedback und deine 5-Sterne-Bewertungen sind die beste Motivation für uns!</b>
Lese mehr über die Gründe und Ziele des Projektes unter <b><i>codeberg.org/comaps</i></b>.
Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
• Nutze die App und erzähle anderen davon
• Gib Feedback und melde Probleme
• Aktualisiere Kartendaten in der App oder auf der OpenStreetMap-Webseite
Wichtigste Funktionen:
‣ <b>Einfach und ausgereift</b>: Essenzielle, leicht zu bedienende Funktionen, die einfach funktionieren.
‣ <b>Offline-orientiert</b>: Plane und navigiere im Ausland ohne Mobilfunkverbindung, finde Wegpunkte auf abgelegenen Wanderungen usw. Alle Funktionen sind für den Offline-Einsatz konzipiert.
‣ <b>Datenschutzfreundlich</b>: Die App wurde mit Fokus auf Privatsphäre entwickelt keine Personenidentifikation, kein Tracking, keine Erfassung persönlicher Daten, keine Werbung.
‣ <b>Spart Akku und Speicherplatz</b>: Verbraucht nicht unnötig Akku wie andere Navi-Apps. Kompakte Karten sparen Speicherplatz auf deinem Gerät.
‣ <b>Kostenlos und von der Community entwickelt</b>: Menschen wie du haben geholfen, diese App zu entwickeln durch das Hinzufügen von Orten zu OpenStreetMap, Testen von neuen Funktionen, Softwareentwicklung oder Spenden.
‣ <b>Offen und transparent bei Entscheidungen und Finanzen, gemeinnützig und vollständig Open-Source</b>
• Kostenlos, Open-Source, keine Werbung, kein Tracking
• Detaillierte Offline-Karten mit Orten, die es auf anderen Karten nicht gibt, dank an die <b>OpenStreetMap</b> Community
Rad-, Wander- und Spazierwege
Höhenlinien, Höhenprofile, Bergspitzen und Steigungen
Schritt-für-Schritt-Navigation für Fußgänger, Radfahrer und Autos mit Sprachführung
• Schnelle Offlinesuche
Export und Import von Lesezeichen im KML, KMZ, GPX-Format
Dunkler Modus zum Schutz deiner Augen
<b>Hauptfunktionen</b>:
• Detaillierte, herunterladbare Karten mit Orten, die bei Google Maps oft fehlen
Outdoor-Modus mit hervorgehobenen Wanderwegen, Campingplätzen, Wasserquellen, Gipfeln, Höhenlinien usw.
Geh- und Radwege
Orte wie Restaurants, Tankstellen, Hotels, Geschäfte, Sehenswürdigkeiten und viele mehr
• Suche nach Namen, Adressen oder Kategorien
Sprachausgabe bei der Navigation zu Fuß, Rad oder Auto
Lesezeichen mit einem einzigen Tippen speichern
• Offline verfügbare Wikipedia-Artikel
• U- und S-Bahn-Netze
• Aufzeichnen von GPS-Tracks
• Import und Export von Favoriten und Routen im KML-, KMZ- oder GPX-Format
• Dunkler Modus für die Nutzung bei Nacht
• Kartenbearbeitung direkt in der App mit einem einfachen Editor
Öffentlichen Verkehrsmittel, Satellitenbildkarten und viele weitere wichtige Merkmale werden <i>noch</i> nicht unterstützt. Aber mit <i>deiner Hilfe und Unterstützung</i> können wir diese Welt und unsere Karten Schritt für Schritt besser machen.
Organic Maps ist <b>rein, organisch und mit Liebe gemacht</b>:
• Rasend schnelle Offline-Erfahrung
• Respektiert deine Privatsphäre
• Schont deinen Akku
• Keine unerwarteten Gebühren für mobile Daten
• Einfach zu bedienen, nur die wichtigsten Funktionen integriert
Frei von Trackern und schlechten Dingen:
• Keine Werbung
• Kein Tracking
• Keine Datenerfassung
• Kein Telefonieren nach Hause
• Keine lästige Registrierung
• Keine obligatorischen Tutorials
• Kein lästiger E-Mail-Spam
• Keine Push-Benachrichtigungen
• Keine Crapware
• -K̶e̶i̶n̶e̶ ̶P̶e̶s̶t̶i̶z̶i̶d̶e̶ Rein organisch
Wir bei Organic Maps glauben, dass <b>Privatsphäre ein grundlegendes Menschenrecht</b> ist:
• Organic Maps ist ein von einer unabhängigen Gemeinschaft betriebenes Open-Source-Projekt
• Wir schützen deine Privatsphäre vor den neugierigen Augen der großen Technologiekonzerne
• Bleib sicher, egal wo du bist
Keine Tracker und nur minimal erforderliche Berechtigungen sind laut dem Exodus-Datenschutzbericht vorhanden.
Bitte besuche <b><i>organicmaps.app</i></b> Webseite für weitere Details und ein FAQ. Oder kontaktiere uns direkt unter @OrganicMapsApp in Telegram.
Lehne Überwachung ab - lebe deine Freiheit.
<b>Teste Organic Maps!</b>
<b>Entdecke die Unabhängigkeit</b>
Entdecke deine Reise navigiere in der Welt mit Datenschutz!

View File

@@ -1,8 +1,9 @@
• Neue OpenStreetMap-Daten vom 27. Februar
Möglichkeit, Zwischenroutenpunkte manuell zu arrangieren
Einen einzelnen ausgewählten Track aus der Liste teilen
Verbesserte Routenführung für Fahrräder
Beim Herunterladen von Karten eine Systembenachrichtigung anzeigen und Hintergrunddownloads nicht unterbrechen
Ein blinkendes Trackaufzeichnungs-Widget hinzugefügt
…weitere Details unter omaps.org/news
Wir stellen vor: Das neue CoMaps-Logo!
Verbesserte Höhenlinien in vielen Regionen (Stufen von 20/50 m)
Links zu Panoramax-Bildern für ausgewählte POIs
OpenStreetMap-Daten vom 13. Juli
Neue Farben für viele Objekte und Farben werden früher angezeigt
Öffnungszeiten werden beim Antippen eines POI angezeigt
• Verschiedene Arten von Feuchtgebieten
• Neue Farben für Vegetation und andere Features; einige neue Icons
• Wandern: bessere Darstellung der Höhenlinien

View File

@@ -1 +1 @@
Navigieren mit Datenschutz - Community-gesteuert & Open-Source
Einfache Navigation - Entdecken Sie mehr von Ihrer Reise - Community-Entwickelt

View File

@@ -1 +0,0 @@
Organic Maps Offline Karten

Some files were not shown because too many files have changed in this diff Show More