Compare commits

..

53 Commits

Author SHA1 Message Date
zyphlar
d0106905c1 lower thread count for less OOM
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-03 19:39:53 -08:00
zyphlar
982009f3c0 add zulip bot, remove commented-out depdencencies
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-03 13:14:09 -08:00
zyphlar
eb1bda4d1b create force reclone option
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-03 10:53:44 -08:00
Konstantin Pastbin
bc10ca3b8c [generator] Fix SUBWAY_URL location
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-03 10:40:50 -08:00
zyphlar
b28c0cae65 comments, cleanup
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-03 10:40:50 -08:00
zyphlar
410b027bf8 python path fixes
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-03 10:40:50 -08:00
zyphlar
edaef67283 add geo dependency, bump docker
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-03 10:40:50 -08:00
zyphlar
8a1855add6 specify docker image version
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-03 10:40:50 -08:00
zyphlar
6049ab28cf Use 64 threads for the Features stage (pastk)
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-03 10:40:50 -08:00
zyphlar
a6ed71553a provide python dev to subways script
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-03 10:40:50 -08:00
zyphlar
c11b1558aa clean up remaining old paths
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 15:57:53 -08:00
zyphlar
d317286024 hardcode a different, easier wikipedia descriptions path
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
a58f1674dc draft of removing old map versions from CDNs
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
8c2adfd984 quadruple Taiwan_North threadcount
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
40e74d032b go back to old script, fix wildcard in find
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
e07413eda5 use new rclone script
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
19da703a24 remove syntax error in docker script
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
7aee6ab160 Set mapgen timeout to 28 days later
Signed-off-by: zyphlar <zyphlar@noreply.codeberg.org>
2025-11-02 11:45:16 -08:00
zyphlar
156fc52831 fix shopt error
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
88638feba1 pathing
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
1d39c726c2 debug
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
056f1cf75a Change Docker to debian due to ubuntu outage; migrate map-generator paths, images. Consolidate dependencies.
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
af2e923783 sort and add all dependencies
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
af5cf0cc4b Homogenize symlinked maps_build and osm-maps path
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:16 -08:00
zyphlar
e6d3e75ed4 Change organicmaps path to comaps-init so relative paths don't suck so bad
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
0c8cbdc3de Fix pathing issue with CI/CD
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
29e487ac47 Handle not-yet-generated drules files; install protobuf for map generation
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
d55f04be89 Add message to planet o5m
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
14868e1eae Pull full paths from git
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
b4314a0587 Go back to sane path fix for subways; pull latest repos as needed
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
fef0872ca4 Fix tiger and subway scripts
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
36a8425b06 debug runner issue
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
378f144761 Debugging subways and wiki download
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
362dae7925 fix subway csv path, tiger python
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
2391e1c4e3 fix osm planet o5m task
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:15 -08:00
zyphlar
3c0b6ae782 Fix generator ci bugs, uploading
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:45:14 -08:00
Yannik Bloscheck
d85922f775 [styles] Recircle icons
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-02 11:45:14 -08:00
Yannik Bloscheck
bbd69ced6c [styles] Recategorize icons
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-02 11:45:12 -08:00
zyphlar
31b60be3e8 Docker fixes 2025-11-02 11:44:41 -08:00
zyphlar
03adb37007 Settings change
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:44:41 -08:00
Konstantin Pastbin
d153579a2b [generator] Skip World map download and symbols regen
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:44:41 -08:00
Konstantin Pastbin
d1eb1582ad [generator] Update conf path
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:44:41 -08:00
zyphlar
5bf59d3f53 Update generator scripts for docker/prod
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:44:41 -08:00
zyphlar
d6fcaaa7ec Add docker run script
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:44:41 -08:00
Konstantin Pastbin
1f7a93ff77 Increase Features threads from 12 to 16
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-02 11:44:41 -08:00
zyphlar
80ec3057ef Update tools/unix/docker_maps_generator.sh
Signed-off-by: zyphlar <zyphlar@noreply.codeberg.org>
2025-11-02 11:44:41 -08:00
zyphlar
f579e7ed94 Tweaks, get subway hooks proper
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:44:41 -08:00
Konstantin Pastbin
957fcbf6bf Update subways path
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-02 11:44:41 -08:00
Konstantin Pastbin
c58c3c01dd Update INI
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-02 11:44:41 -08:00
zyphlar
115a05a57a Fix s3 variables
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:44:41 -08:00
zyphlar
80c0932231 Map generation mostly working, but slow and not doing full planet with add-ins yet
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:44:41 -08:00
zyphlar
144b27adde On-server tweaks
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:44:41 -08:00
zyphlar
18075e7c8f Add files to automatically generate maps with Docker
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-02 11:44:40 -08:00
125 changed files with 3997 additions and 3710 deletions

View File

@@ -9,6 +9,7 @@ on:
type: choice
options:
- all
- clone-repos
- copy-coasts
- planet
- wiki
@@ -16,30 +17,95 @@ on:
- subways
- tiger
- maps
- upload
reclone:
description: 'Force a re-clone of all git repos?'
required: false
default: 'no'
type: choice
options:
- 'no'
- force
## RCLONE_CONF is multi-line text containing keys and credentials for us2,ru1,fi1,de1 servers
env:
RCLONE_CONF: ${{ secrets.RCLONE_CONF }}
WIKIMEDIA_USERNAME: ${{ secrets.WIKIMEDIA_USERNAME }}
WIKIMEDIA_PASSWORD: ${{ secrets.WIKIMEDIA_PASSWORD }}
S3_KEY_ID: ${{ secrets.S3_KEY_ID }}
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }}
S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
SFTP_USER: ${{ secrets.SFTP_USER }}
SFTP_PASSWORD: ${{ secrets.SFTP_PASSWORD }}
SFTP_HOST: ${{ secrets.SFTP_HOST }}
SFTP_PATH: ${{ secrets.SFTP_PATH }}
ZULIP_BOT_EMAIL: ${{ secrets.ZULIP_BOT_EMAIL }}
ZULIP_API_KEY: ${{ secrets.ZULIP_API_KEY }}
DEBIAN_FRONTEND: noninteractive
TZ: Etc/UTC
jobs:
clone-repos:
if: inputs.jobs == 'clone-repos' || inputs.jobs == 'all'
name: Clone Git Repos
runs-on: mapfilemaker
container:
image: codeberg.org/comaps/maps_generator:96d2a38aa23d
volumes:
- /mnt/4tbexternal:/mnt/4tbexternal
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Clone or update main repo if necessary
shell: bash
run: |
ls -al /mnt
ls -al /mnt/4tbexternal
if [[ '${{ inputs.reclone }}' == 'force' ]]; then
rm -rf /mnt/4tbexternal/comaps-init
fi
if [ ! -d /mnt/4tbexternal/comaps-init ]; then
cd /mnt/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251027 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
else
cd /mnt/4tbexternal/comaps-init && git pull origin rebase-generator-pastk-wb251027
fi
- name: Clone or update wikiparser repo if necessary
shell: bash
run: |
if [[ '${{ inputs.reclone }}' == 'force' ]]; then
rm -rf /mnt/4tbexternal/wikiparser
fi
if [ ! -d /mnt/4tbexternal/wikiparser ]; then
cd /mnt/4tbexternal
git clone https://codeberg.org/comaps/wikiparser.git
else
cd /mnt/4tbexternal/wikiparser && git pull origin main
fi
- name: Clone or update subways repo if necessary
shell: bash
run: |
if [[ '${{ inputs.reclone }}' == 'force' ]]; then
rm -rf /mnt/4tbexternal/subways
fi
if [ ! -d /mnt/4tbexternal/subways ]; then
cd /mnt/4tbexternal
git clone https://codeberg.org/comaps/subways.git
else
cd /mnt/4tbexternal/subways && git pull origin master
fi
copy-coasts:
if: inputs.jobs == 'copy-coasts' || inputs.jobs == 'all'
name: Copy Previously Generated Coasts
runs-on: mapfilemaker
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:96d2a38aa23d
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/comaps-init:/root/OM/comaps-init
- /mnt/4tbexternal/wikiparser:/root/OM/wikiparser
- /mnt/4tbexternal/osm-planet:/home/planet
- /mnt/4tbexternal/osm-maps:/root/OM/osm-maps
- /mnt/4tbexternal/subways:/root/OM/subways
- /mnt/4tbexternal/omim-build-relwithdebinfo:/root/OM/omim-build-relwithdebinfo
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
@@ -47,9 +113,9 @@ jobs:
- name: Copy Coasts
shell: bash
run: |
if [ -f /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom ]; then
cp /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom /media/4tbexternal/osm-planet/latest_coasts.geom
cp /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.rawgeom /media/4tbexternal/osm-planet/latest_coasts.rawgeom
if [ -f /root/OM/osm-maps/*/intermediate_data/WorldCoasts.geom ]; then
cp /root/OM/osm-maps/*/intermediate_data/WorldCoasts.geom /home/planet/latest_coasts.geom
cp /root/OM/osm-maps/*/intermediate_data/WorldCoasts.rawgeom /home/planet/latest_coasts.rawgeom
fi
update-planet:
@@ -57,86 +123,93 @@ jobs:
name: Update Planet
runs-on: mapfilemaker
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:96d2a38aa23d
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/comaps-init:/root/OM/comaps-init
- /mnt/4tbexternal/wikiparser:/root/OM/wikiparser
- /mnt/4tbexternal/osm-planet:/home/planet
- /mnt/4tbexternal/osm-maps:/root/OM/osm-maps
- /mnt/4tbexternal/subways:/root/OM/subways
- /mnt/4tbexternal/omim-build-relwithdebinfo:/root/OM/omim-build-relwithdebinfo
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -y
apt-get install -y pyosmium osmium-tool python3-venv python3-pip wget2
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
pip3 install "protobuf<4"
- name: Download Planet File if Absent
shell: bash
run: |
if [ ! -d /media/4tbexternal/osm-planet/planet/ ]; then
mkdir -p /media/4tbexternal/osm-planet/planet/
if [ ! -d /home/planet/planet/ ]; then
mkdir -p /home/planet/planet/
fi
if [ ! -f /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf ]; then
cd /media/4tbexternal/osm-planet/planet/
wget2 --verbose --progress=bar --continue --debug https://ftpmirror.your.org/pub/openstreetmap/pbf/planet-latest.osm.pbf
if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
cd /home/planet/planet/
wget2 --verbose --progress=bar --continue https://ftpmirror.your.org/pub/openstreetmap/pbf/planet-latest.osm.pbf
fi
- name: Update Planet
shell: bash
run: |
cd /media/4tbexternal/osm-planet/planet/
cd /home/planet/planet/
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -vv --size 16384
mv planet-latest-new.osm.pbf planet-latest.osm.pbf
- name: Converting planet-latest.osm.pbf to planet.o5m
run: /root/OM/osmctools/osmconvert planet-latest.osm.pbf -o=planet.o5m
run: |
echo "Starting..."
cd /home/planet/planet/
osmconvert planet-latest.osm.pbf -o=planet.o5m
echo "Done."
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Planet update is done!'
wiki-update:
if: inputs.jobs == 'wiki' || inputs.jobs == 'all'
name: Update Wikipedia
runs-on: mapfilemaker
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:96d2a38aa23d
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/comaps-init:/root/OM/comaps-init
- /mnt/4tbexternal/wikiparser:/root/OM/wikiparser
- /mnt/4tbexternal/osm-planet:/home/planet
- /mnt/4tbexternal/osm-maps:/root/OM/osm-maps
- /mnt/4tbexternal/subways:/root/OM/subways
- /mnt/4tbexternal/omim-build-relwithdebinfo:/root/OM/omim-build-relwithdebinfo
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -y
apt-get install -y jq curl wget2 rustc cargo git ca-certificates
- name: Clone wikiparser if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/wikiparser ]; then
cd /media/4tbexternal
git clone https://codeberg.org/comaps/wikiparser.git
fi
- name: Check for planet file
shell: bash
run: |
if [ ! -f /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf ]; then
echo "ERROR: No file at /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf"
ls -al /media/4tbexternal/
ls -al /media/4tbexternal/osm-planet/
ls -al /media/4tbexternal/osm-planet/planet/
if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
echo "ERROR: No file at /home/planet/planet/planet-latest.osm.pbf"
ls -al /home/planet/
ls -al /home/planet/planet/
exit 1
fi
- name: Update Wikipedia from Enterprise API
shell: bash
run: |
mkdir -p /media/4tbexternal/osm-planet/wikipedia/dumps
mkdir -p /media/4tbexternal/osm-planet/wikipedia/build
cd /media/4tbexternal/wikiparser
#todo: curl in download.sh can fail when rate limited and even save error messages to the output. need to validate.
#downloading all languages can also trigger rate limits or fail as well. needs work.
#also: a failure to download means a failure to build, and could result in no wiki descriptions etc.
#also-also: do we want to remove old wiki data in planet between builds?
mkdir -p /home/planet/wikipedia/dumps
mkdir -p /home/planet/wikipedia/build
cd /root/OM/wikiparser
ls -al
echo "Downloading ..."
./download.sh /media/4tbexternal/osm-planet/wikipedia/dumps
./download.sh /home/planet/wikipedia/dumps
ls -al /home/planet/wikipedia/dumps/*
echo "Running ..."
./run.sh /media/4tbexternal/osm-planet/wikipedia/build \
/media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf \
/media/4tbexternal/osm-planet/wikipedia/dumps/latest/*.tar.gz
./run.sh /home/planet/wikipedia/build \
/home/planet/planet/planet-latest.osm.pbf \
/home/planet/wikipedia/dumps/latest/*.tar.gz
echo "DONE"
update-isolines:
@@ -144,74 +217,34 @@ jobs:
name: Update Isolines
runs-on: mapfilemaker
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:96d2a38aa23d
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/comaps-init:/root/OM/comaps-init
- /mnt/4tbexternal/wikiparser:/root/OM/wikiparser
- /mnt/4tbexternal/osm-planet:/home/planet
- /mnt/4tbexternal/osm-maps:/root/OM/osm-maps
- /mnt/4tbexternal/subways:/root/OM/subways
- /mnt/4tbexternal/omim-build-relwithdebinfo:/root/OM/omim-build-relwithdebinfo
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -qq \
&& apt-get install -y --no-install-recommends \
curl \
osmctools \
rclone \
git \
ca-certificates \
openssh-client \
sshpass \
vim \
wget \
build-essential \
clang \
cmake \
python3 \
python3-pip \
python3.12-venv \
qt6-base-dev \
qt6-positioning-dev \
libc++-dev \
libfreetype-dev \
libglvnd-dev \
libgl1-mesa-dev \
libharfbuzz-dev \
libicu-dev \
libqt6svg6-dev \
libqt6positioning6-plugins \
libqt6positioning6 \
libsqlite3-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
zlib1g-dev
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
pip3 install "protobuf<4"
- name: Clone main repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
apt-get update -qq && apt-get install -y --no-install-recommends git
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
# TODO: we only need to update these if our SRTM or countries change
# TODO: after update, verify that sizable files exist: /home/planet/isolines/*.isolines
- name: Update Isolines
shell: bash
run: |
cd /media/4tbexternal/comaps-init/
cd /root/OM/comaps-init/
./tools/unix/build_omim.sh -R topography_generator_tool
rm -rf ../osm-planet/isolines/
mkdir ../osm-planet/isolines/
rm -rf /home/planet/isolines/
mkdir /home/planet/isolines/
../omim-build-relwithdebinfo/topography_generator_tool \
--profiles_path=./data/conf/isolines/isolines-profiles.json \
--countries_to_generate_path=./data/conf/isolines/countries-to-generate.json \
--tiles_isolines_out_dir=../osm-planet/isolines/tmp-tiles/ \
--countries_isolines_out_dir=../osm-planet/isolines/ \
--tiles_isolines_out_dir=/home/planet/isolines/tmp-tiles/ \
--countries_isolines_out_dir=/home/planet/isolines/ \
--data_dir=./data/ \
--srtm_path=../osm-planet/SRTM-patched-europe/ \
--srtm_path=/home/planet/SRTM-patched-europe/ \
--threads=22
update-subways:
@@ -219,37 +252,22 @@ jobs:
name: Update Subways
runs-on: mapfilemaker
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:96d2a38aa23d
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/comaps-init:/root/OM/comaps-init
- /mnt/4tbexternal/wikiparser:/root/OM/wikiparser
- /mnt/4tbexternal/osm-planet:/home/planet
- /mnt/4tbexternal/osm-maps:/root/OM/osm-maps
- /mnt/4tbexternal/subways:/root/OM/subways
- /mnt/4tbexternal/omim-build-relwithdebinfo:/root/OM/omim-build-relwithdebinfo
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -qq && apt-get install -y --no-install-recommends curl osmctools osmium-tool python3-venv ca-certificates git python3-pip
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
pip3 install "protobuf<4"
- name: Clone subways if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/subways ]; then
cd /media/4tbexternal
git clone https://codeberg.org/comaps/subways.git
fi
- name: Clone main repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
- name: Update Subways
shell: bash
run: |
cd /media/4tbexternal/comaps-init/
cd /root/OM/comaps-init/
cp tools/unix/maps/settings.sh.prod tools/unix/maps/settings.sh
./tools/unix/maps/generate_subways.sh
@@ -258,125 +276,127 @@ jobs:
name: Update TIGER
runs-on: mapfilemaker
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:96d2a38aa23d
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/comaps-init:/root/OM/comaps-init
- /mnt/4tbexternal/wikiparser:/root/OM/wikiparser
- /mnt/4tbexternal/osm-planet:/home/planet
- /mnt/4tbexternal/osm-maps:/root/OM/osm-maps
- /mnt/4tbexternal/subways:/root/OM/subways
- /mnt/4tbexternal/omim-build-relwithdebinfo:/root/OM/omim-build-relwithdebinfo
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -qq && apt-get install -y --no-install-recommends \
build-essential \
clang \
cmake \
ninja-build \
ca-certificates \
git \
wget2
- name: Clone main repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
- name: Build address_parser
shell: bash
run: |
cd /media/4tbexternal/comaps-init
cd /root/OM/comaps-init
rm -rf ../omim-build-relwithdebinfo/CMakeCache.txt
rm -rf ../omim-build-relwithdebinfo/CMakeFiles
./tools/unix/build_omim.sh -R address_parser_tool
- name: Update TIGER from Nominatim
shell: bash
run: |
cd /media/4tbexternal/osm-planet/
# TODO: maybe remove old osm-planet/tiger first?
cd /home/planet/
mkdir -p tiger
wget2 https://nominatim.org/data/tiger-nominatim-preprocessed-latest.csv.tar.gz
tar -xOzf tiger-nominatim-preprocessed-latest.csv.tar.gz | /media/4tbexternal/omim-build-relwithdebinfo/address_parser_tool --output_path=./tiger
cd /root/OM/comaps-init
tar -xOzf /home/planet/tiger-nominatim-preprocessed-latest.csv.tar.gz | /root/OM/omim-build-relwithdebinfo/address_parser_tool --output_path=/home/planet/tiger
generate-maps:
if: inputs.jobs == 'maps' || inputs.jobs == 'all'
name: Generate Maps
runs-on: mapfilemaker
timeout-minutes: 40320
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:96d2a38aa23d
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/comaps-init:/root/OM/comaps-init
- /mnt/4tbexternal/wikiparser:/root/OM/wikiparser
- /mnt/4tbexternal/osm-planet:/home/planet
- /mnt/4tbexternal/osm-maps:/root/OM/osm-maps
- /mnt/4tbexternal/subways:/root/OM/subways
- /mnt/4tbexternal/omim-build-relwithdebinfo:/root/OM/omim-build-relwithdebinfo
options: --ulimit nofile=262144:262144
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -qq \
&& apt-get install -y --no-install-recommends \
curl \
osmctools \
rclone \
git \
ca-certificates \
openssh-client \
sshpass \
vim \
wget \
build-essential \
clang \
cmake \
ninja-build \
python3 \
python3-pip \
python3.12-venv \
qt6-base-dev \
qt6-positioning-dev \
libc++-dev \
libfreetype-dev \
libglvnd-dev \
libgl1-mesa-dev \
libharfbuzz-dev \
libicu-dev \
libqt6svg6-dev \
libqt6positioning6-plugins \
libqt6positioning6 \
libsqlite3-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
zlib1g-dev
- name: Clone repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
- name: Make output folders if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/osm-maps ]; then
mkdir -p /media/4tbexternal/osm-maps
if [ ! -d /root/OM/osm-maps ]; then
mkdir -p /root/OM/osm-maps
fi
- name: Get SRTM if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/osm-planet/SRTM-patched-europe/ ]; then
if [ ! -d /home/planet/SRTM-patched-europe/ ]; then
echo "ERROR: NO SRTM"
exit 1
fi
- name: Symlink paths for repo scripts
shell: bash
run: |
mkdir -p /root/OM
ln -s /media/4tbexternal/comaps-init /root/OM/organicmaps
ln -s /media/4tbexternal/osm-planet /home/planet
ln -s /media/4tbexternal/osm-maps /root/OM/maps_build
- name: Run docker_maps_generator.sh
shell: bash
run: |
cd /root/OM/organicmaps
./tools/unix/docker_maps_generator.sh
cd /root/OM/comaps-init
./tools/unix/docker_maps_generator.sh
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Generator is done!'
upload-maps:
if: inputs.jobs == 'upload' || inputs.jobs == 'all'
name: Upload Maps
runs-on: mapfilemaker
container:
image: codeberg.org/comaps/maps_generator:96d2a38aa23d
volumes:
- /mnt/4tbexternal/comaps-init:/root/OM/comaps-init
- /mnt/4tbexternal/wikiparser:/root/OM/wikiparser
- /mnt/4tbexternal/osm-planet:/home/planet
- /mnt/4tbexternal/osm-maps:/root/OM/osm-maps
- /mnt/4tbexternal/subways:/root/OM/subways
- /mnt/4tbexternal/omim-build-relwithdebinfo:/root/OM/omim-build-relwithdebinfo
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Write config file
run: |
mkdir -p ~/.config/rclone/
echo "${{ secrets.RCLONE_CONF }}" > ~/.config/rclone/rclone.conf
head -n3 ~/.config/rclone/rclone.conf
- name: Upload map files to CDNs
shell: bash
run: |
shopt -s nullglob
buildfolder=$(find /root/OM/osm-maps/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f5)
builddate=$(find /root/OM/osm-maps/*/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f6)
mwmfiles=( /root/OM/osm-maps/$buildfolder/$builddate/*.mwm )
if (( ${#mwmfiles[@]} )); then
echo "<$(date +%T)> Uploading maps from $buildfolder/$builddate..."
cd /root/OM/comaps-init/tools/unix/maps
./upload_to_cdn.sh /root/OM/osm-maps/$buildfolder/$builddate
else
echo "<$(date +%T)> No MWM files in /root/OM/osm-maps/$buildfolder/$builddate/*.mwm, not uploading maps."
echo "<$(date +%T)> Found top level: $(ls -alt /root/OM/osm-maps/*)"
echo "<$(date +%T)> Found second level: $(ls -alt /root/OM/osm-maps/$buildfolder/*)"
fi
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Upload is done!'

1
.gitignore vendored
View File

@@ -9,6 +9,7 @@ Makefile.Release
object_script.*.Debug
object_script.*.Release
compile_commands.json
*.local.*
stxxl.errlog
stxxl.log

View File

@@ -1,8 +1,8 @@
• OpenStreetMap-Daten vom 4. November
• OpenStreetMap-Daten vom 28. Oktober
• Aktualisierte Karten-Icons, inkl. Farben für Unterhaltungs-, Sport- & andere Unternehmen
• Informationen zu Steckdosen an EV-Ladestationen
• Symbole für Sportzentren, Veranstaltungsorte, Massagesalons, Gästehäuser und einige stillgelegte Unternehmen
• Verbesserungen bei der Suche
• Behebung eines Absturzes bei der Suche
• Verbesserte Sprachführung während der Navigation
• Verbesserte Sprachführung während der Navigation (via OM)
Weitere Änderungen finden in unseren Codeberg-Versionshinweisen!

View File

@@ -1,8 +1,7 @@
• OpenStreetMap data as of November 4
• Recategorized map icons including some new colors for entertainment, sports and other businesses
• Display info about available sockets on charging stations
• Added bandstands, backless benches and loungers
New icons for different sport centres, event venues, massage salons, guest houses and some disused businesses
Multiple search improvements and crash fix
• Improved voice guidance during navigation
• Added icons for different sport centres, event venues, massage salons, guest houses and some disused businesses
Multiple search improvements
Fixed crash in search
• Improved voice guidance during navigation (via OM project)
Check our Codeberg release notes for more changes!

View File

@@ -1,7 +1,7 @@
• Datos OSM del 04/11
• Datos OSM del 28/10
• Iconos del mapa recategorizados, incluyendo nuevos colores
• Visualización de información sobre enchufes disponibles en estaciones de recarga
• Adición de iconos para diferentes centros deportivos, lugares de eventos, salones de masajes, posadas y algunos establecimientos comerciales desactivados
• Varias mejoras y correcciones de errores en la búsqueda
• Mejora en la orientación por voz durante la navegación
• Mejora en la orientación por voz durante la navegación (via OM)
Más detalles en Codeberg

View File

@@ -1,8 +1,8 @@
• Données OpenStreetMap au 4 novembre
• Données OpenStreetMap du 28 octobre
• Recatégorisation des icônes sur la carte avec ajout de nouvelles couleurs pour certains types de lieux
• Affichage des prises sur les bornes électriques
• Ajout d'icônes pour les centres sportifs, salles d'événements, salon de massage et autres lieux
• Multiple améliorations dans la recherche
• Correction d'un plantage dans la recherche
• Amélioration de la synthèse vocale durant la navigation
• Amélioration de la synthèse vocale durant la navigation (via le projet OM)
Plus d'informations sur notre Codeberg

View File

@@ -1,7 +1,7 @@
• Dados OSM de 04/11
• Dados OSM de 28/10
• Ícones do mapa recategorizados, incluindo novas cores
• Exibição de informações sobre tomadas disponíveis em eletropostos
• Adição de ícones para diferentes centros esportivos, locais de eventos, salões de massagem, pousadas e alguns estabelecimentos comerciais desativados
• Diversas melhorias e correção de erro na busca
• Melhoria na orientação por voz durante a navegação
• Melhoria na orientação por voz durante a navegação (via projeto OM)
Confira nossas notas de lançamento no Codeberg para mais detalhes!

View File

@@ -1,8 +0,0 @@
• Карты OpenStreetMap от 4 ноября
• Обновлены цвета иконок на карте, добавлены новые цвета для развлечений, спорта, некоторых бизнесов
На зарядных станциях показываются имеющиеся типы разъёмов
• Добавлены эстрады, скамейки без спинок и лежаки
• Новые иконки для разных спорт центров, массажных салонов, гостевых домов, некоторых закрытых бизнесов
• Несколько улучшений и исправлений в поиске
• Улучшены голосовые подсказки при навигации
Подробнее смотрите на codeberg.org/comaps/comaps/releases

View File

@@ -1,13 +1,11 @@
package app.organicmaps.background;
import android.content.Context;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.work.Constraints;
import androidx.work.ExistingWorkPolicy;
import androidx.work.NetworkType;
import androidx.work.OneTimeWorkRequest;
import androidx.work.OutOfQuotaPolicy;
import androidx.work.WorkManager;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
@@ -37,11 +35,7 @@ public class OsmUploadWork extends Worker
if (Editor.nativeHasSomethingToUpload() && OsmOAuth.isAuthorized())
{
final Constraints c = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
OneTimeWorkRequest.Builder builder = new OneTimeWorkRequest.Builder(OsmUploadWork.class).setConstraints(c);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
builder.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST);
}
final OneTimeWorkRequest wr = builder.build();
final OneTimeWorkRequest wr = new OneTimeWorkRequest.Builder(OsmUploadWork.class).setConstraints(c).build();
WorkManager.getInstance(context).beginUniqueWork("UploadOsmChanges", ExistingWorkPolicy.KEEP, wr).enqueue();
}
}

View File

@@ -27,7 +27,6 @@
<string name="type.amenity.bench">Sitzbank</string>
<string name="type.amenity.bench.backless">Sitzbank ohne Rückenlehne</string>
<string name="type.amenity.bicycle_parking">Fahrradständer</string>
<string name="type.amenity.boat_rental">Bootsverleih</string>
<string name="type.amenity.bicycle_rental">Fahrradverleih</string>
<string name="type.amenity.bicycle_repair_station">Fahrrad-Reparaturstation</string>
<string name="type.amenity.brothel">Bordell</string>

View File

@@ -30,7 +30,6 @@
<string name="type.amenity.bench.backless">Backless Bench</string>
<string name="type.amenity.bicycle_parking">Bicycle Parking</string>
<string name="type.amenity.bicycle_parking.covered">Covered Bicycle Parking</string>
<string name="type.amenity.boat_rental">Boat Rental</string>
<string name="type.amenity.bicycle_rental">Bicycle Rental</string>
<string name="type.amenity.bicycle_repair_station">Bicycle Repair Station</string>
<string name="type.amenity.biergarten">Biergarten</string>
@@ -93,7 +92,6 @@
<string name="type.amenity.loading_dock">Loading Dock</string>
<string name="type.amenity.lounger">Lounger</string>
<string name="type.amenity.luggage_locker">Luggage Locker</string>
<string name="type.amenity.mobile_money_agent">Mobile Money Agent</string>
<string name="type.amenity.marketplace">Marketplace</string>
<string name="type.amenity.motorcycle_parking">Motorcycle Parking</string>
<string name="type.amenity.nightclub">Nightclub</string>
@@ -123,7 +121,6 @@
<string name="type.amenity.parking_space.private">Parking Space</string>
<string name="type.amenity.parking_space.underground">Parking Space</string>
<string name="type.amenity.parking_space.disabled">Disabled Parking Space</string>
<string name="type.amenity.payment_centre">Payment Centre</string>
<string name="type.amenity.payment_terminal">Payment Terminal</string>
<string name="type.amenity.pharmacy">Pharmacy</string>
<string name="type.amenity.place_of_worship">Place of Worship</string>
@@ -660,7 +657,6 @@
<string name="type.leisure.miniature_golf">Minigolf</string>
<string name="type.leisure.hackerspace">Hackerspace</string>
<string name="type.leisure.ice_rink">Ice Rink</string>
<string name="type.leisure.indoor_play">Indoor Play Centre</string>
<string name="type.leisure.marina">Marina</string>
<string name="type.leisure.nature_reserve">Nature Reserve</string>
<string name="type.leisure.outdoor_seating">Outdoor Seating</string>
@@ -1255,7 +1251,6 @@
<string name="type.shop.supermarket">Supermarket</string>
<string name="type.shop.tattoo">Tattoo Parlour</string>
<string name="type.shop.tea">Tea Shop</string>
<string name="type.shop.telecommunication">Telecommunication Shop</string>
<string name="type.shop.ticket">Ticket Shop</string>
<string name="type.shop.toys">Toy Store</string>
<string name="type.shop.travel_agency">Travel Agency</string>

View File

@@ -62,7 +62,6 @@
"shop-laundry": "4Laundry|Laundrette|laundromat",
"shop-toys|@category_children|@shop": "Toy|toyshop|kids|toys|kids toys",
"amenity-marketplace|@category_food": "3Marketplace|market",
"amenity-mobile_money_agent": "Mobile Money Agent|mobile money",
"amenity-money_transfer": "Money Transfer",
"shop-clothes|@category_shopping|@shop": "3Clothes|U+1F45A|U+1F457|U+1F456|U+1F455|clothing|wear",
"shop-caravan|@category_rv|@shop": "2RV dealership|4Caravan dealership|Motorhome dealership",
@@ -129,7 +128,6 @@
"leisure-garden": "3Garden",
"leisure-firepit": "5Firepit",
"amenity-bench|amenity-bench-backless": "Bench",
"amenity-boat_rental": "4Boat Rental|boat|3rental",
"amenity-bicycle_rental": "4Bicycle Rental|cycle|bike|3rental|U+1F6B2|U+1F6B4|U+1F6B5|bicycle hire|bike rental",
"amenity-bicycle_repair_station": "4Bicycle Repair Station|cycle|bike|4repair of bicycles",
"amenity-car_sharing": "Car Share|3carsharing|car|sharing|U+1F697|U+1F698|U+1F699|carpool|carsharing services|car sharing|4rideshare",
@@ -421,7 +419,6 @@
"amenity-parking_space-disabled|@category_parking": "Disabled Parking Space",
"amenity-nursing_home": "4Nursing Home",
"amenity-payment_terminal": "Payment Terminal",
"amenity-payment_centre": "Payment Centre",
"amenity-public_bath": "Public Bath",
"amenity-shower": "Shower",
"emergency-assembly_point": "Emergency Assembly Point",
@@ -453,7 +450,6 @@
"natural-glacier|@category_tourism": "Glacier",
"highway-ford": "Ford",
"leisure-marina": "3Marina",
"leisure-indoor_play": "3Indoor Play Centre|indoor play|indoor playground",
"piste:type-downhill|piste:type-nordic": "Skiing|3Ski run|4Piste",
"amenity-events_venue": "Events Venue",
"shop-chocolate|@category_food|@shop": "Chocolate",
@@ -463,7 +459,6 @@
"shop-music|@shop": "Record|vinyl|Music",
"shop-musical_instrument|@shop": "Musical instruments",
"shop-tea|@shop": "Tea",
"shop-telecommunication|@shop": "Telecommunication",
"shop-antiques|@category_shopping|@shop|@category_secondhand": "Antiques",
"shop-art|@category_shopping|@shop": "3Artwork|Arts",
"shop-baby_goods|@category_children|@shop": "Baby Goods",

View File

@@ -225,11 +225,11 @@
"tourism-alpine_hut|@category_hotel": "4Cabaña|cabaña alpina|hotel de montaña",
"shop-hairdresser": "4Peluquería",
"aeroway-aerodrome": "3Aeropuerto|3avión|aeródromo",
"leisure-stadium": "5Estadio",
"leisure-playground|@category_children": "Patio de recreo|4Parque infantil|Corral|Corralito",
"leisure-sports_centre|leisure-sports_centre-sport-american_football|leisure-sports_centre-sport-archery|leisure-sports_centre-sport-athletics|leisure-sports_centre-sport-australian_football|leisure-sports_centre-sport-badminton|leisure-sports_centre-sport-baseball|leisure-sports_centre-sport-basketball|leisure-sports_centre-sport-beachvolleyball|leisure-sports_centre-sport-bowls|leisure-sports_centre-sport-climbing|leisure-sports_centre-sport-cricket|leisure-sports_centre-sport-curling|leisure-sports_centre-sport-equestrian|leisure-sports_centre-sport-field_hockey|leisure-sports_centre-sport-futsal|leisure-sports_centre-sport-golf|leisure-sports_centre-sport-gymnastics|leisure-sports_centre-sport-handball|leisure-sports_centre-sport-ice_hockey|leisure-sports_centre-sport-multi|leisure-sports_centre-sport-padel|leisure-sports_centre-sport-pelota|leisure-sports_centre-sport-scuba_diving|leisure-sports_centre-sport-shooting|leisure-sports_centre-sport-skateboard|leisure-sports_centre-sport-skiing|leisure-sports_centre-sport-soccer|leisure-sports_centre-sport-table_tennis|leisure-sports_centre-sport-tennis|leisure-sports_centre-sport-volleyball|leisure-sports_centre-sport-yoga": "Polideportivo|Centro deportivo|deporte",
"leisure-golf_course": "Campo de golf|Golf",
"leisure-miniature_golf": "5Minigolf|Mini golf",
"leisure-stadium": "5Estadio|4deporte",
"leisure-playground|@category_children": "Patio de recreo|Parque infantil",
"leisure-sports_centre|leisure-sports_centre-sport-american_football|leisure-sports_centre-sport-archery|leisure-sports_centre-sport-athletics|leisure-sports_centre-sport-australian_football|leisure-sports_centre-sport-badminton|leisure-sports_centre-sport-baseball|leisure-sports_centre-sport-basketball|leisure-sports_centre-sport-beachvolleyball|leisure-sports_centre-sport-bowls|leisure-sports_centre-sport-climbing|leisure-sports_centre-sport-cricket|leisure-sports_centre-sport-curling|leisure-sports_centre-sport-equestrian|leisure-sports_centre-sport-field_hockey|leisure-sports_centre-sport-futsal|leisure-sports_centre-sport-golf|leisure-sports_centre-sport-gymnastics|leisure-sports_centre-sport-handball|leisure-sports_centre-sport-ice_hockey|leisure-sports_centre-sport-multi|leisure-sports_centre-sport-padel|leisure-sports_centre-sport-pelota|leisure-sports_centre-sport-scuba_diving|leisure-sports_centre-sport-shooting|leisure-sports_centre-sport-skateboard|leisure-sports_centre-sport-skiing|leisure-sports_centre-sport-soccer|leisure-sports_centre-sport-table_tennis|leisure-sports_centre-sport-tennis|leisure-sports_centre-sport-volleyball|leisure-sports_centre-sport-yoga": "Polideportivo|deporte",
"leisure-golf_course": "Campo de golf",
"leisure-miniature_golf": "Minigolf",
"leisure-escape_game": "Escape room|Sala de escape|Cuarto de escape",
"leisure-hackerspace": "Espacio hacker|Espacio para hackers|Hacklab|Hackerspace",
"leisure-pitch": "pista|deporte|cancha|campo",

View File

@@ -224,7 +224,7 @@
"leisure-stadium": "4Stade|4sport",
"leisure-playground|@category_children": "Terrain de jeu|aire de jeu",
"leisure-sports_centre|leisure-sports_centre-sport-american_football|leisure-sports_centre-sport-archery|leisure-sports_centre-sport-athletics|leisure-sports_centre-sport-australian_football|leisure-sports_centre-sport-badminton|leisure-sports_centre-sport-baseball|leisure-sports_centre-sport-basketball|leisure-sports_centre-sport-beachvolleyball|leisure-sports_centre-sport-bowls|leisure-sports_centre-sport-climbing|leisure-sports_centre-sport-cricket|leisure-sports_centre-sport-curling|leisure-sports_centre-sport-equestrian|leisure-sports_centre-sport-field_hockey|leisure-sports_centre-sport-futsal|leisure-sports_centre-sport-golf|leisure-sports_centre-sport-gymnastics|leisure-sports_centre-sport-handball|leisure-sports_centre-sport-ice_hockey|leisure-sports_centre-sport-multi|leisure-sports_centre-sport-padel|leisure-sports_centre-sport-pelota|leisure-sports_centre-sport-scuba_diving|leisure-sports_centre-sport-shooting|leisure-sports_centre-sport-skateboard|leisure-sports_centre-sport-skiing|leisure-sports_centre-sport-soccer|leisure-sports_centre-sport-table_tennis|leisure-sports_centre-sport-tennis|leisure-sports_centre-sport-volleyball|leisure-sports_centre-sport-yoga": "Centre sportif|sport",
"leisure-golf_course": "Terrain de golf|Parcours de golf",
"leisure-golf_course": "Terrain de golf",
"leisure-miniature_golf": "Minigolf",
"leisure-escape_game": "Salle d'évasion",
"leisure-pitch": "Terrain de sport|sport",

View File

@@ -210,7 +210,7 @@
"leisure-stadium": "4Stadion|4sport|U+26BD|U+26BE|U+1F3BE|U+1F3C0|U+1F3C8|U+1F4AA|U+1F3C9|aréna|olimpiai stadion",
"leisure-playground|@category_children": "Játszótér",
"leisure-sports_centre|leisure-sports_centre-sport-american_football|leisure-sports_centre-sport-archery|leisure-sports_centre-sport-athletics|leisure-sports_centre-sport-australian_football|leisure-sports_centre-sport-badminton|leisure-sports_centre-sport-baseball|leisure-sports_centre-sport-basketball|leisure-sports_centre-sport-beachvolleyball|leisure-sports_centre-sport-bowls|leisure-sports_centre-sport-climbing|leisure-sports_centre-sport-cricket|leisure-sports_centre-sport-curling|leisure-sports_centre-sport-equestrian|leisure-sports_centre-sport-field_hockey|leisure-sports_centre-sport-futsal|leisure-sports_centre-sport-golf|leisure-sports_centre-sport-gymnastics|leisure-sports_centre-sport-handball|leisure-sports_centre-sport-ice_hockey|leisure-sports_centre-sport-multi|leisure-sports_centre-sport-padel|leisure-sports_centre-sport-pelota|leisure-sports_centre-sport-scuba_diving|leisure-sports_centre-sport-shooting|leisure-sports_centre-sport-skateboard|leisure-sports_centre-sport-skiing|leisure-sports_centre-sport-soccer|leisure-sports_centre-sport-table_tennis|leisure-sports_centre-sport-tennis|leisure-sports_centre-sport-volleyball|leisure-sports_centre-sport-yoga": "4Sportközpont|sport",
"leisure-golf_course": "Golfpálya|U+26F3",
"leisure-golf_course": "Golfpálya",
"leisure-miniature_golf": "Minigolf",
"leisure-escape_game": "Szabadulószoba",
"leisure-pitch": "4Sportpálya|sport|U+26BD|U+26BE|U+1F3BE|U+1F3C0|U+1F3C8|U+1F3C9|U+1F3C3",

File diff suppressed because it is too large Load Diff

View File

@@ -258,10 +258,6 @@
<include field="outdoor_seating" />
<include field="website_menu" />
</type>
<type id="amenity-boat_rental">
<include group="poi_internet" />
<include field="operator" />
</type>
<type id="amenity-bicycle_rental">
<include field="website" />
<include field="opening_hours" />
@@ -1062,9 +1058,6 @@
<type id="shop-tea" group="shop">
<include group="poi_internet" />
</type>
<type id="shop-telecommunication" group="shop">
<include group="poi_internet" />
</type>
<type id="shop-trade" group="shop">
<include group="poi_internet" />
</type>
@@ -1133,7 +1126,6 @@
<type id="amenity-bench" />
<type id="amenity-compressed_air" />
<type id="amenity-bbq" />
<type id="leisure-slipway" />
<type id="amenity-shelter">
<include field="name" />
</type>
@@ -1205,9 +1197,6 @@
<type id="amenity-social_facility">
<include group="poi_internet" />
</type>
<type id="amenity-payment_centre">
<include group="poi_internet" />
</type>
<type id="amenity-payment_terminal">
<include field="operator" />
<include field="level" />
@@ -1237,9 +1226,6 @@
<type id="amenity-money_transfer">
<include group="poi_internet" />
</type>
<type id="amenity-mobile_money_agent">
<include group="poi_internet" />
</type>
<type id="amenity-vehicle_inspection">
<include group="poi_internet" />
</type>
@@ -1302,9 +1288,6 @@
<include group="poi" />
<include field="operator" />
</type>
<type id="leisure-indoor_play">
<include group="poi_internet" />
</type>
<type id="leisure-fitness_centre">
<include group="poi_internet" />
</type>

View File

@@ -642,7 +642,7 @@ deprecated|deprecated;519;x
sport|diving;520;
#~270k uses.
man_made|utility_pole;521;
amenity|payment_centre;522;
deprecated:boundary|administrative|suburb:04.2024;[boundary=administrative][border_type=suburb];x;name;int_name;522;
# Generic unspecified barrier, could be node (50k) or way (100k)
barrier|yes;523;
railway|monorail|tunnel;[railway=monorail][tunnel?];;name;int_name;524;
@@ -663,7 +663,7 @@ deprecated|deprecated;538;x
railway|funicular|tunnel;[railway=funicular][tunnel?];;name;int_name;539;
barrier|cycle_barrier;540;
addr:interpolation;[addr:interpolation];;addr:housenumber;name;541;
leisure|indoor_play;542;
deprecated:amenity|speed_trap:10.2021;542;highway|speed_camera
area:highway|track;543;
area:highway|primary;544;
deprecated|deprecated;545;x
@@ -857,7 +857,7 @@ sport|skiing;732;
tourism|museum;733;
tourism|guest_house;734;
tourism|motel;735;
shop|telecommunication;736;
deprecated:boundary|administrative|4|state:01.2022;[boundary=administrative][admin_level=4][border_type=state];x;name;int_name;736;boundary|administrative|4
place|state|USA;[place=state][addr:country=US],[place=state][is_in=USA],[place=state][is_in:country=USA],[place=state][is_in:country_code=us];;name;int_name;737;
building|address;[addr:housenumber][addr:street];;addr:housenumber;name;738;
amenity|parking|no-access;[amenity=parking][access=not],[amenity=parking][access=no];;name;int_name;739;
@@ -980,7 +980,8 @@ railway|rail|tourism|bridge;[railway=rail][usage=tourism][!service][bridge?];;na
railway|rail|highspeed|tunnel;[railway=rail][highspeed?][!service][tunnel?];;name;int_name;854;
railway|rail|tourism|tunnel;[railway=rail][usage=tourism][!service][tunnel?];;name;int_name;855;
mapswithme|grid;856;
amenity|mobile_money_agent;857;
# service=bus/busway is deprecated in OSM
deprecated:highway|service|busway:10.2023;[highway=service][service=busway];x;name;int_name;857;highway|busway
highway|busway;[highway=busway],[highway=service][service=busway],[highway=service][service=bus];;name;int_name;858;
highway|busway|bridge;[highway=busway][bridge?];;name;int_name;859;
highway|busway|tunnel;[highway=busway][tunnel?];;name;int_name;860;
@@ -988,7 +989,7 @@ natural|salt_pond;861;landuse|salt_pond
amenity|conference_centre;862;
amenity|exhibition_centre;863;
deprecated:railway|siding|tunnel:06.2023;864;x
amenity|boat_rental;865;
deprecated:railway|yard|tunnel:06.2023;865;x
area:highway|footway;866;
junction|circular;867;
area:highway|residential;868;
Can't render this file because it contains an unexpected character in line 7 and column 16.

View File

@@ -231,14 +231,14 @@
@subway_label: #9E9E9E;
@indigenous_label: #6A512F;
@shop_label: #6B425C;
@industry_label: #574469;
@industry_label: #000000;
@food_label: #8C491C;
@entertainment_label: #8C311B;
@entertainment_label: #000000;
@culture_label: #6E4426;
@hotel_label: #614A43;
@sport_label: #2B5C4B;
@nature_label: #3C612E;
@water_label: #0A6074;
@sport_label: #000000;
@nature_label: #000000;
@water_label: #000000;
@neutral_label: #51585E;
@healthcare_label: #983E44;
@public_transport_label: #2F6499;

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 19 19" width="19" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(.3312 .9588)"><circle cx="9" cy="9" fill="#000" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#6B425C" r="8.25"/><path d="m7.44735 6.64155c.6266775 0 1.16175-.4049325 1.36425-.964125h2.49225v.4820625c0 .2651325.21693.4820625.4820625.4820625s.4820625-.21693.4820625-.4820625v-.4820625c.2651325 0 .4820625-.21693.4820625-.4820625s-.21693-.4820625-.4820625-.4820625h-3.456375c-.23139-.6507825-.9063-1.07985-1.65345-.935175-.5640075.1108725-1.02195.5736525-1.132875 1.137675-.16872.9159.530265 1.72575 1.422075 1.72575zm0-1.92825c.2651325 0 .4820625.21693.4820625.4820625s-.21693.4820625-.4820625.4820625-.4820625-.21693-.4820625-.4820625.21693-.4820625.4820625-.4820625zm-1.71484793 7.891702h7.01753543c-.3091683 1-.9781318 1.5-2.0068907 1.5h-3.48081229c-.71478849 0-1.3302781-.5043681-1.47074931-1.2052179zm3.18749793-4.99999999c.89379424.94861026 1.4893498 1.67776089 1.7866668 2.18745192.297317.50969107.6428103 1.28054037 1.03648 2.31254807h-2.62497531c.12331455-.8424798.18497182-1.538368.18497182-2.0876646 0-.54929651-.12771443-1.35340832-.38314331-2.41233539zm-.17685315 1.00499799-2.12 3.495002h2.12z" fill="#000"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1 +0,0 @@
<svg height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle cx="9" cy="9" fill="#000" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#802D19" r="8.25"/><path d="m4.33219182 13.4602521c-.56625353-.145147-1.05995548-.6661354-1.19210692-1.258018-.08901014-.3987537-.02672993-.8612893.16530454-1.2277241.12702014-.2423618.39770557-.5208347.63150605-.6497263.3295444-.1816314.40961456-.1970143 1.12899472-.2169742.63145117-.0175177.6551594-.0202617.79691486-.0920999.08035554-.04072105.70197217-.49045301 1.3813886-.99942263.67941643-.50894766 1.24429795-.91666337 1.25538374-.90596174.01106385.01065224.01704578.81354355.01328649 1.78426388l-.00683807 1.76489119-1.06258973.792744c-.58441886.4360174-1.1343181.827044-1.22196172.8689725-.32774983.1566993-.47121206.1788709-1.14046468.1762641-.38992905-.0015367-.66223894-.0150646-.74883983-.0372582zm4.82934464-.0252997-.05776137-.0649397v-8.76545977l2.19822491-1.10462793 2.198225 1.11900654v8.77369176l-.0627116.0536399c-.0527947.0451499-.1065663.0536618-.3399057.0536618-.2588862 0-.2815024-.004577-.3423974-.0688966l-.0652031-.0688746v-1.9666855h-2.78928433v1.9824361l-.06148224.0610103c-.05507774.0546497-.09057971.0610103-.34071252.0610103-.25752517 0-.28371947-.005049-.33698616-.0649452zm3.52846524-6.90776623v-1.05221738h-2.78928432v2.10443476h2.78928432z" fill="#000"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +1 @@
<svg height="19" viewBox="0 0 18 19" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(0 .9588)"><circle cx="9" cy="9" fill="#000" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#0a6074" r="8.25"/><path d="m14.3284836 9.91216592c-.3125594 1.01096838-.8687086 1.68342498-1.6684475 2.01736998-.1656091-.072627-.3256156-.1651861-.4807525-.2805759-.950475.675-2.27887502.675-3.23467502 0-.950475.675-2.284275.675-3.223875 0-.27744671.2030098-.56714237.3353526-.8659383.4186755-.45689288-.1859843-.80641259-.5898173-.90791437-1.0962377l-.21230169-1.05923188zm-5.78195173-7.54816592.48488347.52149022.44267432.49043051c.84313944.94980132 1.43302404 1.71324441 1.76965374 2.29032927.4488396.76944648.9704078 1.93314626 1.5647046 3.49109933h-3.96274987c.18615974-1.27183553.27923961-2.32237144.27923961-3.15160773s-.19280196-2.04315016-.57840587-3.6417416zm-.26698338 1.51717831v5.27617102h-3.20042235zm5.55269401 9.95882169c-.5724075 0-1.1124-.13-1.62-.4-.9936.54-2.241.54-3.234675 0-.9936.54-2.241.54-3.223875 0-.6642075.3726-1.4256.427-2.16.4v-.88c.7614.027 1.4958-.054 2.16-.54.9396.675 2.2734.675 3.223875 0 .9558.675 2.2842.675 3.234675 0 .6534075.486 1.3932.567 2.1492.54v.88z" fill="#000" fill-rule="evenodd"/></g></svg>
<svg height="18" viewBox="0 0 24 24" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle cx="12" cy="12" fill="#000" opacity=".6" r="12"/><circle cx="12" cy="12" fill="#0a6074" r="11"/><path d="m5.5116 12.152 5.7601-8.2584v8.2584zm6.8401 0c.97201-2.7.84241-6.3288 0-9 3.4272 1.1088 6.0481 5.328 6.0913 9zm6.1921 2.5776c-.2952.4608-.64081.8568-1.044 1.1952-.46801-.2088-.88561-.5328-1.2168-.8928-1.0728 1.3896-3.24 1.3896-4.3129 0-1.0584 1.3896-3.24 1.3896-4.2985 0-.36.36-.75601.684-1.224.8928-.82081-.6768-1.44-1.6416-1.656-2.6928h14.357c-.1152.54-.3168 1.0368-.60481 1.4976m-.1008 4.2624c-.76321 0-1.4832-.18-2.16-.54-1.3248.72-2.988.72-4.3129 0-1.3248.72-2.988.72-4.2985 0-.88561.4968-1.9008.576-2.88.54v-1.44c1.0152.036 1.9944-.072 2.88-.72 1.2528.9 3.0312.9 4.2985 0 1.2744.9 3.0456.9 4.3129 0 .87121.648 1.8576.756 2.8656.72v1.44z" fill="#000"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 878 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#294c88" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#294c88" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#136c30" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#136c30" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f1a17" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f1a17" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#212121" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f5a17" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 920 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#212121" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f5a17" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 920 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 19 19" width="19" xmlns="http://www.w3.org/2000/svg"><path d="m2.885 12.0615528 12.23 3.2475375h-12.23zm1.11669573-3.0534098 10.69279887 2.8651268c-.8793687 1.3974981-2.1028262 1.8862358-3.6703724 1.4662131l-5.30380311-1.4211498c-1.08914156-.2918346-1.82105491-1.311646-1.74895082-2.43690057zm6.89827777-6.31723332.3483726.65749533c.7729657 1.48426312 1.2666065 2.61927763 1.4809223 3.40504355.2449323.89801819.4566462 2.21363954.6351416 3.94686404l-3.99974232-1.07172772c.53186611-1.23336117.90993282-2.26853038 1.13420022-3.10550762.2242674-.83697725.3579692-2.11436644.4011056-3.83216758zm-.6797974 1.45913545-1.4269431 5.32542429-3.23029843-.86555585z" fill="#777" transform="translate(.6688 .9588)"/></svg>

Before

Width:  |  Height:  |  Size: 741 B

View File

@@ -1 +1,7 @@
<svg height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><path d="m6.64671389 3.10072399 4.64689821 2.90418648-1.74258684.00012489v3.50840813l1.16109904-.73671178v1.92381589l-1.16109904.768305v3.8301576h-5.80862274v-9.29397484l-1.74258682-.00012489zm6.09842831 4.3876552v1.86805307l-1.1617245.76789994v-1.89941965zm-4.93670376-.90257077h-2.3234491v3.48526288h2.3234491zm6.36104506.00008921.8303322 1.28040112-1.3833801.91391814v-1.84365686z" fill="#777"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>toll_booth-m</title>
<g id="toll_booth-m" stroke="none" fill="none" fill-rule="nonzero">
<path d="M6.60018429,3 L3.60018429,4.8 L3.60018429,13.8 L3.00018429,13.8 L3.00018429,15 L10.2001843,15 L10.2001843,13.8 L9.60018429,13.8 L9.60018429,11.0437714 L10.4439386,10.5000171 L10.3126929,9.18756 L9.60019286,9.61880571 L9.60019286,4.80003429 L6.60019286,3 L6.60018429,3 Z M4.80018429,6 L8.40018429,6 L8.40018429,10.2 L4.80018429,10.2 L4.80018429,6 L4.80018429,6 Z M14.3436129,6.6 L13.8561129,6.9 L13.9873586,8.21245714 L14.9998157,7.61245714 L14.34357,6.6 L14.3436129,6.6 Z M13.3123843,7.2 L12.2999271,7.85624571 L12.4124271,9.18747429 L13.4436557,8.51247429 L13.31241,7.2 L13.3123843,7.2 Z M11.8123843,8.15622857 L10.7999271,8.81247429 L10.9124271,10.1437029 L11.9436557,9.48745714 L11.81241,8.15622857 L11.8123843,8.15622857 Z" id="Shape" fill="#51585E"></path>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 487 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +1,7 @@
<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m4.49576922.7499232 4 2.4998925-1.5.0001075v3.02l.99946155-.63415358v1.656l-.99946155.66134875v3.29695843h-5v-8.0001536l-1.49999999-.0001075zm5.24946155 3.77684642v1.608l-1 .661v-1.635zm-4.24946155-.77692321h-2v3.00007679h2zm5.47551918.00007679.7147411 1.10215552-1.1907987.7866909v-1.587z" fill="#777"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="12px" height="12px" viewBox="0 0 12 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>toll_booth-s</title>
<g id="toll_booth-s" stroke="none" fill="none" fill-rule="nonzero">
<path d="M4.50856084,0.999846424 L7.00863763,2.49992107 L7.00863763,6.51568727 L10.9615733,3.99993857 L11.5084615,4.84367877 L7.00863048,7.70319517 L7.00863048,10.0001229 L7.50864584,10.0001229 L7.50864584,11.0001536 L1.50846155,11.0001536 L1.50846155,10.0001229 L2.00847691,10.0001229 L2.00847691,2.4998925 L4.50856084,0.999846424 Z M6.00859977,3.49992321 L3.00850762,3.49992321 L3.00850762,7.00003072 L6.00859977,7.00003072 L6.00859977,3.49992321 Z" id="Shape" fill="#51585E"></path>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 402 B

After

Width:  |  Height:  |  Size: 797 B

View File

@@ -1 +0,0 @@
<svg height="18" viewBox="0 0 19 18" width="19" xmlns="http://www.w3.org/2000/svg"><path d="m7.33124024 14.0849349.37500187-.5625h-.95625l-1.125 1.6875h.35416688c.37614937 0 .727425-.1879875.93605625-.5009625l.04102537-.0615375h4.08751879l.0410253.0615375c.2086482.312975.5599069.5009625.9360563.5009625h.3541669l-1.125-1.6875h-.95625l.3750018.5625zm.19884375-7.87500002h2.93979371c.90675 0 1.6513875.71656875 1.6862625 1.62264375l.1739082 4.52159997c.0222862.5794951-.3977995 1.073387-.9587146 1.1561005l-.1438562.0119417-4.43342261.0002141c-.579915 0-1.057322-.4387607-1.11839886-1.0024188l-.00576993-.1658206.17390813-4.52160017c.03291306-.8557375.69896291-1.542455 1.53673222-1.61611578zm-.2607975 1.40623031c-.293265 0-.5373225.22532907-.56071125.51766032l-.13678875 1.73235656c0 .31065753.2518425.56250003.5625.56250003l3.75384621-.0004472.0224103-.0013416c.3096732-.0247736.5406244-.2958919.5158519-.60558748l-.135-1.6875c-.0233887-.29233125-.2674406-.51764063-.5607112-.51764063zm.04320281 4.78126971c.3106575 0 .5625-.2518425.5625-.5625s-.2518425-.5625-.5625-.5625-.5625.2518425-.5625.5625.2518425.5625.5625.5625zm3.375 0c.3106575 0 .5625-.2518425.5625-.5625s-.2518425-.5625-.5625-.5625-.5625.2518425-.5625.5625.2518425.5625.5625.5625zm-2.671875-5.62500002c-.07766437 0-.140625.06296062-.140625.140625s.06296063.140625.140625.140625h1.96875003c.07766437 0 .14062497-.06296062.14062497-.140625s-.0629606-.140625-.14062497-.140625zm-4.2392211-1.60024446 5.2236068-2.6118034 5.2236068 2.6118034c.2469892.12349462.3471014.42383114.2236068.67082039s-.4238311.34710142-.6708204.2236068l-4.7763932-2.3882136-4.7763932 2.3882136c-.219546.109773-.48124293.04286902-.62342158-.1468222l-.04739882-.0767846c-.12349462-.24698925-.02338245-.54732577.2236068-.67082039z" fill="#777" transform="translate(.6869)"/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -224,13 +224,13 @@ area|z10-17[boundary=protected_area][protect_class=1],
line|z10-[boundary=national_park],
line|z10-[boundary=protected_area][protect_class=1],
{width: 0.5; opacity: 0.3; color: @protected_nature;}
{width: 2; color: @protected_nature;}
area|z10-16[boundary=aboriginal_lands],
{fill-opacity: 0.07; fill-color: @indigenous_lands;}
line|z10-[boundary=aboriginal_lands],
{width: 0.5; opacity: 0.3; color: @indigenous_lands;}
{width: 2; color: @indigenous_lands;}
/* ToDo: Assume that military areas already have fences? */

View File

@@ -44,7 +44,7 @@ node|z18-[office],
{icon-image: office-m.svg;}
node|z18-[craft],
{icon-image: craft-m.svg;}
{text-color: @industry_label;text-halo-radius: 1;text-halo-opacity: 0.9;text-halo-color: @label_halo_light;icon-image: craft-m.svg;}
node|z16-[shop],
{icon-min-distance: 10;}
@@ -441,15 +441,17 @@ node|z18-[historic=stone],
node|z12-14[historic=fort],
node|z12-14[historic=castle],
{icon-image: remains-s.svg;text-offset: 1;icon-min-distance: 12;}
{icon-image: castle-s.svg;text-offset: 1;icon-min-distance: 12;}
node|z15[historic=fort],
node|z15[historic=castle],
{icon-image: remains-m.svg;icon-min-distance: 5;}
{icon-image: castle-m.svg;icon-min-distance: 5;}
node|z16[historic=fort],
node|z16[historic=castle],
{icon-image: remains-m.svg;text-offset: 1;}
{icon-image: castle-m.svg;text-offset: 1;}
node|z17-[historic=fort],
node|z17-[historic=castle],
{icon-image: castle-m.svg;}
node|z17-[historic=ruins][name],
{icon-image: remains-m.svg;}
node|z12-14[historic=castle][castle_type=castrum],
@@ -844,7 +846,6 @@ node|z17-[amenity=casino],
node|z17-[amenity=gambling],
node|z17-[leisure=adult_gaming_centre],
node|z17-[leisure=amusement_arcade],
node|z17-[leisure=indoor_play],
node|z17-[amenity=courthouse],
node|z17-[amenity=nursing_home],
node|z17-[amenity=social_facility],
@@ -866,11 +867,9 @@ node|z17-[amenity=vending_machine][vending=parking_tickets],
node|z17-[amenity=vending_machine][vending=public_transport_tickets],
node|z17-[amenity=payment_terminal],
node|z17-[amenity=shower],
node|z17-[amenity=slipway],
node|z17-[amenity=motorcycle_rental],
node|z17-[amenity=bicycle_rental],
node|z17-[amenity=bicycle_repair_station],
node|z17-[amenity=boat_rental],
node|z17-[amenity=post_office],
node|z17-[amenity=library],
node|z18-[post_office=post_partner],
@@ -924,8 +923,6 @@ node|z18-[amenity=toilets],
node|z18-[amenity=atm],
node|z18-[amenity=bureau_de_change],
node|z18-[amenity=money_transfer],
node|z18-[amenity=mobile_money_agent],
node|z18-[amenity=payment_centre],
node|z18-[amenity=waste_disposal],
node|z18-[amenity=recycling],
node|z16-[amenity=recycling][recycling_type=centre],
@@ -1424,9 +1421,6 @@ node|z17-[leisure=amusement_arcade],
node|z18-[shop=lottery],
{icon-image: lottery-m.svg;}
node|z17-[leisure=indoor_play],
{icon-image: indoor_play-m.svg;icon-min-distance: 20;}
node|z17-[amenity=courthouse],
{icon-image: public-building-m.svg;}
@@ -1460,9 +1454,6 @@ node|z16-17[building=guardhouse],
node|z16-[building=guardhouse]::int_name,
{text: none;}
node|z17-[building=train_station],
{icon-image: train_building-m.svg; font-size: 11; text-offset: 1;}
node|z17-[amenity=prison],
{icon-image: prison-m.svg;}
node|z18-[amenity=prison],
@@ -1481,11 +1472,6 @@ node|z17-[amenity=motorcycle_rental],
node|z18-[amenity=motorcycle_rental],
{font-size: 11;}
node|z17-[amenity=boat_rental],
{icon-image: boat-rental.svg;}
node|z18-[amenity=boat_rental],
{font-size: 11;}
node|z17-[amenity=bicycle_rental],
{icon-image: bicycle-rental.svg;}
node|z18-[amenity=bicycle_rental],
@@ -1554,9 +1540,6 @@ node|z15-[power=plant][plant:source=wind],
node|z16-[power=plant][plant:source=wind],
{text: name;text-color: @neutral_label;text-halo-radius: 1;text-halo-opacity: 0.9;text-halo-color: @label_halo_light; text-offset: 1; font-size: 10;}
node|z17-[leisure=slipway],
{icon-image: slipway-m.svg;}
node|z17-[amenity=shower],
{icon-image: shower-m.svg;}
@@ -1581,8 +1564,6 @@ node|z17-[aeroway=gate],
node|z17-[amenity=bureau_de_change],
node|z17-[amenity=money_transfer],
node|z17-[amenity=mobile_money_agent],
node|z17-[amenity=payment_centre],
{icon-image: banknote-m.svg;font-size: 11;}
node|z16-[amenity=fire_station],
@@ -1729,7 +1710,6 @@ node|z16-[shop=laundry],
node|z16-[shop=lighting],
node|z16-[shop=dry_cleaning],
node|z16-[shop=mobile_phone],
node|z16-[shop=telecommunication],
node|z16-[shop=optician],
node|z16-[shop=outdoor],
node|z16-[shop=rental],
@@ -1896,7 +1876,6 @@ node|z16[shop=laundry],
node|z16[shop=dry_cleaning],
{icon-image:dry_cleaning-m.svg;}
node|z16[shop=mobile_phone],
node|z16[shop=telecommunication],
{icon-image: mobile_phone-m.svg;}
node|z16[shop=optician],
{icon-image: optician-m.svg;}
@@ -2043,7 +2022,6 @@ node|z17-[shop=laundry],
node|z17-[shop=dry_cleaning],
{icon-image:dry_cleaning-m.svg;icon-min-distance: 24;}
node|z17-[shop=mobile_phone],
node|z17-[shop=telecommunication],
{icon-image: mobile_phone-m.svg;icon-min-distance: 24;}
node|z17-[shop=optician],
{icon-image: optician-m.svg;icon-min-distance: 24;}
@@ -2293,4 +2271,239 @@ node|z18-[amenity=parking_space][parking_space=disabled],
/* 8. Colored Labels */
@import("../../default/include/Icons_Label_Colors.mapcss");
node[amenity=car_rental],
node[amenity=car_sharing],
node[amenity=internet_cafe],
node[amenity=marketplace],
node[amenity=motorcycle_rental],
node[shop=alcohol],
node[shop=antiques],
node[shop=art],
node[shop=auction],
node[shop=bakery],
node[shop=beauty],
node[shop=beverages],
node[shop=bicycle],
node[shop=books],
node[shop=butcher],
node[shop=camera],
node[shop=car],
node[shop=caravan],
node[shop=charity],
node[shop=cheese],
node[shop=chemist],
node[shop=chocolate],
node[shop=clothes],
node[shop=collector],
node[shop=computer],
node[shop=confectionery],
node[shop=convenience],
node[shop=copyshop],
node[shop=cosmetics],
node[shop=deli],
node[shop=department_store],
node[shop=doityourself],
node[shop=dry_cleaning],
node[shop=dry_cleaning],
node[shop=electronics],
node[shop=erotic],
node[shop=fabric],
node[shop=farm],
node[shop=florist],
node[shop=furniture],
node[shop=garden_centre],
node[shop=gift],
node[shop=greengrocer],
node[shop=grocery],
node[shop=hairdresser],
node[shop=hardware],
node[shop=health_food],
node[shop=hearing_aids],
node[shop=houseware],
node[shop=interior_decoration],
node[shop=jewelry],
node[shop=kiosk],
node[shop=kitchen],
node[shop=laundry],
node[shop=laundry],
node[shop=lighting],
node[shop=mall],
node[shop=mobile_phone],
node[shop=motorcycle],
node[shop=music],
node[shop=musical_instrument],
node[shop=optician],
node[shop=outdoor],
node[shop=pasta],
node[shop=pastry],
node[shop=pawnbroker],
node[shop=pet],
node[shop=photo],
node[shop=rental],
node[shop=rental][rental=bike],
node[shop=seafood],
node[shop=second_hand],
node[shop=sewing],
node[shop=shoes],
node[shop=sports],
node[shop=stationery],
node[shop=supermarket],
node[shop=ticket],
node[shop=tobacco],
node[shop=toys],
node[shop=variety_store],
node[shop=video],
node[shop=video_games],
node[shop=wine],
node[shop],
{text-color: @shop_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[amenity=car_wash],
node[amenity=fuel],
node[amenity=studio],
node[amenity=vehicle_inspection],
node[craft=beekeeper],
node[craft=blacksmith],
node[craft=carpenter],
node[craft=caterer],
node[craft=electrician],
node[craft=electronics_repair],
node[craft=grinding_mill],
node[craft=handicraft],
node[craft=hvac],
node[craft=key_cutter],
node[craft=locksmith],
node[craft=metal_construction],
node[craft=painter],
node[craft=plumber],
node[craft=sawmill],
node[craft],
node[landuse=industrial][industrial=mine],
node[landuse=quarry],
node[man_made=works],
node[office],
node[shop=agrarian],
node[shop=car_parts],
node[shop=car_repair],
node[shop=car_repair][service=tyres],
node[shop=funeral_directors],
node[shop=gas],
node[shop=motorcycle_repair],
node[shop=tattoo],
node[shop=trade],
node[shop=tyres],
node[shop=wholesale],
{text-color: @industry_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[amenity=bar],
node[amenity=biergarten],
node[amenity=cafe],
node[amenity=fast_food],
node[amenity=food_court],
node[amenity=ice_cream],
node[amenity=nightclub],
node[amenity=pub],
node[amenity=restaurant],
{text-color: @food_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[amenity=casino],
node[amenity=cinema],
node[amenity=gambling],
node[amenity=stripclub],
node[amenity=theatre],
node[leisure=adult_gaming_centre],
node[leisure=amusement_arcade],
node[leisure=bowling_alley],
node[leisure=escape_game],
node[shop=bookmaker],
node[shop=lottery],
node[tourism=aquarium],
node[tourism=theme_park],
node[tourism=zoo],
{text-color: @entertainment_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[amenity=arts_centre],
node[amenity=community_centre],
node[amenity=conference_centre],
node[amenity=events_venue],
node[amenity=exhibition_centre],
node[amenity=place_of_worship]
node[amenity=social_facility],
node[historic=ship],
node[leisure=hackerspace],
node[tourism=attraction],
node[tourism=gallery],
node[tourism=museum],
{text-color: @culture_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[leisure=resort],
node[tourism=alpine_hut],
node[tourism=apartment],
node[tourism=chalet],
node[tourism=guest_house],
node[tourism=hostel],
node[tourism=hotel],
node[tourism=motel],
node[tourism=wilderness_hut],
{text-color: @hotel_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[leisure=dance],
node[leisure=fitness_centre],
node[leisure=sports_centre],
node[leisure=stadium],
{text-color: @sport_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[landuse=plant_nursery],
{text-color: @nature_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[amenity=public_bath],
node[leisure=beach_resort],
node[leisure=marina],
node[leisure=sports_centre][sport=scuba_diving],
node[leisure=sports_centre][sport=swimming],
node[shop=massage],
{text-color: @water_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
area[amenity=university][name]
node[aeroway=gate],
node[amenity=atm],
node[amenity=bank],
node[amenity=bureau_de_change],
node[amenity=charging_station][motorcar?],
node[amenity=childcare],
node[amenity=college],
node[amenity=courthouse],
node[amenity=driving_school],
node[amenity=fire_station],
node[amenity=kindergarten],
node[amenity=language_school],
node[amenity=library],
node[amenity=money_transfer],
node[amenity=music_school],
node[amenity=nursing_home],
node[amenity=police],
node[amenity=post_office],
node[amenity=prison],
node[amenity=school],
node[amenity=townhall],
node[amenity=university][name],
node[barrier=border_control],
node[building=guardhouse],
node[office=security],
node[shop=money_lender],
node[tourism=information][information=office],
{text-color: @neutral_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
area[amenity=hospital],
node[amenity=clinic],
node[amenity=dentist],
node[amenity=doctors],
node[amenity=hospital],
node[amenity=pharmacy],
node[amenity=veterinary],
node[healthcare],
{text-color: @healthcare_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[amenity=bicycle_rental],
node[amenity=taxi],
{text-color: @public_transport_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}

View File

@@ -1,7 +1,5 @@
/* Setting the colors for all POI icons */
/* Please add new items so that they fit in the existing alphabetical order */
node[amenity=boat_rental],
node[amenity=car_rental],
node[amenity=car_sharing],
node[amenity=internet_cafe],
@@ -32,8 +30,8 @@ node[shop=tyres],
node[shop=wholesale],
{text-color: @industry_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[craft=photographer],
node[craft=tailor],
node[craft=photographer],
{text-color: @shop_label}
node[amenity=bar],
@@ -57,7 +55,6 @@ node[leisure=adult_gaming_centre],
node[leisure=amusement_arcade],
node[leisure=bowling_alley],
node[leisure=escape_game],
node[leisure=indoor_play],
node[shop=bookmaker],
node[shop=lottery],
node[tourism=aquarium],
@@ -89,7 +86,6 @@ node[tourism=motel],
node[tourism=wilderness_hut],
{text-color: @hotel_label;text-halo-radius: 0.1;text-halo-opacity: 0.7;text-halo-color: @label_halo_light;}
node[amenity=dojo],
node[leisure=dance],
node[leisure=fitness_centre],
node[leisure=sports_centre],
@@ -120,11 +116,9 @@ node[amenity=fire_station],
node[amenity=kindergarten],
node[amenity=language_school],
node[amenity=library],
node[amenity=mobile_money_agent],
node[amenity=money_transfer],
node[amenity=music_school],
node[amenity=nursing_home],
node[amenity=payment_centre],
node[amenity=police],
node[amenity=post_office],
node[amenity=prison],

View File

@@ -400,7 +400,7 @@ building # area z14- (also has captio
building-garage # area z14- (also has caption z17-)
building-guardhouse # area z14- (also has icon z18-, caption(optional) z18-)
building-has_parts # area z14- (also has caption z17-)
building-train_station # area z14- (also has icon z17-, caption(optional) z17-)
building-train_station # area z14- (also has caption z17-)
=== 130
piste:type-connection # line z15-

View File

@@ -773,7 +773,6 @@ shop-health_food # icon z16- (also has captio
=== 2700
amenity-bicycle_rental # icon z17- (also has caption(optional) z17-)
amenity-boat_rental # icon z17- (also has caption(optional) z17-)
amenity-car_sharing # icon z18- (also has caption(optional) z18-)
amenity-taxi # icon z16- (also has caption(optional) z16-)
=== 2600
@@ -867,7 +866,6 @@ shop-shoes # icon z16- (also has captio
shop-sports # icon z16- (also has caption(optional) z16-)
shop-stationery # icon z16- (also has caption(optional) z16-)
shop-tea # icon z18- (also has caption(optional) z18-)
shop-telecommunication # icon z16- (also has caption(optional) z16-)
shop-toys # icon z16- (also has caption(optional) z16-)
shop-travel_agency # icon z18- (also has caption(optional) z18-)
shop-wine # icon z16- (also has caption(optional) z16-)
@@ -918,7 +916,7 @@ natural-wetland-tidalflat # caption z16- (also has are
tourism-picnic_site # icon z16- (also has caption(optional) z16-)
=== 1800
building-train_station # icon z17- (also has caption(optional) z17-, area z14-)
building-train_station # caption z17- (also has area z14-)
railway-level_crossing # icon z17-
=== 1700
@@ -968,10 +966,8 @@ amenity-childcare # icon z17- (also has captio
amenity-doctors # icon z17- (also has caption(optional) z17-, area z15-)
amenity-driving_school # icon z17- (also has caption(optional) z17-)
amenity-language_school # icon z17- (also has caption(optional) z17-)
amenity-mobile_money_agent # icon z17- (also has caption(optional) z18-)
amenity-money_transfer # icon z17- (also has caption(optional) z18-)
amenity-music_school # icon z17- (also has caption(optional) z17-)
amenity-payment_centre # icon z17- (also has caption(optional) z18-)
amenity-recycling-centre # icon z16- (also has caption(optional) z16-, area z15-)
amenity-veterinary # icon z16- (also has caption(optional) z16-)
craft-electrician # icon z17- (also has caption(optional) z18-)
@@ -1204,7 +1200,6 @@ healthcare-psychotherapist # icon z17- (also has captio
healthcare-speech_therapist # icon z17- (also has caption(optional) z17-)
leisure-adult_gaming_centre # icon z17- (also has caption(optional) z17-)
leisure-amusement_arcade # icon z17- (also has caption(optional) z17-)
leisure-indoor_play # icon z17- (also has caption(optional) z17-)
office-company # icon z18- (also has caption(optional) z18-)
office-ngo # icon z18- (also has caption(optional) z18-)
office-telecommunication # icon z18- (also has caption(optional) z18-)
@@ -1321,7 +1316,7 @@ landuse-railway # caption z15- (also has are
landuse-residential # caption z17-
landuse-retail # caption z16- (also has area z13-)
leisure-common # caption z17-
leisure-slipway # icon z17- (also has caption(optional) z17-)
leisure-slipway # caption z17-
leisure-track # caption z16- (also has line z15-)
leisure-track-area # caption z16- (also has area z15-)
man_made-petroleum_well # icon z17- (also has caption(optional) z18-)
@@ -1815,7 +1810,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# === -7300
# amenity-bicycle_rental # caption(optional) z17- (also has icon z17-)
# amenity-boat_rental # caption(optional) z17- (also has icon z17-)
# amenity-car_sharing # caption(optional) z18- (also has icon z18-)
# amenity-taxi # caption(optional) z16- (also has icon z16-)
# === -7400
@@ -1905,7 +1899,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# shop-sports # caption(optional) z16- (also has icon z16-)
# shop-stationery # caption(optional) z16- (also has icon z16-)
# shop-tea # caption(optional) z18- (also has icon z18-)
# shop-telecommunication # caption(optional) z16- (also has icon z16-)
# shop-toys # caption(optional) z16- (also has icon z16-)
# shop-travel_agency # caption(optional) z18- (also has icon z18-)
# shop-wine # caption(optional) z16- (also has icon z16-)
@@ -1941,9 +1934,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# tourism-picnic_site # caption(optional) z16- (also has icon z16-)
# === -8200
# building-train_station # caption(optional) z17- (also has icon z17-, area z14-)
# === -8300
# leisure-sports_centre-sport-swimming # caption(optional) z15- (also has icon z15-, area z13-)
# === -8380
@@ -1987,10 +1977,8 @@ leisure-swimming_pool-private # icon z17- (also has captio
# amenity-doctors # caption(optional) z17- (also has icon z17-, area z15-)
# amenity-driving_school # caption(optional) z17- (also has icon z17-)
# amenity-language_school # caption(optional) z17- (also has icon z17-)
# amenity-mobile_money_agent # caption(optional) z18- (also has icon z17-)
# amenity-money_transfer # caption(optional) z18- (also has icon z17-)
# amenity-music_school # caption(optional) z17- (also has icon z17-)
# amenity-payment_centre # caption(optional) z18- (also has icon z17-)
# amenity-recycling-centre # caption(optional) z16- (also has icon z16-, area z15-)
# amenity-veterinary # caption(optional) z16- (also has icon z16-)
# craft-electrician # caption(optional) z18- (also has icon z17-)
@@ -2200,7 +2188,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# healthcare-speech_therapist # caption(optional) z17- (also has icon z17-)
# leisure-adult_gaming_centre # caption(optional) z17- (also has icon z17-)
# leisure-amusement_arcade # caption(optional) z17- (also has icon z17-)
# leisure-indoor_play # caption(optional) z17- (also has icon z17-)
# office-company # caption(optional) z18- (also has icon z18-)
# office-ngo # caption(optional) z18- (also has icon z18-)
# office-telecommunication # caption(optional) z18- (also has icon z18-)
@@ -2291,7 +2278,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# landuse-industrial-mine # caption(optional) z15- (also has icon z15-, area z13-)
# landuse-landfill # caption(optional) z15- (also has icon z15-, area z13-)
# landuse-quarry # caption(optional) z15- (also has icon z15-, area z13-)
# leisure-slipway # caption(optional) z17- (also has icon z17-)
# man_made-petroleum_well # caption(optional) z18- (also has icon z17-)
# power-generator-wind # caption(optional) z18- (also has icon z15-, area z13-)
# === -9880

View File

@@ -229,7 +229,7 @@
@subway_label: #333333;
@indigenous_label: #6A512F;
@shop_label: #8C5678;
@industry_label: #907E9E;
@industry_label: #9482A3;
@food_label: #BA7141;
@entertainment_label: #D16B53;
@culture_label: #82512D;

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 19 19" width="19" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(.3312 .9588)"><circle cx="9" cy="9" fill="#fff" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#be75a3" r="8.25"/><path d="m7.44735 6.64155c.6266775 0 1.16175-.4049325 1.36425-.964125h2.49225v.4820625c0 .2651325.21693.4820625.4820625.4820625s.4820625-.21693.4820625-.4820625v-.4820625c.2651325 0 .4820625-.21693.4820625-.4820625s-.21693-.4820625-.4820625-.4820625h-3.456375c-.23139-.6507825-.9063-1.07985-1.65345-.935175-.5640075.1108725-1.02195.5736525-1.132875 1.137675-.16872.9159.530265 1.72575 1.422075 1.72575zm0-1.92825c.2651325 0 .4820625.21693.4820625.4820625s-.21693.4820625-.4820625.4820625-.4820625-.21693-.4820625-.4820625.21693-.4820625.4820625-.4820625zm-1.71484793 7.891702h7.01753543c-.3091683 1-.9781318 1.5-2.0068907 1.5h-3.48081229c-.71478849 0-1.3302781-.5043681-1.47074931-1.2052179zm3.18749793-4.99999999c.89379424.94861026 1.4893498 1.67776089 1.7866668 2.18745192.297317.50969107.6428103 1.28054037 1.03648 2.31254807h-2.62497531c.12331455-.8424798.18497182-1.538368.18497182-2.0876646 0-.54929651-.12771443-1.35340832-.38314331-2.41233539zm-.17685315 1.00499799-2.12 3.495002h2.12z" fill="#fff"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,9 +1 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>escape_game</title>
<g id="escape_game" stroke="none" fill="none">
<circle id="Oval" fill="#FFFFFF" fill-rule="nonzero" opacity="0.6" cx="9" cy="9" r="9"></circle>
<circle id="Oval" fill="#EB785D" fill-rule="nonzero" cx="9" cy="9" r="8.25"></circle>
<path d="M6.544,4.525 L6.543,5.199 L7.894,5.2 L7.894,6.55 L6.543,6.55 L6.54384181,9.2696041 C7.56205461,9.56229277 8.307,10.5006507 8.307,11.613 C8.307,12.9594702 7.21547022,14.051 5.869,14.051 C4.52252978,14.051 3.431,12.9594702 3.431,11.613 C3.431,10.5010171 4.17545473,9.56291094 5.19315214,9.26989353 L5.194,4.525 L6.544,4.525 Z M5.869,10.675 C5.3509569,10.675 4.931,11.0949569 4.931,11.613 C4.931,12.1310431 5.3509569,12.551 5.869,12.551 C6.3870431,12.551 6.807,12.1310431 6.807,11.613 C6.807,11.0949569 6.3870431,10.675 5.869,10.675 Z M12.506,11.275 L10.931,11.275 L10.925,10.868 C10.925,10.3653333 11.0083333,9.952 11.175,9.628 C11.341,9.304 11.633,8.893 12.132,8.487 L12.5637778,8.12833333 C12.807037,7.92033333 12.9611111,7.77455556 13.026,7.691 C13.176,7.493 13.251,7.274 13.251,7.034 C13.251,6.70266667 13.117,6.41933333 12.849,6.184 C12.585,5.94466667 12.2283333,5.825 11.779,5.825 C11.3456667,5.825 10.9833333,5.94866667 10.692,6.196 C10.4,6.443 10.246,6.82 10.137,7.326 L8.569,7.132 C8.61366667,6.40666667 8.92133333,5.791 9.492,5.285 C10.068,4.778 10.775,4.525 11.706,4.525 C12.687,4.525 13.421,4.782 13.999,5.297 C14.579,5.807 14.869,6.40266667 14.869,7.084 C14.869,7.46 14.7616667,7.81633333 14.547,8.153 C14.2678649,8.60277864 13.927713,9.01103812 13.5366594,9.36629677 L13.296,9.573 C12.936,9.873 12.711,10.1143333 12.621,10.297 C12.537,10.4783333 12.4986667,10.8043333 12.506,11.275 Z M10.819,13.525 L10.819,11.725 L12.619,11.725 L12.619,13.525 L10.819,13.525 Z" id="Shape" fill="#FFFFFF" fill-rule="evenodd"></path>
</g>
</svg>
<svg height="18" width="18" xmlns="http://www.w3.org/2000/svg"><circle cx="9" cy="9" fill="#fff" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#EB785D" r="8.25"/><path d="m5.194 4.525h1.35v5.4h-1.35z" fill="#fff" fill-rule="evenodd" stroke-width=".9"/><path d="m5.194 5.2h2.7v1.35h-2.7z" fill="#fff" fill-rule="evenodd" stroke-width=".9"/><circle cx="5.869" cy="11.613" fill="none" r="1.688" stroke="#fff" stroke-width="1.5"/><path d="m12.506 11.275h-1.575l-.006-.407q0-.754.25-1.24c.166-.324.458-.735.957-1.141q.748-.608.894-.796.225-.297.225-.657 0-.497-.402-.85-.396-.359-1.07-.359-.65 0-1.087.371c-.292.247-.446.624-.555 1.13l-1.568-.194q.067-1.088.923-1.847c.576-.507 1.283-.76 2.214-.76.981 0 1.715.257 2.293.772q.87.765.87 1.787 0 .564-.322 1.069a5.7 5.7 0 0 1 -1.251 1.42q-.54.45-.675.724-.126.272-.115.978m-1.687 2.25v-1.8h1.8v1.8z" fill="#fff" fill-rule="evenodd" stroke-width=".9"/></svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 901 B

View File

@@ -1 +0,0 @@
<svg height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle cx="9" cy="9" fill="#fff" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#eb785d" r="8.25"/><path d="m4.33219182 13.4602521c-.56625353-.145147-1.05995548-.6661354-1.19210692-1.258018-.08901014-.3987537-.02672993-.8612893.16530454-1.2277241.12702014-.2423618.39770557-.5208347.63150605-.6497263.3295444-.1816314.40961456-.1970143 1.12899472-.2169742.63145117-.0175177.6551594-.0202617.79691486-.0920999.08035554-.04072105.70197217-.49045301 1.3813886-.99942263.67941643-.50894766 1.24429795-.91666337 1.25538374-.90596174.01106385.01065224.01704578.81354355.01328649 1.78426388l-.00683807 1.76489119-1.06258973.792744c-.58441886.4360174-1.1343181.827044-1.22196172.8689725-.32774983.1566993-.47121206.1788709-1.14046468.1762641-.38992905-.0015367-.66223894-.0150646-.74883983-.0372582zm4.82934464-.0252997-.05776137-.0649397v-8.76545977l2.19822491-1.10462793 2.198225 1.11900654v8.77369176l-.0627116.0536399c-.0527947.0451499-.1065663.0536618-.3399057.0536618-.2588862 0-.2815024-.004577-.3423974-.0688966l-.0652031-.0688746v-1.9666855h-2.78928433v1.9824361l-.06148224.0610103c-.05507774.0546497-.09057971.0610103-.34071252.0610103-.25752517 0-.28371947-.005049-.33698616-.0649452zm3.52846524-6.90776623v-1.05221738h-2.78928432v2.10443476h2.78928432z" fill="#fff"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +1 @@
<svg height="19" viewBox="0 0 18 19" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(0 .9588)"><circle cx="9" cy="9" fill="#fff" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#0797b8" r="8.25"/><path d="m14.3284836 9.91216592c-.3125594 1.01096838-.8687086 1.68342498-1.6684475 2.01736998-.1656091-.072627-.3256156-.1651861-.4807525-.2805759-.950475.675-2.27887502.675-3.23467502 0-.950475.675-2.284275.675-3.223875 0-.27744671.2030098-.56714237.3353526-.8659383.4186755-.45689288-.1859843-.80641259-.5898173-.90791437-1.0962377l-.21230169-1.05923188zm-5.78195173-7.54816592.48488347.52149022.44267432.49043051c.84313944.94980132 1.43302404 1.71324441 1.76965374 2.29032927.4488396.76944648.9704078 1.93314626 1.5647046 3.49109933h-3.96274987c.18615974-1.27183553.27923961-2.32237144.27923961-3.15160773s-.19280196-2.04315016-.57840587-3.6417416zm-.26698338 1.51717831v5.27617102h-3.20042235zm5.55269401 9.95882169c-.5724075 0-1.1124-.13-1.62-.4-.9936.54-2.241.54-3.234675 0-.9936.54-2.241.54-3.223875 0-.6642075.3726-1.4256.427-2.16.4v-.88c.7614.027 1.4958-.054 2.16-.54.9396.675 2.2734.675 3.223875 0 .9558.675 2.2842.675 3.234675 0 .6534075.486 1.3932.567 2.1492.54v.88z" fill="#fff" fill-rule="evenodd"/></g></svg>
<svg height="18" viewBox="0 0 24 24" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle cx="12" cy="12" fill="#fff" opacity=".6" r="12"/><circle cx="12" cy="12" fill="#0797b8" r="11"/><path d="m5.5116 12.152 5.7601-8.2584v8.2584zm6.8401 0c.97201-2.7.84241-6.3288 0-9 3.4272 1.1088 6.0481 5.328 6.0913 9zm6.1921 2.5776c-.2952.4608-.64081.8568-1.044 1.1952-.46801-.2088-.88561-.5328-1.2168-.8928-1.0728 1.3896-3.24 1.3896-4.3129 0-1.0584 1.3896-3.24 1.3896-4.2985 0-.36.36-.75601.684-1.224.8928-.82081-.6768-1.44-1.6416-1.656-2.6928h14.357c-.1152.54-.3168 1.0368-.60481 1.4976m-.1008 4.2624c-.76321 0-1.4832-.18-2.16-.54-1.3248.72-2.988.72-4.3129 0-1.3248.72-2.988.72-4.2985 0-.88561.4968-1.9008.576-2.88.54v-1.44c1.0152.036 1.9944-.072 2.88-.72 1.2528.9 3.0312.9 4.2985 0 1.2744.9 3.0456.9 4.3129 0 .87121.648 1.8576.756 2.8656.72v1.44z" fill="#fff"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 878 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#1a5ec1" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#1a5ec1" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#309302" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#309302" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#e63534" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#e63534" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#c97600" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 905 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#c97600" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 905 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 19 19" width="19" xmlns="http://www.w3.org/2000/svg"><path d="m2.885 12.0615528 12.23 3.2475375h-12.23zm1.11669573-3.0534098 10.69279887 2.8651268c-.8793687 1.3974981-2.1028262 1.8862358-3.6703724 1.4662131l-5.30380311-1.4211498c-1.08914156-.2918346-1.82105491-1.311646-1.74895082-2.43690057zm6.89827777-6.31723332.3483726.65749533c.7729657 1.48426312 1.2666065 2.61927763 1.4809223 3.40504355.2449323.89801819.4566462 2.21363954.6351416 3.94686404l-3.99974232-1.07172772c.53186611-1.23336117.90993282-2.26853038 1.13420022-3.10550762.2242674-.83697725.3579692-2.11436644.4011056-3.83216758zm-.6797974 1.45913545-1.4269431 5.32542429-3.23029843-.86555585z" fill="#747e86" transform="translate(.6688 .9588)"/></svg>

Before

Width:  |  Height:  |  Size: 744 B

View File

@@ -1 +1,7 @@
<svg height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><path d="m6.64671389 3.10072399 4.64689821 2.90418648-1.74258684.00012489v3.50840813l1.16109904-.73671178v1.92381589l-1.16109904.768305v3.8301576h-5.80862274v-9.29397484l-1.74258682-.00012489zm6.09842831 4.3876552v1.86805307l-1.1617245.76789994v-1.89941965zm-4.93670376-.90257077h-2.3234491v3.48526288h2.3234491zm6.36104506.00008921.8303322 1.28040112-1.3833801.91391814v-1.84365686z" fill="#747e86"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>toll_booth-m</title>
<g id="toll_booth-m" stroke="none" fill="none" fill-rule="nonzero">
<path d="M6.60018429,3 L3.60018429,4.8 L3.60018429,13.8 L3.00018429,13.8 L3.00018429,15 L10.2001843,15 L10.2001843,13.8 L9.60018429,13.8 L9.60018429,11.0437714 L10.4439386,10.5000171 L10.3126929,9.18756 L9.60019286,9.61880571 L9.60019286,4.80003429 L6.60019286,3 L6.60018429,3 Z M4.80018429,6 L8.40018429,6 L8.40018429,10.2 L4.80018429,10.2 L4.80018429,6 L4.80018429,6 Z M14.3436129,6.6 L13.8561129,6.9 L13.9873586,8.21245714 L14.9998157,7.61245714 L14.34357,6.6 L14.3436129,6.6 Z M13.3123843,7.2 L12.2999271,7.85624571 L12.4124271,9.18747429 L13.4436557,8.51247429 L13.31241,7.2 L13.3123843,7.2 Z M11.8123843,8.15622857 L10.7999271,8.81247429 L10.9124271,10.1437029 L11.9436557,9.48745714 L11.81241,8.15622857 L11.8123843,8.15622857 Z" id="Shape" fill="#747E86"></path>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 490 B

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +1,7 @@
<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m4.49576922.7499232 4 2.4998925-1.5.0001075v3.02l.99946155-.63415358v1.656l-.99946155.66134875v3.29695843h-5v-8.0001536l-1.49999999-.0001075zm5.24946155 3.77684642v1.608l-1 .661v-1.635zm-4.24946155-.77692321h-2v3.00007679h2zm5.47551918.00007679.7147411 1.10215552-1.1907987.7866909v-1.587z" fill="#747e86"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="12px" height="12px" viewBox="0 0 12 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>toll_booth-s</title>
<g id="toll_booth-s" stroke="none" fill="none" fill-rule="nonzero">
<path d="M4.50856084,0.999846424 L7.00863763,2.49992107 L7.00863763,6.51568727 L10.9615733,3.99993857 L11.5084615,4.84367877 L7.00863048,7.70319517 L7.00863048,10.0001229 L7.50864584,10.0001229 L7.50864584,11.0001536 L1.50846155,11.0001536 L1.50846155,10.0001229 L2.00847691,10.0001229 L2.00847691,2.4998925 L4.50856084,0.999846424 Z M6.00859977,3.49992321 L3.00850762,3.49992321 L3.00850762,7.00003072 L6.00859977,7.00003072 L6.00859977,3.49992321 Z" id="Shape" fill="#747E86"></path>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 405 B

After

Width:  |  Height:  |  Size: 797 B

View File

@@ -1 +0,0 @@
<svg height="18" viewBox="0 0 19 18" width="19" xmlns="http://www.w3.org/2000/svg"><path d="m7.33124024 14.0849349.37500187-.5625h-.95625l-1.125 1.6875h.35416688c.37614937 0 .727425-.1879875.93605625-.5009625l.04102537-.0615375h4.08751879l.0410253.0615375c.2086482.312975.5599069.5009625.9360563.5009625h.3541669l-1.125-1.6875h-.95625l.3750018.5625zm.19884375-7.87500002h2.93979371c.90675 0 1.6513875.71656875 1.6862625 1.62264375l.1739082 4.52159997c.0222862.5794951-.3977995 1.073387-.9587146 1.1561005l-.1438562.0119417-4.43342261.0002141c-.579915 0-1.057322-.4387607-1.11839886-1.0024188l-.00576993-.1658206.17390813-4.52160017c.03291306-.8557375.69896291-1.542455 1.53673222-1.61611578zm-.2607975 1.40623031c-.293265 0-.5373225.22532907-.56071125.51766032l-.13678875 1.73235656c0 .31065753.2518425.56250003.5625.56250003l3.75384621-.0004472.0224103-.0013416c.3096732-.0247736.5406244-.2958919.5158519-.60558748l-.135-1.6875c-.0233887-.29233125-.2674406-.51764063-.5607112-.51764063zm.04320281 4.78126971c.3106575 0 .5625-.2518425.5625-.5625s-.2518425-.5625-.5625-.5625-.5625.2518425-.5625.5625.2518425.5625.5625.5625zm3.375 0c.3106575 0 .5625-.2518425.5625-.5625s-.2518425-.5625-.5625-.5625-.5625.2518425-.5625.5625.2518425.5625.5625.5625zm-2.671875-5.62500002c-.07766437 0-.140625.06296062-.140625.140625s.06296063.140625.140625.140625h1.96875003c.07766437 0 .14062497-.06296062.14062497-.140625s-.0629606-.140625-.14062497-.140625zm-4.2392211-1.60024446 5.2236068-2.6118034 5.2236068 2.6118034c.2469892.12349462.3471014.42383114.2236068.67082039s-.4238311.34710142-.6708204.2236068l-4.7763932-2.3882136-4.7763932 2.3882136c-.219546.109773-.48124293.04286902-.62342158-.1468222l-.04739882-.0767846c-.12349462-.24698925-.02338245-.54732577.2236068-.67082039z" fill="#747e86" transform="translate(.6869)"/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -402,7 +402,7 @@ building # area z14- (also has captio
building-garage # area z14- (also has caption z17-)
building-guardhouse # area z14- (also has icon z16-, caption(optional) z18-)
building-has_parts # area z14- (also has caption z17-)
building-train_station # area z14- (also has icon z17-, caption(optional) z17-)
building-train_station # area z14- (also has caption z17-)
=== 130
piste:type-connection # line z15-

View File

@@ -773,7 +773,6 @@ shop-health_food # icon z16- (also has captio
=== 2700
amenity-bicycle_rental # icon z17- (also has caption(optional) z17-)
amenity-boat_rental # icon z17- (also has caption(optional) z17-)
amenity-car_sharing # icon z18- (also has caption(optional) z18-)
amenity-taxi # icon z16- (also has caption(optional) z16-)
=== 2600
@@ -867,7 +866,6 @@ shop-shoes # icon z16- (also has captio
shop-sports # icon z16- (also has caption(optional) z16-)
shop-stationery # icon z16- (also has caption(optional) z16-)
shop-tea # icon z18- (also has caption(optional) z18-)
shop-telecommunication # icon z16- (also has caption(optional) z16-)
shop-toys # icon z16- (also has caption(optional) z16-)
shop-travel_agency # icon z18- (also has caption(optional) z18-)
shop-wine # icon z16- (also has caption(optional) z16-)
@@ -918,7 +916,7 @@ natural-wetland-tidalflat # caption z16- (also has are
tourism-picnic_site # icon z14- (also has caption(optional) z14-)
=== 1800
building-train_station # icon z17- (also has caption(optional) z17-, area z14-)
building-train_station # caption z17- (also has area z14-)
railway-level_crossing # icon z17-
=== 1700
@@ -968,10 +966,8 @@ amenity-childcare # icon z17- (also has captio
amenity-doctors # icon z17- (also has caption(optional) z17-, area z15-)
amenity-driving_school # icon z17- (also has caption(optional) z17-)
amenity-language_school # icon z17- (also has caption(optional) z17-)
amenity-mobile_money_agent # icon z17- (also has caption(optional) z18-)
amenity-money_transfer # icon z17- (also has caption(optional) z18-)
amenity-music_school # icon z17- (also has caption(optional) z17-)
amenity-payment_centre # icon z17- (also has caption(optional) z18-)
amenity-recycling-centre # icon z16- (also has caption(optional) z16-, area z15-)
amenity-veterinary # icon z16- (also has caption(optional) z16-)
craft-electrician # icon z17- (also has caption(optional) z18-)
@@ -1205,7 +1201,6 @@ healthcare-psychotherapist # icon z17- (also has captio
healthcare-speech_therapist # icon z17- (also has caption(optional) z17-)
leisure-adult_gaming_centre # icon z17- (also has caption(optional) z17-)
leisure-amusement_arcade # icon z17- (also has caption(optional) z17-)
leisure-indoor_play # icon z17- (also has caption(optional) z17-)
office-company # icon z18- (also has caption(optional) z18-)
office-ngo # icon z18- (also has caption(optional) z18-)
office-telecommunication # icon z18- (also has caption(optional) z18-)
@@ -1324,7 +1319,7 @@ landuse-railway # caption z15- (also has are
landuse-residential # caption z17-
landuse-retail # caption z16- (also has area z13-)
leisure-common # caption z17-
leisure-slipway # icon z17- (also has caption(optional) z17-)
leisure-slipway # caption z17-
leisure-track # caption z16- (also has line z15-)
leisure-track-area # caption z16- (also has area z15-)
man_made-petroleum_well # icon z14- (also has caption(optional) z18-)
@@ -1818,7 +1813,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# === -7300
# amenity-bicycle_rental # caption(optional) z17- (also has icon z17-)
# amenity-boat_rental # caption(optional) z17- (also has icon z17-)
# amenity-car_sharing # caption(optional) z18- (also has icon z18-)
# amenity-taxi # caption(optional) z16- (also has icon z16-)
# === -7400
@@ -1908,7 +1902,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# shop-sports # caption(optional) z16- (also has icon z16-)
# shop-stationery # caption(optional) z16- (also has icon z16-)
# shop-tea # caption(optional) z18- (also has icon z18-)
# shop-telecommunication # caption(optional) z16- (also has icon z16-)
# shop-toys # caption(optional) z16- (also has icon z16-)
# shop-travel_agency # caption(optional) z18- (also has icon z18-)
# shop-wine # caption(optional) z16- (also has icon z16-)
@@ -1944,9 +1937,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# tourism-picnic_site # caption(optional) z14- (also has icon z14-)
# === -8200
# building-train_station # caption(optional) z17- (also has icon z17-, area z14-)
# === -8300
# leisure-sports_centre-sport-swimming # caption(optional) z15- (also has icon z15-, area z13-)
# === -8380
@@ -1990,10 +1980,8 @@ leisure-swimming_pool-private # icon z17- (also has captio
# amenity-doctors # caption(optional) z17- (also has icon z17-, area z15-)
# amenity-driving_school # caption(optional) z17- (also has icon z17-)
# amenity-language_school # caption(optional) z17- (also has icon z17-)
# amenity-mobile_money_agent # caption(optional) z18- (also has icon z17-)
# amenity-money_transfer # caption(optional) z18- (also has icon z17-)
# amenity-music_school # caption(optional) z17- (also has icon z17-)
# amenity-payment_centre # caption(optional) z18- (also has icon z17-)
# amenity-recycling-centre # caption(optional) z16- (also has icon z16-, area z15-)
# amenity-veterinary # caption(optional) z16- (also has icon z16-)
# craft-electrician # caption(optional) z18- (also has icon z17-)
@@ -2205,7 +2193,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# healthcare-speech_therapist # caption(optional) z17- (also has icon z17-)
# leisure-adult_gaming_centre # caption(optional) z17- (also has icon z17-)
# leisure-amusement_arcade # caption(optional) z17- (also has icon z17-)
# leisure-indoor_play # caption(optional) z17- (also has icon z17-)
# office-company # caption(optional) z18- (also has icon z18-)
# office-ngo # caption(optional) z18- (also has icon z18-)
# office-telecommunication # caption(optional) z18- (also has icon z18-)
@@ -2297,7 +2284,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# landuse-industrial-mine # caption(optional) z15- (also has icon z15-, area z13-)
# landuse-landfill # caption(optional) z15- (also has icon z15-, area z13-)
# landuse-quarry # caption(optional) z15- (also has icon z15-, area z13-)
# leisure-slipway # caption(optional) z17- (also has icon z17-)
# man_made-petroleum_well # caption(optional) z18- (also has icon z14-)
# power-generator-wind # caption(optional) z16- (also has icon z13-, area z13-)
# === -9880

View File

@@ -29,7 +29,6 @@ static NSString *didChangeOutdoorMapStyle = @"didChangeOutdoorMapStyle";
if (self) {
_observers = [NSHashTable weakObjectsHashTable];
GetFramework().GetTrafficManager().SetStateListener([self](TrafficManager::TrafficState state) {
[NSNotificationCenter.defaultCenter postNotificationName:@"LayersChanged" object:nil];
for (id<MWMMapOverlayManagerObserver> observer in self.observers) {
if ([observer respondsToSelector:@selector(onTrafficStateUpdated)]) {
[observer onTrafficStateUpdated];
@@ -37,7 +36,6 @@ static NSString *didChangeOutdoorMapStyle = @"didChangeOutdoorMapStyle";
}
});
GetFramework().GetTransitManager().SetStateListener([self](TransitReadManager::TransitSchemeState state) {
[NSNotificationCenter.defaultCenter postNotificationName:@"LayersChanged" object:nil];
for (id<MWMMapOverlayManagerObserver> observer in self.observers) {
if ([observer respondsToSelector:@selector(onTransitStateUpdated)]) {
[observer onTransitStateUpdated];
@@ -45,7 +43,6 @@ static NSString *didChangeOutdoorMapStyle = @"didChangeOutdoorMapStyle";
}
});
GetFramework().GetIsolinesManager().SetStateListener([self](IsolinesManager::IsolinesState state) {
[NSNotificationCenter.defaultCenter postNotificationName:@"LayersChanged" object:nil];
for (id<MWMMapOverlayManagerObserver> observer in self.observers) {
if ([observer respondsToSelector:@selector(onIsoLinesStateUpdated)]) {
[observer onIsoLinesStateUpdated];
@@ -53,7 +50,6 @@ static NSString *didChangeOutdoorMapStyle = @"didChangeOutdoorMapStyle";
}
});
[NSNotificationCenter.defaultCenter addObserverForName:didChangeOutdoorMapStyle object:nil queue:nil usingBlock:^(NSNotification * _Nonnull notification) {
[NSNotificationCenter.defaultCenter postNotificationName:@"LayersChanged" object:nil];
for (id<MWMMapOverlayManagerObserver> observer in self.observers) {
if ([observer respondsToSelector:@selector(onOutdoorStateUpdated)]) {
[observer onOutdoorStateUpdated];

View File

@@ -10,7 +10,6 @@
#import <CoreApi/CoreApi.h>
#import "Controls.h"
#import "DeepLinkRouteStrategyAdapter.h"
#import "EAGLView.h"
#import "FirstSession.h"

View File

@@ -16,13 +16,6 @@ import UIKit
routinOptionsBridgeController.view.backgroundColor = .systemGroupedBackground
return routinOptionsBridgeController
}
/// The `ControlsView` for presentation in an alert
@objc static func mapControls() -> UIViewController {
let controlsBridgeController = UIHostingController(rootView: ControlsView())
controlsBridgeController.view.backgroundColor = .clear
return controlsBridgeController
}
}

View File

@@ -1,11 +0,0 @@
NS_SWIFT_NAME(Controls)
@interface Controls : NSObject
+ (void)zoomIn;
+ (void)zoomOut;
+ (void)switchToNextPositionMode;
+ (NSString *)positionModeRawValue;
+ (Controls *)shared;
- (bool)hasMainButtons;
@end

View File

@@ -1,75 +0,0 @@
#import "Controls.h"
#import "SwiftBridge.h"
#include <CoreApi/Framework.h>
@implementation Controls
static Controls *shared = nil;
+ (Controls *)shared
{
if (shared == nil)
{
shared = [[super allocWithZone:NULL] init];
}
return shared;
}
+ (id)allocWithZone:(NSZone *)zone
{
return [self shared];
}
- (id)copyWithZone:(NSZone *)zone
{
return self;
}
- (id)init
{
self = [super init];
if (self != nil)
{
// Initialize instance variables here
}
return self;
}
+ (void)zoomIn;
{
GetFramework().Scale(Framework::SCALE_MAG, true);
}
+ (void)zoomOut;
{
GetFramework().Scale(Framework::SCALE_MIN, true);
}
+ (NSString *)positionModeRawValue;
{
location::EMyPositionMode mode = GetFramework().GetMyPositionMode();
switch (mode)
{
case location::EMyPositionMode::NotFollowNoPosition: return @"Locate";
case location::EMyPositionMode::NotFollow: return @"Locate";
case location::EMyPositionMode::PendingPosition: return @"Locating";
case location::EMyPositionMode::Follow: return @"Following";
case location::EMyPositionMode::FollowAndRotate: return @"FollowingAndRotated";
}
return @"Locate";
}
+ (void)switchToNextPositionMode;
{
[MWMLocationManager enableLocationAlert];
GetFramework().SwitchMyPositionNextMode();
}
- (bool)hasMainButtons;
{
return true;
}
@end

View File

@@ -1,12 +0,0 @@
extension Controls {
@objc static let changeChangeTrackRecordingNotificationName: Notification.Name = Notification.Name(rawValue: "ChangeTrackRecording")
/// The notification name for switching position mode
@objc static let switchPositionModeNotificationName: Notification.Name = Notification.Name(rawValue: "SwitchPositionMode")
@objc static let changeVisibilityMainButtonsNotificationName: Notification.Name = Notification.Name(rawValue: "ChangeVisibilityMainButtons")
static var positionMode: MapPositionButton.Mode {
return MapPositionButton.Mode(rawValue: Controls.positionModeRawValue()) ?? .locate
}
}

View File

@@ -3,6 +3,7 @@
#import "MWMNavigationDashboardManager.h"
@class MapViewController;
@class BottomTabBarViewController;
@class TrackRecordingButtonViewController;
@class SearchQuery;
@@ -25,7 +26,7 @@ typedef NS_ENUM(NSUInteger, TrackRecordingButtonState) {
@property(nonatomic) MWMBottomMenuState menuState;
@property(nonatomic) MWMBottomMenuState menuRestoreState;
@property(nonatomic) BOOL isDirectionViewHidden;
@property(nonatomic) UIViewController * tabBarController;
@property(nonatomic) BottomTabBarViewController * tabBarController;
@property(nonatomic) TrackRecordingButtonViewController * trackRecordingButton;
- (instancetype)init __attribute__((unavailable("init is not available")));

View File

@@ -64,9 +64,6 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
self.menuRestoreState = MWMBottomMenuStateInactive;
self.isAddingPlace = NO;
self.searchManager = controller.searchManager;
[self tabBarController];
return self;
}
@@ -223,20 +220,13 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
return _trafficButton;
}
- (UIViewController *)tabBarController {
- (BottomTabBarViewController *)tabBarController {
if (!_tabBarController) {
MapViewController * ownerController = _ownerController;
_tabBarController = [BridgeControllers mapControls];
_tabBarController = [BottomTabBarBuilder buildWithMapViewController:ownerController controlsManager:self];
[ownerController addChildViewController:_tabBarController];
UIView * tabBarViewSuperView = ownerController.controlsView;
[tabBarViewSuperView addSubview:_tabBarController.view];
_tabBarController.view.translatesAutoresizingMaskIntoConstraints = NO;
[NSLayoutConstraint activateConstraints:@[
[tabBarViewSuperView.topAnchor constraintEqualToAnchor:_tabBarController.view.topAnchor],
[tabBarViewSuperView.leadingAnchor constraintEqualToAnchor:_tabBarController.view.leadingAnchor],
[tabBarViewSuperView.bottomAnchor constraintEqualToAnchor:_tabBarController.view.bottomAnchor],
[tabBarViewSuperView.trailingAnchor constraintEqualToAnchor:_tabBarController.view.trailingAnchor]
]];
}
return _tabBarController;
@@ -299,7 +289,7 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
MapViewController * ownerController = _ownerController;
switch (_menuState) {
case MWMBottomMenuStateActive:
_tabBarController.view.hidden = NO;
_tabBarController.isHidden = NO;
if (_menuController == nil) {
_menuController = [BottomMenuBuilder buildMenuWithMapViewController:ownerController
controlsManager:self
@@ -308,7 +298,7 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
}
break;
case MWMBottomMenuStateLayers:
_tabBarController.view.hidden = NO;
_tabBarController.isHidden = NO;
if (_menuController == nil) {
_menuController = [BottomMenuBuilder buildLayersWithMapViewController:ownerController
controlsManager:self
@@ -317,14 +307,14 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
}
break;
case MWMBottomMenuStateInactive:
_tabBarController.view.hidden = NO;
_tabBarController.isHidden = NO;
if (_menuController != nil) {
[_menuController dismissViewControllerAnimated:YES completion:nil];
_menuController = nil;
}
break;
case MWMBottomMenuStateHidden:
_tabBarController.view.hidden = YES;
_tabBarController.isHidden = YES;
if (_menuController != nil) {
[_menuController dismissViewControllerAnimated:YES completion:nil];
_menuController = nil;

View File

@@ -1,9 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@@ -16,12 +18,12 @@
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WVx-0E-RoH" customClass="MWMButton" propertyAccessControl="all">
<rect key="frame" x="0.0" y="0.0" width="56" height="56"/>
<viewLayoutGuide key="safeArea" id="iUc-A7-STp"/>
<accessibility key="accessibilityConfiguration" identifier="layers_button"/>
<constraints>
<constraint firstAttribute="height" constant="56" id="24f-V4-Vuf"/>
<constraint firstAttribute="width" constant="56" id="hko-xz-hRz"/>
</constraints>
<viewLayoutGuide key="safeArea" id="iUc-A7-STp"/>
<state key="normal" image="btn_traffic_on_light"/>
<connections>
<action selector="buttonTouchUpInside" destination="-1" eventType="touchUpInside" id="fKZ-g8-4ML"/>

View File

@@ -314,7 +314,7 @@ NSString *const kNavigationControlViewXibName = @"NavigationControlView";
[[MapViewController sharedController] updateStatusBarStyle];
// Restore bottom buttons only if they were not already hidden by tapping anywhere on an empty map.
if (!MWMMapViewControlsManager.manager.hidden)
MWMMapViewControlsManager.manager.tabBarController.view.hidden = state != MWMNavigationDashboardStateHidden;
BottomTabBarViewController.controller.isHidden = state != MWMNavigationDashboardStateHidden;
}
@synthesize routePreview = _routePreview;

View File

@@ -28,6 +28,7 @@
- (void)performAction:(NSString *_Nonnull)action;
- (void)openMenu;
- (void)openSettings;
- (void)openAbout;
- (void)openMapsDownloader:(MWMMapDownloaderMode)mode;

View File

@@ -574,6 +574,10 @@ NSString *const kAboutSegue = @"Map2About";
}
#pragma mark - Open controllers
- (void)openMenu {
[self.controlsManager.tabBarController onMenuButtonPressed:self];
}
- (void)openSettings {
[self performSegueWithIdentifier:kSettingsSegue sender:nil];
}
@@ -632,7 +636,6 @@ NSString *const kAboutSegue = @"Map2About";
self.disableStandbyOnLocationStateMode = YES;
break;
}
[NSNotificationCenter.defaultCenter postNotificationName:Controls.switchPositionModeNotificationName object:nil];
}
#pragma mark - MWMFrameworkDrapeObserver

View File

@@ -299,8 +299,10 @@ void InitLocalizedStrings() {
- (void)updateApplicationIconBadgeNumber {
auto const number = [self badgeNumber];
// Delay init because BottomTabBarViewController.controller is null here.
dispatch_async(dispatch_get_main_queue(), ^{
[UIApplication.sharedApplication setApplicationIconBadgeNumber:number];
BottomTabBarViewController.controller.isApplicationBadgeHidden = (number == 0);
});
}

View File

@@ -121,8 +121,8 @@
}
return true
case .menu:
// Not supported on iOS.
return false
MapsAppDelegate.theApp().mapViewController.openMenu()
return true
case .settings:
MapsAppDelegate.theApp().mapViewController.openSettings()
return true

View File

@@ -228,7 +228,6 @@ extension TrackRecordingManager: TrackRecordingObservable {
@objc
private func notifyObservers() {
NotificationCenter.default.post(name: Controls.changeChangeTrackRecordingNotificationName, object: nil)
observations.removeAll { $0.observer == nil }
observations.forEach {
$0.recordingStateDidChangeHandler?(recordingState, trackRecordingInfo, { self.trackRecordingElevationProfileData })

View File

@@ -26,7 +26,6 @@
"type.amenity.bench" = "Sitzbank";
"type.amenity.bench.backless" = "Sitzbank ohne Rückenlehne";
"type.amenity.bicycle_parking" = "Fahrradständer";
"type.amenity.boat_rental" = "Bootsverleih";
"type.amenity.bicycle_rental" = "Fahrradverleih";
"type.amenity.bicycle_repair_station" = "Fahrrad-Reparaturstation";
"type.amenity.biergarten" = "Biergarten";
@@ -723,7 +722,7 @@
"type.leisure.sports_centre.sport.multi" = "Sportzentrum";
"type.leisure.sports_centre.sport.american_football" = "Sportzentrum";
"type.leisure.sports_centre.sport.archery" = "Sportzentrum";
"type.leisure.sports_centre.sport.athletics" = "Sportzentrum";
"type.leisure.sports_centre.sport.athletics" = "Sportzentrume";
"type.leisure.sports_centre.sport.australian_football" = "Sportzentrum";
"type.leisure.sports_centre.sport.badminton" = "Sportzentrum";
"type.leisure.sports_centre.sport.baseball" = "Sportzentrum";
@@ -1504,7 +1503,7 @@
"type.highway.ladder" = "Leiter";
"type.landuse.plant_nursery" = "Gärtnerei";
"type.leisure.firepit" = "Feuerstelle";
"type.amenity.studio" = "Medienstudio";
"type.amenity.studio" = "Studio";
"type.man_made.crane" = "Kran";
"type.railway.station.subway.qingdao" = "U-Bahn-Station";
"type.natural.wetland.saltmarsh" = "Salzmarsch";

View File

@@ -26,7 +26,6 @@
"type.amenity.bench" = "Bench";
"type.amenity.bench.backless" = "Backless Bench";
"type.amenity.bicycle_parking" = "Bicycle Parking";
"type.amenity.boat_rental" = "Boat Rental";
"type.amenity.bicycle_rental" = "Bicycle Rental";
"type.amenity.bicycle_repair_station" = "Bicycle Repair Station";
"type.amenity.biergarten" = "Biergarten";
@@ -85,7 +84,6 @@
"type.amenity.library" = "Library";
"type.amenity.loading_dock" = "Loading Bay";
"type.amenity.lounger" = "Lounger";
"type.amenity.mobile_money_agent" = "Mobile Money Agent";
"type.amenity.marketplace" = "Marketplace";
"type.amenity.motorcycle_parking" = "Motorcycle Parking";
"type.amenity.nightclub" = "Nightclub";
@@ -115,7 +113,6 @@
"type.amenity.parking_space.private" = "Parking Space";
"type.amenity.parking_space.underground" = "Parking Space";
"type.amenity.parking_space.disabled" = "Disabled Parking Space";
"type.amenity.payment_centre" = "Payment Centre";
"type.amenity.payment_terminal" = "Payment Terminal";
"type.amenity.pharmacy" = "Pharmacy";
"type.amenity.place_of_worship" = "Place of Worship";
@@ -709,7 +706,6 @@
"type.leisure.miniature_golf" = "Minigolf";
"type.leisure.hackerspace" = "Hackerspace";
"type.leisure.ice_rink" = "Ice Rink";
"type.leisure.indoor_play" = "Indoor Play Centre";
"type.leisure.marina" = "Marina";
"type.leisure.nature_reserve" = "Nature Reserve";
"type.leisure.outdoor_seating" = "Outdoor Seating";
@@ -1310,7 +1306,6 @@
"type.shop.supermarket" = "Supermarket";
"type.shop.tattoo" = "Tattoo Parlour";
"type.shop.tea" = "Tea Shop";
"type.shop.telecommunication" = "Telecommunication Shop";
"type.shop.ticket" = "Ticket Shop";
"type.shop.toys" = "Toy Shop";
"type.shop.travel_agency" = "Travel Agency";

View File

@@ -288,10 +288,6 @@
"placepage_distance" = "Distance";
"search_show_on_map" = "View on map";
/* Button title */
"zoom_in" = "Zoom In";
"zoom_out" = "Zoom Out";
/* Text in menu */
"website" = "Website";

View File

@@ -31,7 +31,6 @@
"type.amenity.bench.backless" = "Backless Bench";
"type.amenity.bicycle_parking" = "Bicycle Parking";
"type.amenity.bicycle_parking.covered" = "Covered Bicycle Parking";
"type.amenity.boat_rental" = "Boat Rental";
"type.amenity.bicycle_rental" = "Bicycle Rental";
"type.amenity.bicycle_repair_station" = "Bicycle Repair Station";
"type.amenity.biergarten" = "Biergarten";
@@ -97,7 +96,6 @@
"type.amenity.lounger" = "Lounger";
"type.amenity.luggage_locker" = "Luggage Locker";
"type.amenity.marketplace" = "Marketplace";
"type.amenity.mobile_money_agent" = "Mobile Money Agent";
"type.amenity.motorcycle_parking" = "Motorcycle Parking";
"type.amenity.nightclub" = "Nightclub";
"type.amenity.nursing_home" = "Nursing Home";
@@ -127,7 +125,6 @@
"type.amenity.parking_space.underground" = "Parking Space";
"type.amenity.parking_space.disabled" = "Disabled Parking Space";
"type.amenity.payment_terminal" = "Payment Terminal";
"type.amenity.payment_centre" = "Payment Centre";
"type.amenity.pharmacy" = "Pharmacy";
"type.amenity.place_of_worship" = "Place of Worship";
"type.amenity.place_of_worship.buddhist" = "Buddhist Temple";
@@ -739,7 +736,6 @@
"type.leisure.miniature_golf" = "Minigolf";
"type.leisure.hackerspace" = "Hackerspace";
"type.leisure.ice_rink" = "Ice Rink";
"type.leisure.indoor_play" = "Indoor Play Centre";
"type.leisure.marina" = "Marina";
"type.leisure.nature_reserve" = "Nature Reserve";
"type.leisure.outdoor_seating" = "Outdoor Seating";
@@ -1350,7 +1346,6 @@
"type.shop.supermarket" = "Supermarket";
"type.shop.tattoo" = "Tattoo Parlour";
"type.shop.tea" = "Tea Shop";
"type.shop.telecommunication" = "Telecommunication Shop";
"type.shop.ticket" = "Ticket Shop";
"type.shop.toys" = "Toy Store";
"type.shop.travel_agency" = "Travel Agency";

View File

@@ -30,10 +30,9 @@
27697F902E257EDA00FBD913 /* AboutCoMapsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27697F8F2E257ED800FBD913 /* AboutCoMapsView.swift */; };
27697F922E257EED00FBD913 /* ApoutOpenStreetMapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27697F912E257EE600FBD913 /* ApoutOpenStreetMapView.swift */; };
27768FDB2E20199A0086784A /* RoutingOptionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27768FD92E20199A0086784A /* RoutingOptionsView.swift */; };
27768FE02E201BE60086784A /* LeftButtonType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27768FDF2E201BE60086784A /* LeftButtonType.swift */; };
279367562E1BE16300AA5C3D /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279367552E1BE16300AA5C3D /* Settings.swift */; };
2793675A2E1BE17300AA5C3D /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279367592E1BE17300AA5C3D /* SettingsView.swift */; };
279387C42E4C8EB7009FDF8B /* MapPositionButtonMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279387C12E4C8EB6009FDF8B /* MapPositionButtonMode.swift */; };
279387C62E4C918A009FDF8B /* Controls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279387C52E4C9187009FDF8B /* Controls.swift */; };
27AF184C2E1D5B2D00CD41E2 /* SettingsNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF184B2E1D5A2700CD41E2 /* SettingsNavigationView.swift */; };
27AF18502E1DB61600CD41E2 /* VoiceRoutingLanguage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF184F2E1DB61500CD41E2 /* VoiceRoutingLanguage.swift */; };
27AF18522E1DB62000CD41E2 /* DistanceUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18512E1DB61F00CD41E2 /* DistanceUnit.swift */; };
@@ -41,18 +40,6 @@
27AF18562E1DB63000CD41E2 /* PowerSavingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */; };
27AF18582E1DB63A00CD41E2 /* Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18572E1DB63900CD41E2 /* Appearance.swift */; };
27AF185A2E1DB64500CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */; };
27BDA4862E4366AC00C478B8 /* MapLayerButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4852E4366A600C478B8 /* MapLayerButton.swift */; };
27BDA4882E4366C600C478B8 /* MapPositionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4872E4366B600C478B8 /* MapPositionButton.swift */; };
27BDA48A2E4366F400C478B8 /* MainButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4892E4366EC00C478B8 /* MainButton.swift */; };
27BDA48C2E43670300C478B8 /* MapZoomButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA48B2E4366FB00C478B8 /* MapZoomButton.swift */; };
27BDA4902E436A1B00C478B8 /* MapZoomButtonKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA48F2E436A1600C478B8 /* MapZoomButtonKind.swift */; };
27BDA4A22E436D1900C478B8 /* MainButtonType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4A12E436D1100C478B8 /* MainButtonType.swift */; };
27BDA4A62E437B5200C478B8 /* BottomTabBarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4A52E437B5200C478B8 /* BottomTabBarButton.swift */; };
27BDA4A82E437F9800C478B8 /* ControlsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4A72E437F8E00C478B8 /* ControlsView.swift */; };
27BDA4AA2E437FEF00C478B8 /* MapTrackRecordingButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4A92E437FE400C478B8 /* MapTrackRecordingButton.swift */; };
27E5CAAD2E4B644100FA3597 /* FloatingButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27E5CAAA2E4B643A00FA3597 /* FloatingButtonStyle.swift */; };
27E5CAAF2E4B6CBC00FA3597 /* Controls.h in Sources */ = {isa = PBXBuildFile; fileRef = 27E5CAAE2E4B6CB800FA3597 /* Controls.h */; };
27E5CAB12E4B6D0300FA3597 /* Controls.mm in Sources */ = {isa = PBXBuildFile; fileRef = 27E5CAB02E4B6CFC00FA3597 /* Controls.mm */; };
3304306D21D4EAFB00317CA3 /* SearchCategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3304306C21D4EAFB00317CA3 /* SearchCategoryCell.swift */; };
33046832219C57180041F3A8 /* CategorySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33046831219C57180041F3A8 /* CategorySettingsViewController.swift */; };
337F98A621D37B7400C8AC27 /* SearchTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 337F98A521D37B7400C8AC27 /* SearchTabViewController.swift */; };
@@ -128,6 +115,7 @@
349A13831DEC138C00C7DB60 /* MWMMobileInternetAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = 349A13801DEC138C00C7DB60 /* MWMMobileInternetAlert.m */; };
349A13851DEC138C00C7DB60 /* MWMMobileInternetAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349A13811DEC138C00C7DB60 /* MWMMobileInternetAlert.xib */; };
349D1AD51E2E325B004A2006 /* BottomMenuItemCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349D1AC61E2E325B004A2006 /* BottomMenuItemCell.xib */; };
349D1AE11E2E325C004A2006 /* BottomTabBarViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349D1ACD1E2E325B004A2006 /* BottomTabBarViewController.xib */; };
349D1CE41E3F836900A878FD /* UIViewController+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349D1CE21E3F836900A878FD /* UIViewController+Hierarchy.swift */; };
34AB39C21D2BD8310021857D /* MWMStopButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 34AB39C01D2BD8310021857D /* MWMStopButton.m */; };
34AB66051FC5AA320078E451 /* MWMNavigationDashboardManager+Entity.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AB65C51FC5AA320078E451 /* MWMNavigationDashboardManager+Entity.mm */; };
@@ -338,6 +326,11 @@
8C4FB9C72BEFEFF400D44877 /* CarPlayWindowScaleAdjuster.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C4FB9C62BEFEFF400D44877 /* CarPlayWindowScaleAdjuster.swift */; };
8CB13C3B2BF1276A004288F2 /* CarplayPlaceholderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CB13C3A2BF1276A004288F2 /* CarplayPlaceholderView.swift */; };
99012847243F0D6900C72B10 /* UIViewController+alternative.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99012846243F0D6900C72B10 /* UIViewController+alternative.swift */; };
9901284F244732DB00C72B10 /* BottomTabBarPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99012849244732DB00C72B10 /* BottomTabBarPresenter.swift */; };
99012851244732DB00C72B10 /* BottomTabBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9901284B244732DB00C72B10 /* BottomTabBarViewController.swift */; };
99012852244732DB00C72B10 /* BottomTabBarBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9901284C244732DB00C72B10 /* BottomTabBarBuilder.swift */; };
99012853244732DB00C72B10 /* BottomTabBarInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9901284D244732DB00C72B10 /* BottomTabBarInteractor.swift */; };
990128562449A82500C72B10 /* BottomTabBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990128552449A82400C72B10 /* BottomTabBarView.swift */; };
9917D17F2397B1D600A7E06E /* IPadModalPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9917D17E2397B1D600A7E06E /* IPadModalPresentationController.swift */; };
991FCA2423B11E61009AD684 /* BookmarksStyleSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991FCA2323B11E61009AD684 /* BookmarksStyleSheet.swift */; };
993DF0B523F6B2EF00AC231A /* PlacePageTrackLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993DF0B423F6B2EF00AC231A /* PlacePageTrackLayout.swift */; };
@@ -486,6 +479,7 @@
ED2D74662D1435A600660FBF /* LiveActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D742D2D14337500660FBF /* LiveActivityManager.swift */; };
ED2E328E2D10500900807A08 /* TrackRecordingButtonArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED46DD922D06F804007CACD6 /* TrackRecordingButtonArea.swift */; };
ED2E32912D10501700807A08 /* TrackRecordingButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED49D76F2CF0E3A8004AF27E /* TrackRecordingButtonViewController.swift */; };
ED3EAC202B03C88100220A4A /* BottomTabBarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED3EAC1F2B03C88100220A4A /* BottomTabBarButton.swift */; };
ED43B8BD2C12063500D07BAA /* DocumentPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED43B8BC2C12063500D07BAA /* DocumentPicker.swift */; };
ED46DDCE2D098A0B007CACD6 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED46DDCD2D098A0B007CACD6 /* WidgetKit.framework */; };
ED46DDD02D098A0B007CACD6 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED46DDCF2D098A0B007CACD6 /* SwiftUI.framework */; };
@@ -785,10 +779,9 @@
27697F8F2E257ED800FBD913 /* AboutCoMapsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutCoMapsView.swift; sourceTree = "<group>"; };
27697F912E257EE600FBD913 /* ApoutOpenStreetMapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApoutOpenStreetMapView.swift; sourceTree = "<group>"; };
27768FD92E20199A0086784A /* RoutingOptionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoutingOptionsView.swift; sourceTree = "<group>"; };
27768FDF2E201BE60086784A /* LeftButtonType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LeftButtonType.swift; sourceTree = "<group>"; };
279367552E1BE16300AA5C3D /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
279367592E1BE17300AA5C3D /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SettingsView.swift; path = UI/Settings/SettingsView.swift; sourceTree = SOURCE_ROOT; };
279387C12E4C8EB6009FDF8B /* MapPositionButtonMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapPositionButtonMode.swift; sourceTree = "<group>"; };
279387C52E4C9187009FDF8B /* Controls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Controls.swift; sourceTree = "<group>"; };
27AF184B2E1D5A2700CD41E2 /* SettingsNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsNavigationView.swift; sourceTree = "<group>"; };
27AF184F2E1DB61500CD41E2 /* VoiceRoutingLanguage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceRoutingLanguage.swift; sourceTree = "<group>"; };
27AF18512E1DB61F00CD41E2 /* DistanceUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DistanceUnit.swift; sourceTree = "<group>"; };
@@ -796,18 +789,6 @@
27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowerSavingMode.swift; sourceTree = "<group>"; };
27AF18572E1DB63900CD41E2 /* Appearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Appearance.swift; sourceTree = "<group>"; };
27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncingSpeedTrapsWhileVoiceRouting.swift; sourceTree = "<group>"; };
27BDA4852E4366A600C478B8 /* MapLayerButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapLayerButton.swift; sourceTree = "<group>"; };
27BDA4872E4366B600C478B8 /* MapPositionButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapPositionButton.swift; sourceTree = "<group>"; };
27BDA4892E4366EC00C478B8 /* MainButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainButton.swift; sourceTree = "<group>"; };
27BDA48B2E4366FB00C478B8 /* MapZoomButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapZoomButton.swift; sourceTree = "<group>"; };
27BDA48F2E436A1600C478B8 /* MapZoomButtonKind.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapZoomButtonKind.swift; sourceTree = "<group>"; };
27BDA4A12E436D1100C478B8 /* MainButtonType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainButtonType.swift; sourceTree = "<group>"; };
27BDA4A52E437B5200C478B8 /* BottomTabBarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarButton.swift; sourceTree = "<group>"; };
27BDA4A72E437F8E00C478B8 /* ControlsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlsView.swift; sourceTree = "<group>"; };
27BDA4A92E437FE400C478B8 /* MapTrackRecordingButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapTrackRecordingButton.swift; sourceTree = "<group>"; };
27E5CAAA2E4B643A00FA3597 /* FloatingButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FloatingButtonStyle.swift; sourceTree = "<group>"; };
27E5CAAE2E4B6CB800FA3597 /* Controls.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Controls.h; sourceTree = "<group>"; };
27E5CAB02E4B6CFC00FA3597 /* Controls.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = Controls.mm; sourceTree = "<group>"; };
28A0AB4B0D9B1048005BE974 /* Maps_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Maps_Prefix.pch; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
29B97316FDCFA39411CA2CEA /* main.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; indentWidth = 2; path = main.mm; sourceTree = "<group>"; tabWidth = 2; };
30034C5C2B3F0B74005D961A /* az */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = az; path = az.lproj/Localizable.strings; sourceTree = "<group>"; };
@@ -948,6 +929,7 @@
349A35781B53D4C9009677EE /* MWMCircularProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = MWMCircularProgressView.h; sourceTree = "<group>"; tabWidth = 2; };
349A35791B53D4C9009677EE /* MWMCircularProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = MWMCircularProgressView.m; sourceTree = "<group>"; tabWidth = 2; };
349D1AC61E2E325B004A2006 /* BottomMenuItemCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BottomMenuItemCell.xib; sourceTree = "<group>"; };
349D1ACD1E2E325B004A2006 /* BottomTabBarViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BottomTabBarViewController.xib; sourceTree = "<group>"; };
349D1CE21E3F836900A878FD /* UIViewController+Hierarchy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+Hierarchy.swift"; sourceTree = "<group>"; };
34AB39BF1D2BD8310021857D /* MWMStopButton.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = MWMStopButton.h; sourceTree = "<group>"; tabWidth = 2; };
34AB39C01D2BD8310021857D /* MWMStopButton.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = MWMStopButton.m; sourceTree = "<group>"; tabWidth = 2; };
@@ -1236,6 +1218,11 @@
978D4A30199A11E600D72CA7 /* faq.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = faq.html; path = ../../data/faq.html; sourceTree = "<group>"; };
97A5967E19B9CD47007A963F /* copyright.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = copyright.html; path = ../../data/copyright.html; sourceTree = "<group>"; };
99012846243F0D6900C72B10 /* UIViewController+alternative.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+alternative.swift"; sourceTree = "<group>"; };
99012849244732DB00C72B10 /* BottomTabBarPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarPresenter.swift; sourceTree = "<group>"; };
9901284B244732DB00C72B10 /* BottomTabBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarViewController.swift; sourceTree = "<group>"; };
9901284C244732DB00C72B10 /* BottomTabBarBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarBuilder.swift; sourceTree = "<group>"; };
9901284D244732DB00C72B10 /* BottomTabBarInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarInteractor.swift; sourceTree = "<group>"; };
990128552449A82400C72B10 /* BottomTabBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarView.swift; sourceTree = "<group>"; };
9917D17E2397B1D600A7E06E /* IPadModalPresentationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IPadModalPresentationController.swift; sourceTree = "<group>"; };
991FCA2323B11E61009AD684 /* BookmarksStyleSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksStyleSheet.swift; sourceTree = "<group>"; };
993DF0B423F6B2EF00AC231A /* PlacePageTrackLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlacePageTrackLayout.swift; sourceTree = "<group>"; };
@@ -1434,6 +1421,7 @@
ED2D74352D14337500660FBF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
ED2D74362D14337500660FBF /* CoMapsWidgetExtensionBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoMapsWidgetExtensionBundle.swift; sourceTree = "<group>"; };
ED2D745D2D1433DE00660FBF /* TrackRecordingActivityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingActivityManager.swift; sourceTree = "<group>"; };
ED3EAC1F2B03C88100220A4A /* BottomTabBarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarButton.swift; sourceTree = "<group>"; };
ED43B8BC2C12063500D07BAA /* DocumentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentPicker.swift; sourceTree = "<group>"; };
ED46DD922D06F804007CACD6 /* TrackRecordingButtonArea.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingButtonArea.swift; sourceTree = "<group>"; };
ED46DDCC2D098A0B007CACD6 /* CoMapsWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = CoMapsWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1916,9 +1904,6 @@
27697F822E254A9900FBD913 /* EmbeddedSafariView.swift */,
27697F842E255B6300FBD913 /* EmbeddedSafariViewCoordinator.swift */,
27697F862E255B7C00FBD913 /* EmbeddedSafariViewContent.swift */,
27E5CAAE2E4B6CB800FA3597 /* Controls.h */,
27E5CAB02E4B6CFC00FA3597 /* Controls.mm */,
279387C52E4C9187009FDF8B /* Controls.swift */,
);
path = Bridging;
sourceTree = "<group>";
@@ -1978,6 +1963,7 @@
2752B6CD2E3121D800887CC4 /* Language.swift */,
2752B6C92E31197000887CC4 /* MapLanguage.swift */,
27AF184F2E1DB61500CD41E2 /* VoiceRoutingLanguage.swift */,
27768FDF2E201BE60086784A /* LeftButtonType.swift */,
27AF18512E1DB61F00CD41E2 /* DistanceUnit.swift */,
27AF18532E1DB62600CD41E2 /* MobileDataPolicy.swift */,
27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */,
@@ -1987,19 +1973,6 @@
path = "Settings Types";
sourceTree = "<group>";
};
27BDA4952E436C2D00C478B8 /* New Group */ = {
isa = PBXGroup;
children = (
27BDA4852E4366A600C478B8 /* MapLayerButton.swift */,
27BDA4A92E437FE400C478B8 /* MapTrackRecordingButton.swift */,
27BDA4872E4366B600C478B8 /* MapPositionButton.swift */,
279387C12E4C8EB6009FDF8B /* MapPositionButtonMode.swift */,
27BDA48B2E4366FB00C478B8 /* MapZoomButton.swift */,
27BDA48F2E436A1600C478B8 /* MapZoomButtonKind.swift */,
);
path = "New Group";
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* Maps */ = {
isa = PBXGroup;
children = (
@@ -2532,8 +2505,8 @@
children = (
99AAEA72244DA59E0039D110 /* Presentation */,
998927312449E5ED00260CE2 /* Menu */,
99012848244732C200C72B10 /* TabBar */,
995F1610244F07F90060631D /* MWMBottomMenuState.h */,
27BDA4A52E437B5200C478B8 /* BottomTabBarButton.swift */,
);
path = BottomMenu;
sourceTree = "<group>";
@@ -2874,6 +2847,20 @@
name = "Custom Views";
sourceTree = "<group>";
};
99012848244732C200C72B10 /* TabBar */ = {
isa = PBXGroup;
children = (
99012849244732DB00C72B10 /* BottomTabBarPresenter.swift */,
9901284B244732DB00C72B10 /* BottomTabBarViewController.swift */,
9901284C244732DB00C72B10 /* BottomTabBarBuilder.swift */,
9901284D244732DB00C72B10 /* BottomTabBarInteractor.swift */,
349D1ACD1E2E325B004A2006 /* BottomTabBarViewController.xib */,
990128552449A82400C72B10 /* BottomTabBarView.swift */,
ED3EAC1F2B03C88100220A4A /* BottomTabBarButton.swift */,
);
path = TabBar;
sourceTree = "<group>";
};
993DF0C223F6BD0600AC231A /* ElevationDetails */ = {
isa = PBXGroup;
children = (
@@ -3596,11 +3583,6 @@
F6E2FBFB1E097B9F0083EBEC /* UI */ = {
isa = PBXGroup;
children = (
27BDA4A72E437F8E00C478B8 /* ControlsView.swift */,
27BDA4892E4366EC00C478B8 /* MainButton.swift */,
27BDA4A12E436D1100C478B8 /* MainButtonType.swift */,
27BDA4952E436C2D00C478B8 /* New Group */,
27E5CAAA2E4B643A00FA3597 /* FloatingButtonStyle.swift */,
27768FDA2E20199A0086784A /* Routing */,
ED9857022C4ECFFC00694F6C /* MailComposer */,
ED43B8B92C12061600D07BAA /* DocumentPicker */,
@@ -4227,6 +4209,7 @@
4761BE2B252D3DB900EE2DE4 /* SubgroupCell.xib in Resources */,
99F9A0E72462CA1700AE21E0 /* DownloadAllView.xib in Resources */,
349D1AD51E2E325B004A2006 /* BottomMenuItemCell.xib in Resources */,
349D1AE11E2E325C004A2006 /* BottomTabBarViewController.xib in Resources */,
34D3B01E1E389D05004100F9 /* MWMButtonCell.xib in Resources */,
9959C75624582DA2008FD4FD /* DirectionView.xib in Resources */,
6741A98B1BF340DE002C974C /* MWMCircularProgress.xib in Resources */,
@@ -4365,6 +4348,7 @@
34845DB71E166084003D55B9 /* Common.swift in Sources */,
47F4F21323A6EC420022FD56 /* DownloadMapsViewController.swift in Sources */,
99A906F623FA9C010005872B /* InsetsLabelRenderer.swift in Sources */,
99012853244732DB00C72B10 /* BottomTabBarInteractor.swift in Sources */,
6741A9A31BF340DE002C974C /* main.mm in Sources */,
34D3B04F1E38A20C004100F9 /* Bundle+Init.swift in Sources */,
34AB666E1FC5AA330078E451 /* TransportTransitStepsCollectionView.swift in Sources */,
@@ -4438,8 +4422,6 @@
3D15ACEE2155117000F725D5 /* MWMObjectsCategorySelectorDataSource.mm in Sources */,
9977E6A32480F9BF0073780C /* BottomMenuLayerButtonRenderer.swift in Sources */,
272F1F392E0EE09000FA52EF /* ExistingProfileView.swift in Sources */,
27E5CAAD2E4B644100FA3597 /* FloatingButtonStyle.swift in Sources */,
27BDA4862E4366AC00C478B8 /* MapLayerButton.swift in Sources */,
3454D7D11E07F045004AF2AD /* UIImage+RGBAData.m in Sources */,
6741A9B71BF340DE002C974C /* EAGLView.mm in Sources */,
6741A9B81BF340DE002C974C /* MapViewController.mm in Sources */,
@@ -4467,7 +4449,6 @@
F6E2FEE51E097BA00083EBEC /* MWMSearchNoResults.m in Sources */,
ED5E02142D8B17B600A5CC7B /* ModalPresentationStepsController.swift in Sources */,
4715273524907F8200E91BBA /* BookmarkColorViewController.swift in Sources */,
279387C62E4C918A009FDF8B /* Controls.swift in Sources */,
47E3C7292111E614008B3B27 /* FadeInAnimatedTransitioning.swift in Sources */,
ED79A5D42BDF8D6100952D1F /* MetadataItem.swift in Sources */,
34AB667D1FC5AA330078E451 /* MWMRoutePreview.mm in Sources */,
@@ -4491,7 +4472,6 @@
F6E2FDA11E097BA00083EBEC /* MWMEditorAdditionalNamesTableViewController.mm in Sources */,
4767CDA620AB1F6200BD8166 /* LeftAlignedIconButton.swift in Sources */,
3454D7D41E07F045004AF2AD /* UIImageView+Coloring.m in Sources */,
27BDA4882E4366C600C478B8 /* MapPositionButton.swift in Sources */,
993DF11D23F6BDB100AC231A /* UIToolbarRenderer.swift in Sources */,
99A906E923F6F7030005872B /* WikiDescriptionViewController.swift in Sources */,
ED79A5D62BDF8D6100952D1F /* CloudDirectoryMonitor.swift in Sources */,
@@ -4525,7 +4505,6 @@
99C9642B2428C0F700E41723 /* PlacePageHeaderViewController.swift in Sources */,
F6FE3C391CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.m in Sources */,
F6E2FDFE1E097BA00083EBEC /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */,
27BDA4A62E437B5200C478B8 /* BottomTabBarButton.swift in Sources */,
34B846A12029DCC10081ECCD /* BMCCategoriesHeader.swift in Sources */,
99A906F123FA946E0005872B /* DifficultyViewRenderer.swift in Sources */,
F6E2FD5F1E097BA00083EBEC /* MWMMapDownloaderLargeCountryTableViewCell.m in Sources */,
@@ -4546,6 +4525,7 @@
EDB71E002D8B0338004A6A7F /* ModalPresentationAnimator.swift in Sources */,
F6E2FD8C1E097BA00083EBEC /* MWMNoMapsView.m in Sources */,
34D3B0361E389D05004100F9 /* MWMEditorSelectTableViewCell.m in Sources */,
990128562449A82500C72B10 /* BottomTabBarView.swift in Sources */,
F6E2FD711E097BA00083EBEC /* MWMMapDownloaderTableViewCell.m in Sources */,
F6E2FE4F1E097BA00083EBEC /* MWMActionBarButton.m in Sources */,
47F86CFF20C936FC00FEE291 /* TabView.swift in Sources */,
@@ -4574,9 +4554,9 @@
34AB66081FC5AA320078E451 /* MWMNavigationDashboardManager.mm in Sources */,
3404F490202898CC0090E401 /* BMCModels.swift in Sources */,
F6E2FD561E097BA00083EBEC /* MWMMapDownloaderButtonTableViewCell.m in Sources */,
9901284F244732DB00C72B10 /* BottomTabBarPresenter.swift in Sources */,
CDB4D5002231412900104869 /* MapTemplateBuilder.swift in Sources */,
34AB66171FC5AA320078E451 /* MWMiPhoneRoutePreview.m in Sources */,
27BDA4A82E437F9800C478B8 /* ControlsView.swift in Sources */,
99A906EA23F6F7030005872B /* PlacePageInfoViewController.swift in Sources */,
993DF11723F6BDB100AC231A /* UINavigationBarRenderer.swift in Sources */,
6741A9E71BF340DE002C974C /* MWMCircularProgressView.m in Sources */,
@@ -4627,9 +4607,8 @@
34AB66111FC5AA320078E451 /* NavigationTurnsView.swift in Sources */,
475ED78624C7C7300063ADC7 /* ValueStepperViewRenderer.swift in Sources */,
3490D2E11CE9DD2500D0B838 /* MWMSideButtonsView.mm in Sources */,
27BDA4AA2E437FEF00C478B8 /* MapTrackRecordingButton.swift in Sources */,
279387C42E4C8EB7009FDF8B /* MapPositionButtonMode.swift in Sources */,
47F4F21523A6F06F0022FD56 /* AvailableMapsDataSource.swift in Sources */,
99012852244732DB00C72B10 /* BottomTabBarBuilder.swift in Sources */,
99012847243F0D6900C72B10 /* UIViewController+alternative.swift in Sources */,
995739062355CAC40019AEE7 /* ImageViewCrossDisolve.swift in Sources */,
ED83880F2D54DEB3002A0536 /* UIImage+FilledWithColor.swift in Sources */,
@@ -4637,7 +4616,6 @@
47A13CAD24BE9AA500027D4F /* DatePickerViewRenderer.swift in Sources */,
ED2E328E2D10500900807A08 /* TrackRecordingButtonArea.swift in Sources */,
F6E2FE7C1E097BA00083EBEC /* MWMPlacePageOpeningHoursCell.mm in Sources */,
27BDA48C2E43670300C478B8 /* MapZoomButton.swift in Sources */,
340E1EFB1E2F614400CE49BF /* Storyboard.swift in Sources */,
34E776331F15FAC2003040B3 /* MWMPlacePageManagerHelper.mm in Sources */,
462452E92BD052C0004C85E1 /* MWMEditorSegmentedTableViewCell.mm in Sources */,
@@ -4669,7 +4647,6 @@
F6E2FE821E097BA00083EBEC /* MWMPlacePageOpeningHoursDayView.m in Sources */,
F6E2FD6B1E097BA00083EBEC /* MWMMapDownloaderSubplaceTableViewCell.m in Sources */,
CDCA27842245090900167D87 /* ListenerContainer.swift in Sources */,
27E5CAAF2E4B6CBC00FA3597 /* Controls.h in Sources */,
27AF18582E1DB63A00CD41E2 /* Appearance.swift in Sources */,
47E3C7252111E41B008B3B27 /* DimmedModalPresentationController.swift in Sources */,
3472B5CB200F43EF00DC6CD5 /* BackgroundFetchScheduler.swift in Sources */,
@@ -4748,12 +4725,12 @@
270C9C282E16AB6F00ABA688 /* Profile.swift in Sources */,
ED9857082C4ED02D00694F6C /* MailComposer.swift in Sources */,
99F8B4C623B644A6009FF0B4 /* MapStyleSheet.swift in Sources */,
99012851244732DB00C72B10 /* BottomTabBarViewController.swift in Sources */,
993DF10623F6BDB100AC231A /* UIColor+rgba.swift in Sources */,
EDC3573B2B7B5029001AE9CA /* CALayer+SetCorner.swift in Sources */,
ED914AB22D35063A00973C45 /* TextColorStyleSheet.swift in Sources */,
47E3C7332111F4D8008B3B27 /* CoverVerticalDismissalAnimator.swift in Sources */,
471AB99423ABA3BD00F56D49 /* SearchMapsDataSource.swift in Sources */,
27BDA4A22E436D1900C478B8 /* MainButtonType.swift in Sources */,
47CA68F1250B54AF00671019 /* BookmarksListCell.swift in Sources */,
471A7BC02481C82500A0D4C1 /* BookmarkTitleCell.swift in Sources */,
47F67D1521CAB21B0069754E /* MWMImageCoder.m in Sources */,
@@ -4786,6 +4763,7 @@
471A7BBE2481A3D000A0D4C1 /* EditBookmarkViewController.swift in Sources */,
993DF0C923F6BD0600AC231A /* ElevationDetailsBuilder.swift in Sources */,
674A7E301C0DB10B003D48E1 /* MWMMapWidgets.mm in Sources */,
27768FE02E201BE60086784A /* LeftButtonType.swift in Sources */,
34AB66291FC5AA330078E451 /* RouteManagerViewController.swift in Sources */,
3404754D1E081A4600C92850 /* MWMKeyboard.m in Sources */,
993DF10C23F6BDB100AC231A /* MWMTableViewCellRenderer.swift in Sources */,
@@ -4795,12 +4773,11 @@
47E3C7312111F4C2008B3B27 /* CoverVerticalPresentationAnimator.swift in Sources */,
99E2B0122368A8C700FFABC5 /* MWMCategory+PlacesCountTitle.swift in Sources */,
F6D67CDC2062B9C00032FD38 /* BCCreateCategoryAlert.swift in Sources */,
27E5CAB12E4B6D0300FA3597 /* Controls.mm in Sources */,
F6E2FE2B1E097BA00083EBEC /* MWMStreetEditorEditTableViewCell.m in Sources */,
34AB66891FC5AA330078E451 /* NavigationControlView.swift in Sources */,
27BDA48A2E4366F400C478B8 /* MainButton.swift in Sources */,
479EE94A2292FB03009DEBA6 /* ActivityIndicator.swift in Sources */,
27697F872E255B8500FBD913 /* EmbeddedSafariViewContent.swift in Sources */,
ED3EAC202B03C88100220A4A /* BottomTabBarButton.swift in Sources */,
47B9065321C7FA400079C85E /* MWMImageCache.m in Sources */,
F6FEA82E1C58F108007223CC /* MWMButton.m in Sources */,
34B924431DC8A29C0008D971 /* MWMMailViewController.m in Sources */,
@@ -4830,7 +4807,6 @@
F6A2184A1CA3F26800BE2CC6 /* MWMEditorViralActivityItem.mm in Sources */,
993DF10923F6BDB100AC231A /* IFonts.swift in Sources */,
47699A0821F08E37009E6585 /* NSDate+TimeDistance.m in Sources */,
27BDA4902E436A1B00C478B8 /* MapZoomButtonKind.swift in Sources */,
34845DB31E165E24003D55B9 /* SearchNoResultsViewController.swift in Sources */,
47E3C72B2111E62A008B3B27 /* FadeOutAnimatedTransitioning.swift in Sources */,
471A7BC4248471BE00A0D4C1 /* BookmarkUIUtils.swift in Sources */,

View File

@@ -0,0 +1,52 @@
extension Settings {
/// The type of the left bottom bar button
enum LeftButtonType: String, Codable, CaseIterable, Identifiable {
case hidden = "Hidden"
case addPlace = "AddPlace"
case recordTrack = "RecordTrack"
case settings = "Settings"
case help = "Help"
// MARK: Properties
/// The id
var id: Self { self }
/// The description text
var description: String {
switch self {
case .hidden:
return String(localized: "disabled")
case .addPlace:
return String(localized: "placepage_add_place_button")
case .recordTrack:
return String(localized: "start_track_recording")
case .settings:
return String(localized: "settings")
case .help:
return String(localized: "help")
}
}
/// The image
var image: UIImage {
let configuration = UIImage.SymbolConfiguration(pointSize: 24, weight: .semibold)
switch self {
case .addPlace:
return UIImage(systemName: "plus", withConfiguration: configuration)!
case .recordTrack:
return UIImage(named: "track", in: nil, with: configuration)!
case .settings:
return UIImage(systemName: "gearshape.fill", withConfiguration: UIImage.SymbolConfiguration(pointSize: 22, weight: .semibold))!
case .help:
return UIImage(systemName: "info.circle", withConfiguration: configuration)!
default:
return UIImage()
}
}
}
}

View File

@@ -14,7 +14,7 @@ import AVFoundation
/// Key for storing the type of action used for the bottom left main interface button in the user defaults
static private let userDefaultsKeyLeftMainButtonKind = "LeftMainButtonKind"
static private let userDefaultsKeyLeftButtonType = "LeftButtonType"
/// Key for storing the map appearance in the user defaults
@@ -52,16 +52,16 @@ import AVFoundation
/// The type of action used for the bottom left main interface button
static var leftMainButtonKind: MainButton.Kind {
static var leftButtonType: LeftButtonType {
get {
if let leftMainButtonKindRawValue = UserDefaults.standard.string(forKey: userDefaultsKeyLeftMainButtonKind), let leftMainButtonKind = MainButton.Kind(rawValue: leftMainButtonKindRawValue) {
return leftMainButtonKind
if let leftButtonTypeRawValue = UserDefaults.standard.string(forKey: userDefaultsKeyLeftButtonType), let leftButtonType = LeftButtonType(rawValue: leftButtonTypeRawValue) {
return leftButtonType
}
return .help
}
set {
UserDefaults.standard.set(newValue.rawValue, forKey: userDefaultsKeyLeftMainButtonKind)
UserDefaults.standard.set(newValue.rawValue, forKey: userDefaultsKeyLeftButtonType)
}
}

View File

@@ -16,6 +16,10 @@ final class TabBarArea: AvailableArea {
let directions = ov.tabBarAreaAffectDirections
addConstraints(otherView: ov, directions: directions)
}
override func notifyObserver() {
BottomTabBarViewController.updateAvailableArea(areaFrame)
}
}
extension UIView {

View File

@@ -78,17 +78,17 @@ extension BottomMenuPresenter {
case .layers:
return 1
case .items:
let leftMainButtonKind = Settings.leftMainButtonKind
let leftButtonType = Settings.leftButtonType
menuCells = CellType.allCases.filter { cell in
if cell == .donate {
return false
} else if leftMainButtonKind == .addPlace, cell == .addPlace {
} else if leftButtonType == .addPlace, cell == .addPlace {
return false
} else if leftMainButtonKind == .recordTrack, cell == .recordTrack {
} else if leftButtonType == .recordTrack, cell == .recordTrack {
return false
} else if leftMainButtonKind == .help, cell == .help {
} else if leftButtonType == .help, cell == .help {
return false
} else if leftMainButtonKind == .settings, cell == .settings {
} else if leftButtonType == .settings, cell == .settings {
return false
}

View File

@@ -0,0 +1,14 @@
@objc class BottomTabBarBuilder: NSObject {
@objc static func build(mapViewController: MapViewController, controlsManager: MWMMapViewControlsManager) -> BottomTabBarViewController {
let viewController = BottomTabBarViewController(nibName: nil, bundle: nil)
let interactor = BottomTabBarInteractor(viewController: viewController,
mapViewController: mapViewController,
controlsManager: controlsManager)
let presenter = BottomTabBarPresenter(interactor: interactor)
interactor.presenter = presenter
viewController.presenter = presenter
return viewController
}
}

View File

@@ -1,8 +1,6 @@
import UIKit
class BottomTabBarButton: MWMButton {
let kExtendedTabBarTappableMargin: CGFloat = -15
@objc override func applyTheme() {
if styleName.isEmpty {
setStyle(.bottomTabBarButton)

View File

@@ -0,0 +1,75 @@
protocol BottomTabBarInteractorProtocol: AnyObject {
func openSearch()
func openLeftButton()
func openBookmarks()
func openMenu()
}
class BottomTabBarInteractor {
weak var presenter: BottomTabBarPresenterProtocol?
private weak var viewController: UIViewController?
private weak var mapViewController: MapViewController?
private weak var controlsManager: MWMMapViewControlsManager?
private let searchManager: SearchOnMapManager
init(viewController: UIViewController, mapViewController: MapViewController, controlsManager: MWMMapViewControlsManager) {
self.viewController = viewController
self.mapViewController = mapViewController
self.controlsManager = controlsManager
self.searchManager = mapViewController.searchManager
}
}
extension BottomTabBarInteractor: BottomTabBarInteractorProtocol {
func openSearch() {
searchManager.isSearching ? searchManager.close() : searchManager.startSearching(isRouting: false)
}
func openLeftButton() {
switch Settings.leftButtonType {
case .addPlace:
if let delegate = controlsManager as? BottomMenuDelegate {
delegate.addPlace()
}
case .settings:
mapViewController?.openSettings()
case .recordTrack:
let mapViewController = MapViewController.shared()!
let trackRecorder: TrackRecordingManager = .shared
switch trackRecorder.recordingState {
case .active:
mapViewController.showTrackRecordingPlacePage()
case .inactive:
trackRecorder.start { result in
switch result {
case .success:
mapViewController.showTrackRecordingPlacePage()
case .failure:
break
}
}
}
default:
mapViewController?.openAbout()
}
}
func openBookmarks() {
mapViewController?.bookmarksCoordinator.open()
}
func openMenu() {
guard let state = controlsManager?.menuState else {
fatalError("ERROR: Failed to retrieve the current MapViewControlsManager's state.")
}
switch state {
case .inactive: controlsManager?.menuState = .active
case .active: controlsManager?.menuState = .inactive
case .hidden:
// When the current controls manager's state is hidden, accidental taps on the menu button during the hiding animation should be skipped.
break;
case .layers: fallthrough
@unknown default: fatalError("ERROR: Unexpected MapViewControlsManager's state: \(state)")
}
}
}

View File

@@ -0,0 +1,37 @@
protocol BottomTabBarPresenterProtocol: AnyObject {
func configure()
func onLeftButtonPressed()
func onSearchButtonPressed()
func onBookmarksButtonPressed()
func onMenuButtonPressed()
}
class BottomTabBarPresenter: NSObject {
private let interactor: BottomTabBarInteractorProtocol
init(interactor: BottomTabBarInteractorProtocol) {
self.interactor = interactor
}
}
extension BottomTabBarPresenter: BottomTabBarPresenterProtocol {
func configure() {
}
func onLeftButtonPressed() {
interactor.openLeftButton()
}
func onSearchButtonPressed() {
interactor.openSearch()
}
func onBookmarksButtonPressed() {
interactor.openBookmarks()
}
func onMenuButtonPressed() {
interactor.openMenu()
}
}

View File

@@ -0,0 +1,28 @@
let kExtendedTabBarTappableMargin: CGFloat = -15
final class BottomTabBarView: SolidTouchView {
@IBOutlet var mainButtonsView: ExtendedBottomTabBarContainerView!
override var placePageAreaAffectDirections: MWMAvailableAreaAffectDirections {
return alternative(iPhone: [], iPad: [.bottom])
}
override var widgetsAreaAffectDirections: MWMAvailableAreaAffectDirections {
return [.bottom]
}
override var sideButtonsAreaAffectDirections: MWMAvailableAreaAffectDirections {
return [.bottom]
}
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return bounds.insetBy(dx: kExtendedTabBarTappableMargin, dy: kExtendedTabBarTappableMargin).contains(point)
}
}
final class ExtendedBottomTabBarContainerView: UIView {
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return bounds.insetBy(dx: kExtendedTabBarTappableMargin, dy: kExtendedTabBarTappableMargin).contains(point)
}
}

View File

@@ -0,0 +1,131 @@
class BottomTabBarViewController: UIViewController {
var presenter: BottomTabBarPresenterProtocol!
@IBOutlet var leftButton: MWMButton?
@IBOutlet var searchButton: MWMButton?
@IBOutlet var searchConstraintWithLeftButton: NSLayoutConstraint?
@IBOutlet var searchConstraintWithoutLeftButton: NSLayoutConstraint?
@IBOutlet var bookmarksButton: MWMButton?
@IBOutlet var bookmarksConstraintWithLeftButton: NSLayoutConstraint?
@IBOutlet var bookmarksConstraintWithoutLeftButton: NSLayoutConstraint?
@IBOutlet var moreButton: MWMButton?
@IBOutlet var downloadBadge: UIView?
private var avaliableArea = CGRect.zero
@objc var isHidden: Bool = false {
didSet {
updateFrame(animated: true)
}
}
@objc var isApplicationBadgeHidden: Bool = true {
didSet {
updateBadge()
}
}
var tabBarView: BottomTabBarView {
return view as! BottomTabBarView
}
@objc static var controller: BottomTabBarViewController? {
return MWMMapViewControlsManager.manager()?.tabBarController
}
override func viewDidLoad() {
super.viewDidLoad()
presenter.configure()
NotificationCenter.default.addObserver(forName: UserDefaults.didChangeNotification, object: nil, queue: nil) { _ in
DispatchQueue.main.async {
self.updateLeftButton()
}
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
leftButton?.imageView?.contentMode = .scaleAspectFit
updateBadge()
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
updateLeftButton()
}
static func updateAvailableArea(_ frame: CGRect) {
BottomTabBarViewController.controller?.updateAvailableArea(frame)
}
@IBAction func onSearchButtonPressed(_ sender: Any) {
presenter.onSearchButtonPressed()
}
@IBAction func onLeftButtonPressed(_ sender: Any) {
presenter.onLeftButtonPressed()
}
@IBAction func onBookmarksButtonPressed(_ sender: Any) {
presenter.onBookmarksButtonPressed()
}
@IBAction func onMenuButtonPressed(_ sender: Any) {
presenter.onMenuButtonPressed()
}
private func updateAvailableArea(_ frame:CGRect) {
avaliableArea = frame
updateFrame(animated: false)
self.view.layoutIfNeeded()
}
private func updateFrame(animated: Bool) {
if avaliableArea == .zero {
return
}
let newFrame = CGRect(x: avaliableArea.minX,
y: isHidden ? avaliableArea.minY + avaliableArea.height : avaliableArea.minY,
width: avaliableArea.width,
height: avaliableArea.height)
let alpha:CGFloat = isHidden ? 0 : 1
if animated {
UIView.animate(withDuration: kDefaultAnimationDuration,
delay: 0,
options: [.beginFromCurrentState],
animations: {
self.view.frame = newFrame
self.view.alpha = alpha
}, completion: nil)
} else {
self.view.frame = newFrame
self.view.alpha = alpha
}
}
private func updateLeftButton() {
let leftButtonType = Settings.leftButtonType
if leftButtonType == .hidden {
leftButton?.isHidden = true
if let searchConstraintWithLeftButton, let searchConstraintWithoutLeftButton, let bookmarksConstraintWithLeftButton, let bookmarksConstraintWithoutLeftButton {
NSLayoutConstraint.activate([searchConstraintWithoutLeftButton, bookmarksConstraintWithoutLeftButton])
NSLayoutConstraint.deactivate([searchConstraintWithLeftButton, bookmarksConstraintWithLeftButton])
}
} else {
leftButton?.isHidden = false
leftButton?.setTitle(nil, for: .normal)
leftButton?.setImage(leftButtonType.image, for: .normal)
leftButton?.accessibilityLabel = leftButtonType.description;
if let searchConstraintWithLeftButton, let searchConstraintWithoutLeftButton, let bookmarksConstraintWithLeftButton, let bookmarksConstraintWithoutLeftButton {
NSLayoutConstraint.activate([searchConstraintWithLeftButton, bookmarksConstraintWithLeftButton])
NSLayoutConstraint.deactivate([searchConstraintWithoutLeftButton, bookmarksConstraintWithoutLeftButton])
}
}
}
private func updateBadge() {
downloadBadge?.isHidden = isApplicationBadgeHidden
}
}

View File

@@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="24128" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="24063"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="BottomTabBarViewController" customModule="CoMaps" customModuleProvider="target">
<connections>
<outlet property="bookmarksButton" destination="dgG-ki-3tB" id="md5-3T-9tb"/>
<outlet property="bookmarksConstraintWithLeftButton" destination="Jc7-nc-elY" id="gW7-8e-E6m"/>
<outlet property="bookmarksConstraintWithoutLeftButton" destination="NRb-vj-MFg" id="C3Z-Ia-D6i"/>
<outlet property="downloadBadge" destination="uDI-ZC-4wx" id="fAf-cy-Ozn"/>
<outlet property="leftButton" destination="dzf-7Z-N6a" id="LMZ-H7-ftQ"/>
<outlet property="moreButton" destination="svD-yi-GrZ" id="kjk-ZW-nZN"/>
<outlet property="searchButton" destination="No0-ld-JX3" id="m5F-UT-j94"/>
<outlet property="searchConstraintWithLeftButton" destination="tDb-w1-ueQ" id="WaI-Xb-1bu"/>
<outlet property="searchConstraintWithoutLeftButton" destination="cQg-jW-uSD" id="cMy-EC-G07"/>
<outlet property="view" destination="zuH-WU-hiP" id="eoa-4I-wKs"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="zuH-WU-hiP" customClass="BottomTabBarView" customModule="CoMaps" customModuleProvider="target" propertyAccessControl="none">
<rect key="frame" x="0.0" y="0.0" width="373" height="84"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vum-s3-PHx" userLabel="MainButtons" customClass="ExtendedBottomTabBarContainerView" customModule="CoMaps" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="373" height="48"/>
<subviews>
<button opaque="NO" contentMode="scaleAspectFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dzf-7Z-N6a" userLabel="LeftButton" customClass="BottomTabBarButton" customModule="CoMaps" customModuleProvider="target">
<rect key="frame" x="22.5" y="0.0" width="48" height="48"/>
<accessibility key="accessibilityConfiguration" identifier="helpButton"/>
<constraints>
<constraint firstAttribute="width" secondItem="dzf-7Z-N6a" secondAttribute="height" id="qNJ-0K-sK0"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="30"/>
<inset key="imageEdgeInsets" minX="9" minY="9" maxX="9" maxY="9"/>
<state key="normal" image="info.circle" catalog="system"/>
<connections>
<action selector="onLeftButtonPressed:" destination="-1" eventType="touchUpInside" id="1gx-P2-sRJ"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="249" horizontalCompressionResistancePriority="751" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="No0-ld-JX3" userLabel="Search" customClass="BottomTabBarButton" customModule="CoMaps" customModuleProvider="target">
<rect key="frame" x="116" y="0.0" width="48" height="48"/>
<accessibility key="accessibilityConfiguration" identifier="searchButton"/>
<constraints>
<constraint firstAttribute="width" secondItem="No0-ld-JX3" secondAttribute="height" id="2bW-fc-Hsh"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="ic_menu_search"/>
<connections>
<action selector="onSearchButtonPressed:" destination="-1" eventType="touchUpInside" id="0D5-RB-HBQ"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleAspectFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dgG-ki-3tB" userLabel="Bookmarks" customClass="BottomTabBarButton" customModule="CoMaps" customModuleProvider="target">
<rect key="frame" x="209" y="0.0" width="48" height="48"/>
<accessibility key="accessibilityConfiguration" identifier="bookmarksButton"/>
<constraints>
<constraint firstAttribute="width" secondItem="dgG-ki-3tB" secondAttribute="height" id="o3b-it-lrV"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="ic_menu_bookmark_list"/>
<connections>
<action selector="onBookmarksButtonPressed:" destination="-1" eventType="touchUpInside" id="9Z1-eg-xth"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleAspectFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="svD-yi-GrZ" userLabel="Menu" customClass="BottomTabBarButton" customModule="CoMaps" customModuleProvider="target">
<rect key="frame" x="302.5" y="0.0" width="48" height="48"/>
<accessibility key="accessibilityConfiguration" identifier="menuButton"/>
<constraints>
<constraint firstAttribute="width" secondItem="svD-yi-GrZ" secondAttribute="height" id="gmG-3a-Mqe"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="ic_menu"/>
<connections>
<action selector="onMenuButtonPressed:" destination="-1" eventType="touchUpInside" id="rzb-y4-nR1"/>
</connections>
</button>
<view userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uDI-ZC-4wx" userLabel="DownloadBadge">
<rect key="frame" x="329.5" y="11" width="10" height="10"/>
<color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration">
<accessibilityTraits key="traits" notEnabled="YES"/>
</accessibility>
<constraints>
<constraint firstAttribute="width" constant="10" id="tEP-Xi-qnU"/>
<constraint firstAttribute="height" constant="10" id="wNg-5Z-7AO"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="Badge"/>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<accessibility key="accessibilityConfiguration" identifier="MainButtons"/>
<constraints>
<constraint firstAttribute="height" constant="48" id="69A-eu-uLp"/>
<constraint firstItem="No0-ld-JX3" firstAttribute="centerY" secondItem="vum-s3-PHx" secondAttribute="centerY" id="8nL-zT-Y7b"/>
<constraint firstItem="No0-ld-JX3" firstAttribute="height" secondItem="vum-s3-PHx" secondAttribute="height" id="9eR-I7-7at"/>
<constraint firstItem="svD-yi-GrZ" firstAttribute="height" secondItem="vum-s3-PHx" secondAttribute="height" id="Fde-um-JL6"/>
<constraint firstItem="dgG-ki-3tB" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" multiplier="1.25" id="Jc7-nc-elY"/>
<constraint firstItem="dgG-ki-3tB" firstAttribute="centerY" secondItem="vum-s3-PHx" secondAttribute="centerY" id="JjT-sc-hIY"/>
<constraint firstItem="dgG-ki-3tB" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" priority="900" id="NRb-vj-MFg"/>
<constraint firstItem="svD-yi-GrZ" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" multiplier="1.75" id="Q0b-gd-HwS"/>
<constraint firstItem="dgG-ki-3tB" firstAttribute="height" secondItem="vum-s3-PHx" secondAttribute="height" id="Rs8-Hl-CAc"/>
<constraint firstItem="uDI-ZC-4wx" firstAttribute="centerX" secondItem="svD-yi-GrZ" secondAttribute="centerX" constant="8" id="XNb-Ba-Hn7"/>
<constraint firstItem="dzf-7Z-N6a" firstAttribute="centerY" secondItem="vum-s3-PHx" secondAttribute="centerY" id="Zug-zY-KIX"/>
<constraint firstItem="No0-ld-JX3" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" multiplier="0.25" priority="900" id="cQg-jW-uSD"/>
<constraint firstItem="svD-yi-GrZ" firstAttribute="centerY" secondItem="vum-s3-PHx" secondAttribute="centerY" id="sja-hO-YY3"/>
<constraint firstItem="No0-ld-JX3" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" multiplier="0.75" id="tDb-w1-ueQ"/>
<constraint firstItem="dzf-7Z-N6a" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" multiplier="0.25" id="u3G-gY-98J"/>
<constraint firstItem="dzf-7Z-N6a" firstAttribute="height" secondItem="vum-s3-PHx" secondAttribute="height" id="yTg-8g-H1p"/>
<constraint firstItem="uDI-ZC-4wx" firstAttribute="centerY" secondItem="svD-yi-GrZ" secondAttribute="centerY" constant="-8" id="yq3-ui-IaL"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="cQg-jW-uSD"/>
<exclude reference="NRb-vj-MFg"/>
</mask>
</variation>
</view>
</subviews>
<viewLayoutGuide key="safeArea" id="aaw-Hz-zma"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="vum-s3-PHx" firstAttribute="top" secondItem="zuH-WU-hiP" secondAttribute="top" id="PQS-ro-25e"/>
<constraint firstItem="vum-s3-PHx" firstAttribute="leading" secondItem="zuH-WU-hiP" secondAttribute="leading" id="kza-JN-Dul"/>
<constraint firstAttribute="trailing" secondItem="vum-s3-PHx" secondAttribute="trailing" id="sM6-P2-rN9"/>
</constraints>
<nil key="simulatedStatusBarMetrics"/>
<nil key="simulatedTopBarMetrics"/>
<nil key="simulatedBottomBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="mainButtonsView" destination="vum-s3-PHx" id="fBi-DA-orA"/>
</connections>
<point key="canvasLocation" x="72" y="254"/>
</view>
</objects>
<resources>
<image name="ic_menu" width="48" height="48"/>
<image name="ic_menu_bookmark_list" width="48" height="48"/>
<image name="ic_menu_search" width="48" height="48"/>
<image name="info.circle" catalog="system" width="128" height="123"/>
</resources>
</document>

View File

@@ -1,144 +0,0 @@
import SwiftUI
/// View for the interface button
struct ControlsView: View {
// MARK: Properties
/// The dismiss action of the environment
@Environment(\.verticalSizeClass) private var verticalSizeClass
@State private var hasZoomButtons: Bool = true
@State private var leftMainButtonKind: MainButton.Kind = .hidden
@State private var hasMainButtons: Bool = true
/// The publisher to know when settings changed
private let settingsPublisher = NotificationCenter.default.publisher(for: UserDefaults.didChangeNotification)
/// The publisher to know when settings changed
private let changeVisibilityMainButtonsPublisher = NotificationCenter.default.publisher(for: Controls.changeVisibilityMainButtonsNotificationName)
/// The actual view
var body: some View {
ZStack {
if verticalSizeClass != .compact {
VStack(alignment: .trailing) {
HStack {
MapLayerButton()
Spacer(minLength: 0)
VStack {
MapTrackRecordingButton()
}
}
Spacer(minLength: 0)
VStack(spacing: 72) {
if hasZoomButtons {
VStack(spacing: 36) {
MapZoomButton(kind: .in)
MapZoomButton(kind: .out)
}
}
MapPositionButton()
}
Spacer(minLength: 0)
if hasMainButtons {
HStack {
if leftMainButtonKind != .hidden {
MainButton(kind: leftMainButtonKind)
Spacer(minLength: 0)
}
MainButton(kind: .search)
Spacer(minLength: 0)
MainButton(kind: .bookmarks)
Spacer(minLength: 0)
MainButton(kind: .more)
}
.frame(maxWidth: .infinity)
}
}
.padding([.leading, .trailing], 10)
} else {
HStack {
VStack(alignment: .leading) {
MapLayerButton()
Spacer(minLength: 0)
if hasMainButtons {
HStack(spacing: 32) {
if leftMainButtonKind != .hidden {
MainButton(kind: leftMainButtonKind)
}
MainButton(kind: .search)
MainButton(kind: .bookmarks)
MainButton(kind: .more)
}
}
}
Spacer(minLength: 0)
VStack(alignment: .trailing) {
VStack {
MapTrackRecordingButton()
}
Spacer(minLength: 0)
if hasZoomButtons {
VStack(spacing: 36) {
MapZoomButton(kind: .in)
MapZoomButton(kind: .out)
}
}
Spacer(minLength: 0)
MapPositionButton()
}
}
}
}
.padding(.top, 14)
.padding(.bottom, 2)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.onAppear {
hasZoomButtons = Settings.hasZoomButtons
leftMainButtonKind = Settings.leftMainButtonKind
hasMainButtons = Controls.shared().hasMainButtons()
}
.onReceive(settingsPublisher) { _ in
hasZoomButtons = Settings.hasZoomButtons
leftMainButtonKind = Settings.leftMainButtonKind
}
.onReceive(changeVisibilityMainButtonsPublisher) { _ in
hasMainButtons = Controls.shared().hasMainButtons()
}
}
}

View File

@@ -1,39 +0,0 @@
import SwiftUI
struct FloatingButtonStyle: ButtonStyle {
/// If the button is round
var isRound: Bool = true
func makeBody(configuration: Configuration) -> some View {
configuration.label
.labelStyle(.iconOnly)
.padding(10)
.aspectRatio(1, contentMode: .fill)
.background {
if isRound {
Circle()
.stroke(Color.white.opacity(0.7), lineWidth: 1)
.background {
Color.white.opacity(configuration.isPressed ? 0.7 : 0.8)
.clipShape(Circle())
}
.aspectRatio(1, contentMode: .fill)
.shadow(radius: 2)
} else {
RoundedRectangle(cornerRadius: 8)
.stroke(Color.white.opacity(0.7), lineWidth: 1)
.background {
Color.white.opacity(configuration.isPressed ? 0.7 : 0.8)
.clipShape(RoundedRectangle(cornerRadius: 8))
}
.aspectRatio(1, contentMode: .fill)
.shadow(radius: 3)
}
}
.font(.title2)
.foregroundStyle(configuration.role == .destructive ? Color(.BaseColors.red) : Color.secondary)
.scaleEffect(configuration.isPressed ? (isRound ? 0.96 : 0.98) : 1)
.animation(.smooth, value: configuration.isPressed)
}
}

View File

@@ -1,79 +0,0 @@
import SwiftUI
/// View for a main button
struct MainButton: View {
// MARK: Properties
/// The kind
var kind: MainButton.Kind
/// The actual view
var body: some View {
if kind != .hidden {
Button {
if kind == .addPlace {
if let controlsManager = MWMMapViewControlsManager.manager() as? BottomMenuDelegate {
controlsManager.addPlace()
}
} else if kind == .recordTrack {
let trackRecorder: TrackRecordingManager = .shared
switch trackRecorder.recordingState {
case .active:
MapViewController.shared()?.showTrackRecordingPlacePage()
case .inactive:
trackRecorder.start { result in
switch result {
case .success:
MapViewController.shared()?.showTrackRecordingPlacePage()
case .failure:
break
}
}
}
} else if kind == .search {
if let searchManager = MapViewController.shared()?.searchManager {
if searchManager.isSearching {
searchManager.close()
} else {
searchManager.startSearching(isRouting: false)
}
}
} else if kind == .bookmarks {
MapViewController.shared()?.bookmarksCoordinator.open()
} else if kind == .settings {
MapViewController.shared()?.openSettings()
} else if kind == .help {
MapViewController.shared()?.openAbout()
} else if kind == .more {
if let controlsManager = MWMMapViewControlsManager.manager() {
if controlsManager.menuState == .active {
controlsManager.menuState = .inactive
} else if controlsManager.menuState == .inactive {
controlsManager.menuState = .active
}
}
} else if kind == .layers {
if MapOverlayManager.trafficEnabled() || MapOverlayManager.transitEnabled() || MapOverlayManager.isoLinesEnabled() || MapOverlayManager.outdoorEnabled() {
MapOverlayManager.setTrafficEnabled(false)
MapOverlayManager.setTransitEnabled(false)
MapOverlayManager.setIsoLinesEnabled(false)
MapOverlayManager.setOutdoorEnabled(false)
} else {
MWMMapViewControlsManager.manager()?.menuState = .layers
}
}
} label: {
Label {
Text(kind.description)
} icon: {
if kind != .layers, let image = kind.image {
image
}
}
}
.buttonStyle(FloatingButtonStyle(isRound: false))
.frame(minWidth: 44, idealWidth: 44, minHeight: 44, idealHeight: 44)
}
}
}

View File

@@ -1,81 +0,0 @@
import SwiftUI
extension MainButton {
/// The type of the left bottom bar button
enum Kind: String, Codable, CaseIterable, Identifiable {
case hidden = "Hidden"
case addPlace = "AddPlace"
case recordTrack = "RecordTrack"
case search = "Search"
case bookmarks = "Bookmarks"
case settings = "Settings"
case help = "Help"
case more = "More"
case layers = "Layers"
// MARK: Properties
/// The configurable cases
static var configurableCases: [MainButton.Kind] {
allCases.filter { kind in
return kind != .more && kind != .bookmarks && kind != .search
}
}
/// The id
var id: Self { self }
/// The description text
var description: String {
switch self {
case .hidden:
return String(localized: "disabled")
case .addPlace:
return String(localized: "placepage_add_place_button")
case .recordTrack:
return String(localized: "start_track_recording")
case .search:
return String(localized: "search")
case .bookmarks:
return String(localized: "bookmarks")
case .settings:
return String(localized: "settings")
case .help:
return String(localized: "help")
case .more:
return String(localized: "placepage_more_button")
case .layers:
return String(localized: "layers_title")
}
}
/// The image
var image: Image? {
switch self {
case .addPlace:
return Image(systemName: "plus")
case .recordTrack:
return Image(.MainButtons.LeftButton.recordTrack)
case .search:
return Image(systemName: "magnifyingglass")
case .bookmarks:
return Image(systemName: "list.star")
case .settings:
return Image(systemName: "gearshape.fill")
case .help:
return Image(systemName: "info.circle")
case .layers:
return Image(systemName: "square.stack.3d.up.fill")
case .more:
return Image(systemName: "ellipsis.circle")
default:
return nil
}
}
}
}

View File

@@ -1,27 +0,0 @@
import SwiftUI
/// View for a map layer button
struct MapLayerButton: View {
// MARK: Properties
/// The actual view
var body: some View {
Group {
if Settings.leftMainButtonKind != .layers {
Button {
if MapOverlayManager.trafficEnabled() || MapOverlayManager.transitEnabled() || MapOverlayManager.isoLinesEnabled() || MapOverlayManager.outdoorEnabled() {
MapOverlayManager.setTrafficEnabled(false)
MapOverlayManager.setTransitEnabled(false)
MapOverlayManager.setIsoLinesEnabled(false)
MapOverlayManager.setOutdoorEnabled(false)
} else {
MWMMapViewControlsManager.manager()?.menuState = .layers
}
} label: {
Label("Show Layers", systemImage: "square.stack.3d.up.fill")
}
.buttonStyle(FloatingButtonStyle())
}
}
}
}

View File

@@ -1,39 +0,0 @@
import SwiftUI
/// View for a map position mode button
struct MapPositionButton: View {
// MARK: Properties
/// The mode
@State private var mode: MapPositionButton.Mode = .locate
/// The publisher to know when to stop showing the Safari view for the login form
private let switchPositionModePublisher = NotificationCenter.default.publisher(for: Controls.switchPositionModeNotificationName)
/// The actual view
var body: some View {
Button {
Controls.switchToNextPositionMode()
} label: {
Label {
Text(mode.description)
} icon: {
if mode == .following || mode == .followingAndRotated {
mode.image
.foregroundStyle(Color.BaseColors.blue)
} else {
mode.image
}
}
}
.buttonStyle(FloatingButtonStyle())
.onAppear {
mode = Controls.positionMode
}
.onReceive(switchPositionModePublisher) { _ in
mode = Controls.positionMode
}
}
}

View File

@@ -1,48 +0,0 @@
import SwiftUI
extension MapPositionButton {
/// The mode of the map position button
enum Mode: String, Codable, CaseIterable, Identifiable {
case locate = "Locate"
case locating = "Locating"
case following = "Following"
case followingAndRotated = "FollowingAndRotated"
// MARK: Properties
/// The id
var id: Self { self }
/// The description text
var description: String {
switch self {
case .locate:
return String(localized: "Find own location")
case .locating:
return String(localized: "Finding own location...")
case .following:
return String(localized: "Rotate map towards own direction")
case .followingAndRotated:
return String(localized: "Rotate map towards North")
}
}
/// The image
var image: Image {
switch self {
case .locate:
return Image(systemName: "location")
case .locating:
return Image(systemName: "progress.indicator")
case .following:
return Image(systemName: "location.fill")
case .followingAndRotated:
return Image(systemName: "location.north.line.fill")
}
}
}
}

View File

@@ -1,45 +0,0 @@
import SwiftUI
/// View for a map track recording button
struct MapTrackRecordingButton: View {
// MARK: Properties
/// The mode
@State private var isRecording: Bool = false
/// The publisher to know when to stop showing the Safari view for the login form
private let changeChangeTrackRecordingPublisher = NotificationCenter.default.publisher(for: Controls.changeChangeTrackRecordingNotificationName)
/// The actual view
var body: some View {
ZStack {
if isRecording {
Button(role: .destructive) {
if isRecording {
MapViewController.shared()?.showTrackRecordingPlacePage()
} else {
TrackRecordingManager.shared.start { result in
switch result {
case .success:
MapViewController.shared()?.showTrackRecordingPlacePage()
case .failure:
break
}
}
}
} label: {
Label("Show Track Recording", systemImage: "record.circle")
}
.buttonStyle(FloatingButtonStyle())
}
}
.onAppear {
isRecording = (TrackRecordingManager.shared.recordingState == .active)
}
.onReceive(changeChangeTrackRecordingPublisher) { _ in
isRecording = (TrackRecordingManager.shared.recordingState == .active)
}
}
}

View File

@@ -1,28 +0,0 @@
import SwiftUI
/// View for a map zoom button
struct MapZoomButton: View {
// MARK: Properties
/// The kind
var kind: MapZoomButton.Kind
/// The actual view
var body: some View {
Button {
if kind == .in {
Controls.zoomIn()
} else if kind == .out {
Controls.zoomOut()
}
} label: {
Label {
Text(kind.description)
} icon: {
kind.image
}
}
.buttonStyle(FloatingButtonStyle())
}
}

View File

@@ -1,38 +0,0 @@
import SwiftUI
extension MapZoomButton {
/// The type of the map zoom button
enum Kind: String, Codable, CaseIterable, Identifiable {
case `in` = "In"
case out = "Out"
// MARK: Properties
/// The id
var id: Self { self }
/// The description text
var description: String {
switch self {
case .in:
return String(localized: "zoom_in")
case .out:
return String(localized: "zoom_out")
}
}
/// The image
var image: Image {
switch self {
case .in:
return Image(systemName: "plus")
case .out:
return Image(systemName: "minus")
}
}
}
}

View File

@@ -17,7 +17,7 @@ struct SettingsView: View {
/// The selected left button type
@State private var selectedLeftMainButtonKind: MainButton.Kind = .help
@State private var selectedLeftButtonType: Settings.LeftButtonType = .help
/// If 3D buildings should be displayed
@@ -112,9 +112,9 @@ struct SettingsView: View {
Toggle("pref_zoom_title", isOn: $hasZoomButtons)
.tint(.accent)
Picker(selection: $selectedLeftMainButtonKind) {
ForEach(MainButton.Kind.configurableCases) { leftMainButtonKind in
Text(leftMainButtonKind.description)
Picker(selection: $selectedLeftButtonType) {
ForEach(Settings.LeftButtonType.allCases) { leftButtonType in
Text(leftButtonType.description)
}
} label: {
Text("pref_left_button_type")
@@ -291,7 +291,7 @@ struct SettingsView: View {
.onAppear {
selectedDistanceUnit = Settings.distanceUnit
hasZoomButtons = Settings.hasZoomButtons
selectedLeftMainButtonKind = Settings.leftMainButtonKind
selectedLeftButtonType = Settings.leftButtonType
has3dBuildings = Settings.has3dBuildings
hasAutomaticDownload = Settings.hasAutomaticDownload
hasIncreasedFontsize = Settings.hasIncreasedFontsize
@@ -311,8 +311,8 @@ struct SettingsView: View {
.onChange(of: hasZoomButtons) { changedHasZoomButtons in
Settings.hasZoomButtons = changedHasZoomButtons
}
.onChange(of: selectedLeftMainButtonKind) { changedSelectedLeftMainButtonKind in
Settings.leftMainButtonKind = changedSelectedLeftMainButtonKind
.onChange(of: selectedLeftButtonType) { changedSelectedLeftButtonType in
Settings.leftButtonType = changedSelectedLeftButtonType
}
.onChange(of: has3dBuildings) { changedHas3dBuildings in
Settings.has3dBuildings = changedHas3dBuildings

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