Compare commits

...

84 Commits

Author SHA1 Message Date
map-per
c09831caaa Use list form SC
Signed-off-by: map-per <map-per@gmx.de>
2025-11-14 21:58:42 +01:00
map-per
005f731faa clang-format
Signed-off-by: map-per <map-per@gmx.de>
2025-11-13 17:46:05 +01:00
map-per
237894cd45 switch to boost::regex and only construct regex once
Signed-off-by: map-per <map-per@gmx.de>
2025-11-13 17:27:21 +01:00
Yannik Bloscheck
323b49388d [ios] Added file to Xcode
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-13 14:02:28 +01:00
map-per
da9f2af963 use full regex match
Signed-off-by: map-per <map-per@gmx.de>
2025-11-13 11:53:15 +01:00
map-per
f292298c4e use own kes_to_remove list
Signed-off-by: map-per <map-per@gmx.de>
2025-11-13 11:16:07 +01:00
map-per
be15215b83 fixes
Signed-off-by: map-per <map-per@gmx.de>
2025-11-13 10:25:35 +01:00
map-per
4ae64791ff [editor] Mark businesse as disused/vacant
Signed-off-by: map-per <map-per@gmx.de>
2025-11-13 10:13:59 +01:00
NoelClick
1de35bb5f8 [android] Adjust phrasing to "Opens on ... / Closes on ..." for clarity
- Update i18n strings following review suggestion.

Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
7b7df6ff2e [android] Remove unused full "minutes" plural resource
- Keep only `minutes_short` (`%d min`) for compact display.
- Ensures consistency with search UI and avoids redundant i18n strings.

Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
33e2f4854e [android] Use 60/15 min short-horizon windows (yellow) for closes/opens
- Closes: Yellow when <= 60 min
- Opens: Yellow when <= 15 min
- Keep compact unit via `plurals/minutes_short`
- Long-horizon cases continue to show "Open / Closed now • Opens / Closes ... at ..."
- Use full weekday names for clarity

Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
5b4fa55e83 [android] Use compact min unit for short opening-hours label
* Replace "minutes" plural with new "minutes_short" (`%d min`) for concise
  display on the place page.

Signed-off-by: NoelClick <dev@noel.click>
(cherry picked from commit 5468927a285466a5c5614328a4400abb5182d302)
Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
83256c4895 [android] Show "Opens / Closes X at Y" using formatter + add i18n strings
- Wire `PlacePageView.refreshOpenState()` to `OpenStateTextFormatter`.
- Keep <= 60 min branch with plurals (“Closes in %d minutes • at HH:mm”).
- Add day hint when next change is not today (“Opens Sat at 09:00”).
- Add localized strings with positional placeholders:
  - `opens_at` / `closes_at` (... `%s`).
  - `opens_day_at` / `closes_day_at` (`%1$s=%day`, `%2$s=%time`).

Refs: #2303

Signed-off-by: NoelClick <dev@noel.click>
(cherry picked from commit be80c7486882ab64a64efc30d0979d3674bbcc29)
Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
94542456a2 [android] Add OpenStateTextFormatter and JVM tests
- Introduce a tiny, pure formatter for opening-hours labels:
	- `formatHoursMinutes(12/24h)`, `isSameLocalDate()`, `dayShort()`
	- `buildAtLabel(...)` that accepts already-localized templates
- Add JVM unit tests for hour formatting and label selection.

Signed-off-by: NoelClick <dev@noel.click>
(cherry picked from commit df4b5f2281607e5a35b98b1007fb34eabd4aa657)
Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
patepelo
dd620c3f0c Add wiki debug command to docs
Signed-off-by: patepelo <developing.anton@gmail.com>
2025-11-13 02:01:27 +07:00
Jean-Baptiste
a42db17858 [android] Add icon before some settings
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-12 19:13:37 +01:00
patepelo
738d0641ca Add Myanmar Burma synonyms
Signed-off-by: patepelo <developing.anton@gmail.com>
2025-11-12 21:16:34 +07:00
Yannik Bloscheck
4f5f8782fe [types] Adding lifebuoy
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-12 12:25:57 +01:00
Yannik Bloscheck
a886270dda [types] Add emergency access points
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-12 12:25:32 +01:00
x7z4w
66609ff08b [styles] Fix winery label
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-12 10:49:38 +01:00
zyphlar
c8bfeb8e96 Don't error when a temp file doesn't exist
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-11 19:46:22 -08:00
zyphlar
7fc5ed494b [tools] Handle not-yet-generated drules files
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-12 02:26:27 +01:00
zyphlar
d9850f506a [docs] Add CDN_SETUP_INSTRUCTIONS.md
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-12 02:26:27 +01:00
zyphlar
f16d14e07f [generator] Automate maps generation with Docker and CI/CD
Co-authored-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-12 02:26:27 +01:00
Codeberg Translate
7852cdb5a5 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Linus_W_Frische <linus_w_frische@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: javnik <javnik@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-12 00:09:38 +00:00
x7z4w
9a96096066 [android] Remove routing options item divider
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-11 19:18:25 +01:00
Wojciech Sipak
f72c4a28d9 fix openlr helpers build
See the commit e0f8e043bb
apparently the code was never tested

Signed-off-by: Wojciech Sipak <wsipak@protonmail.com>
2025-11-11 18:46:49 +01:00
Wojciech Sipak
68bb78b00d fix levenshtein dfa test build
The constuctor argument type was modified without
any adjustments to the callers.

See the commit
a0a5459b15

Signed-off-by: Wojciech Sipak <wsipak@protonmail.com>
2025-11-11 18:46:49 +01:00
Jean-Baptiste
b9d4f082de [android] Rework clear and close icon on Android
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-11 17:55:28 +01:00
Jean-Baptiste
7e40a0e642 [android] Fix drawable used in floating marker view
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-11 17:51:53 +01:00
x7z4w
0d3d1823d8 [taginfo] Regenerate
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-11 12:32:59 +01:00
Codeberg Translate
09e08c4c8f [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: ma12vlad <ma12vlad@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/iOS - Map Feature Types
2025-11-10 18:09:49 +00:00
x7z4w
a0a5459b15 [search] nits
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-10 18:15:48 +01:00
x7z4w
6e57f9a2ba [platform] Fix warning
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-10 17:22:30 +01:00
Codeberg Translate
d971c51fd1 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-10 14:09:44 +00:00
Codeberg Translate
ac23642462 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-10 10:09:28 +00:00
Yannik Bloscheck
cfe1ce2c67 [ios] Work around background selection issue
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-10 10:39:31 +01:00
Codeberg Translate
e07b2e52b3 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: Juno Takano <jutty@noreply.codeberg.org>
Co-authored-by: Mickael81 <mickael81@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: ToninoThePro <toninothepro@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: ldmpub <ldmpub@noreply.codeberg.org>
Co-authored-by: patepelo <patepelo@noreply.codeberg.org>
Co-authored-by: 玄枵 <ipmlosion@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Search synonyms / aliases
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-10 09:09:37 +00:00
Codeberg Translate
24f59a1344 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: ERYpTION <eryption@noreply.codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: groam <groam@noreply.codeberg.org>
Co-authored-by: yannikbloscheck <yannikbloscheck@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-09 22:09:31 +00:00
x7z4w
85f4c1c3eb [build] Fix hash for failed generation (#2421)
Co-authored-by: x7z4w <x7z4w@noreply.codeberg.org>
Co-committed-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-09 16:37:02 +01:00
Codeberg Translate
3a9faecc3d [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: yannikbloscheck <yannikbloscheck@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
2025-11-09 14:10:16 +00:00
Yannik Bloscheck
f0e078701e [types] Adding soup kitchens, food banks, food sharing and give boxes
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 14:16:31 +01:00
Yannik Bloscheck
7e27971605 [style] Fix label color for lighthouses
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 13:57:50 +01:00
Yannik Bloscheck
9267622494 [types] Added telescopes and observatories
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 13:57:50 +01:00
Yannik Bloscheck
82a4843431 [types] Add car pooling spaces
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 13:56:34 +01:00
Yannik Bloscheck
5bd7a284fa [ios] Fixes CarPlay voice setting being permanent
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 12:43:26 +01:00
map-per
84ecbaa63c [generator] Keep area shape to fix OSM editing
Signed-off-by: map-per <map-per@gmx.de>
2025-11-09 12:36:24 +01:00
map-per
91ba38df56 [editor] Improve place does not exist note text
Signed-off-by: map-per <map-per@gmx.de>
2025-11-09 12:30:45 +01:00
Yannik Bloscheck
31dcb954b1 [ios] Added custom icons to routing options
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 12:21:24 +01:00
Yannik Bloscheck
8b4eab3444 [ios] Add UI for avoiding paved roads
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-09 12:21:24 +01:00
x7z4w
90c12003bd [routing] Avoid paved roads
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-09 12:21:24 +01:00
Codeberg Translate
a4909a0554 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/iOS - Map Feature Types
2025-11-09 11:10:19 +01:00
x7z4w
1b9e9f5091 [cmake] Fix QT errors
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-09 10:33:46 +01:00
Yannik Bloscheck
bd78355263 [style] Fix label color for major communication towers
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-08 23:26:57 +01:00
Codeberg Translate
b3c188564e [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: jeanbaptisteC <jeanbaptistec@noreply.codeberg.org>
Co-authored-by: ldmpub <ldmpub@noreply.codeberg.org>
Co-authored-by: map-per <map-per@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Search synonyms / aliases
Translation: CoMaps/iOS - Map Feature Types
2025-11-08 17:09:30 +00:00
map-per
e891ffa5d1 [editor] compare coordinates with tolerance and in WGS 84
Signed-off-by: map-per <map-per@gmx.de>
2025-11-08 13:05:46 +01:00
map-per
8799c5613e [editor] Fixes for the OSM uploading code
Signed-off-by: map-per <map-per@gmx.de>
2025-11-08 11:47:51 +01:00
Codeberg Translate
4a91c55ece [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: map-per <map-per@noreply.codeberg.org>
Translation: CoMaps/Search synonyms / aliases
2025-11-08 09:51:22 +00:00
vikiawv
268ad19089 [styles] Removing whitespace from hexagon roadshields
Signed-off-by: vikiawv <vikiawv@noreply.codeberg.org>
2025-11-08 10:51:09 +01:00
vikiawv
325f62d8cb [styles] Adding Hungary roadshields
Signed-off-by: vikiawv <vikiawv@noreply.codeberg.org>
2025-11-08 10:51:09 +01:00
x7z4w
443d24b8d0 [cmake] Fix definitions
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-08 09:18:10 +01:00
Codeberg Translate
c0e492247e [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Frz <frz@noreply.codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Kachelkaiser <kachelkaiser@noreply.codeberg.org>
Co-authored-by: Pat580 <pat580@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Stzyxh <stzyxh@noreply.codeberg.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: codebergian42 <codebergian42@noreply.codeberg.org>
Co-authored-by: ghose <ghose@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Co-authored-by: teletext <teletext@noreply.codeberg.org>
Co-authored-by: x7z4w <x7z4w@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/Countries and regions names
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/Search synonyms / aliases
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plurals
Translation: CoMaps/iOS UI Strings
2025-11-08 08:30:09 +01:00
map-per
e71550e78b Fix details shown in editor for tourism and place_of_worship
Signed-off-by: map-per <map-per@gmx.de>
2025-11-07 22:56:33 +01:00
Yannik Bloscheck
b3991555b5 [styles] Fix waterpark label color
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 21:52:27 +01:00
map-per
c21afb27bd [editor] Higher priority for OSM upload on Android 12 and higher
Signed-off-by: map-per <map-per@gmx.de>
2025-11-07 21:02:22 +01:00
Yannik Bloscheck
dea24b5681 [styes] Add icon to train station buildings
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 21:00:17 +01:00
Yannik Bloscheck
51859424ea [types] Adding telecommunication shop
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:59:16 +01:00
Yannik Bloscheck
b5404cc2c6 [types] Adding indoor play
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:58:48 +01:00
Yannik Bloscheck
b8e0ad3b3e [types] Adding boat rental and icon for slipway
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:58:24 +01:00
Yannik Bloscheck
23b5d92d4f [types] Adding payment centre
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:55:37 +01:00
Yannik Bloscheck
99f3639b9c [types] Adding mobile money agent
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:52:24 +01:00
Yannik Bloscheck
e0f8e043bb [indexer] Support for road shield parsing by highway class
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:49:54 +01:00
Yannik Bloscheck
7f4ff8b606 [styles] Optimized file sizes of hexagon highway shields
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 20:45:27 +01:00
vikiawv
7132ff2ed8 [styles] Adding highway hexagon road shields
Signed-off-by: vikiawv <vikiawv@noreply.codeberg.org>
2025-11-07 20:45:27 +01:00
Konstantin Pastbin
7312560f48 [planet] Update map data to 251104
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-08 01:10:40 +07:00
Konstantin Pastbin
39332db8fc [tools] Fix deletion of non-existent relnotes dir
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-06 00:11:10 +07:00
Konstantin Pastbin
8865dac083 Update release notes for belated 2nd Oct release
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-05 17:35:45 +01:00
Konstantin Pastbin
e25e7dd583 [core] Use alt endpoint for ru1 CDN
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-05 13:48:47 +07:00
Yannik Bloscheck
9fa21f464c [styles] Fix little ordering nitpick
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-03 11:37:11 +01:00
Yannik Bloscheck
e79854a15a [styles] Make toll booth icon clearer
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-03 10:21:20 +01:00
Yannik Bloscheck
a3fc38952e [styles] Fix borders for national parks and aboriginal lands
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-03 09:45:50 +01:00
x7z4w
b74d9b104b [styles] Fix dojo label
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-02 19:55:20 +00:00
x7z4w
4567079c65 [search] Add synonym
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-02 15:21:23 +01:00
Yannik Bloscheck
fd5c2e6cd1 [styles] Also using circled icon for water parks
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-02 12:56:42 +01:00
337 changed files with 9619 additions and 3773 deletions

View File

@@ -5,10 +5,10 @@ on:
jobs:
description: 'Which job(s) to run right now?'
required: true
default: 'all'
default: 'all-except-upload'
type: choice
options:
- all
- all-except-upload
- copy-coasts
- planet
- wiki
@@ -16,30 +16,82 @@ on:
- subways
- tiger
- maps
- upload
map-generator-continue:
description: 'Continue previous map generation?'
required: false
default: false
type: boolean
map-generator-countries:
description: 'Generate specific MWMs? (i.e. "US_New York_*, foo")'
required: false
type: string
reset:
description: 'Reset part of the system?'
required: false
default: 'no'
type: choice
options:
- 'no'
- wiki-ratelimit
## 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 }}
MWMCONTINUE: ${{ inputs.map-generator-continue }}
MWMCOUNTRIES: ${{ inputs.map-generator-countries }}
DEBIAN_FRONTEND: noninteractive
TZ: Etc/UTC
jobs:
copy-coasts:
if: inputs.jobs == 'copy-coasts' || inputs.jobs == 'all'
name: Copy Previously Generated Coasts
clone-repos:
name: Clone Git Repos
runs-on: mapfilemaker
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal:/mnt/4tbexternal
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Checkout main repo
shell: bash
run: |
echo "Cloning $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY branch $FORGEJO_REF_NAME"
cd ~
git clone --recurse-submodules --shallow-submodules -b $FORGEJO_REF_NAME --single-branch $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY.git comaps
- name: Checkout wikiparser repo
shell: bash
run: |
cd ~
git clone https://codeberg.org/comaps/wikiparser.git
- name: Checkout subways repo
shell: bash
run: |
cd ~
git clone https://codeberg.org/comaps/subways.git
copy-coasts:
if: inputs.jobs == 'copy-coasts' || inputs.jobs == 'all-except-upload'
name: Copy Previously Generated Coasts
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
@@ -47,336 +99,403 @@ 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
echo "WorldCoasts available:"
ls -al /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.*
if [ -f /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom ]; then
echo "Before:"
ls -al /home/planet/latest_coasts*
cp -p /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom /home/planet/latest_coasts.geom
cp -p /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.rawgeom /home/planet/latest_coasts.rawgeom
echo "After:"
ls -al /home/planet/latest_coasts*
else
echo "No WorldCoasts found."
fi
update-planet:
if: inputs.jobs == 'planet' || inputs.jobs == 'all'
if: inputs.jobs == 'planet' || inputs.jobs == 'all-except-upload'
name: Update Planet
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
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
# TODO: replace wget2 with curl -Z
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
else
echo "planet-latest.osm.pbf was found, raw download not required."
fi
- name: Update Planet
shell: bash
run: |
cd /media/4tbexternal/osm-planet/planet/
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -vv --size 16384
cd /home/planet/planet/
rm -f planet-latest-new.osm.pbf
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -v --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
# TODO: better to run osmupdate (not convert) just before starting the maps jobs - for max fresh data.
run: |
echo "Starting..."
cd /home/planet/planet/
osmconvert -v --drop-author --drop-version --hash-memory=4000 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'
if: inputs.jobs == 'wiki' || inputs.jobs == 'all-except-upload'
name: Update Wikipedia
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
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
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Check for planet file
shell: bash
# TODO: remove debug output
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: Only get new dumps once per 30 days
shell: bash
run: |
if [[ '${{ inputs.reset }}' == 'wiki-ratelimit' ]]; then
echo "Bypassing wiki rate limit upon request."
exit 0
fi
datediff() {
d1=$(date -d "$1" +%s)
d2=$(date -d "$2" +%s)
echo $(( (d1 - d2) / 86400 ))
}
RECENTDUMPDATE=$(find /home/planet/wikipedia/dumps/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f6)
TODAY=$(date +%Y%m%d)
DATEDIFF=$(datediff $TODAY $RECENTDUMPDATE)
if [ $DATEDIFF -lt 30 ]; then
echo "ERROR: The most recent wiki dump is from $RECENTDUMPDATE, $DATEDIFF days ago. Wikimedia limits users to 15 snapshot requests per month."
echo "Set the 'reset' option to 'wiki-ratelimit' to bypass this."
ls -al /home/planet/wikipedia/dumps/
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? pastk: no need, its being updated / augmented
mkdir -p /home/planet/wikipedia/dumps
mkdir -p /home/planet/wikipedia/build
cd ~/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"
- name: Check that the latest dumps are present, recent, and not super tiny
shell: bash
run: |
FAILCHECK=0
# Check all .tar.gz files in /home/planet/wikipedia/dumps/latest/
for file in /home/planet/wikipedia/dumps/latest/*.tar.gz; do
# Check if file exists (handles case where glob doesn't match)
[ -e "$file" ] || continue
# Get file size in MB and modification time in days
size_mb=$(stat -f%z "$file" 2>/dev/null | awk '{print int($1/1024/1024)}' || stat -c%s "$file" | awk
'{print int($1/1024/1024)}')
days_old=$(find "$file" -mtime -7 | wc -l)
# Verify conditions
if [ "$size_mb" -lt 100 ]; then
echo "FAIL: $file is only ${size_mb}MB (< 100MB)"
FAILCHECK=1
elif [ "$days_old" -eq 0 ]; then
echo "FAIL: $file is older than 7 days"
ls -al $file
FAILCHECK=1
else
echo "PASS: $file (${size_mb}MB, modified within 7 days)"
fi
done
exit $FAILCHECK
- 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=Wiki update is done!'
update-isolines:
if: inputs.jobs == 'isolines' || inputs.jobs == 'all'
if: inputs.jobs == 'isolines' || inputs.jobs == 'all-except-upload'
name: Update Isolines
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
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
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
# 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
# TODO: preserve previous isolines version?
# TODO: cleanup the tmp-tiles dir after completion
run: |
cd /media/4tbexternal/comaps-init/
./tools/unix/build_omim.sh -R topography_generator_tool
rm -rf ../osm-planet/isolines/
mkdir ../osm-planet/isolines/
../omim-build-relwithdebinfo/topography_generator_tool \
cd ~/comaps/
./tools/unix/build_omim.sh -p ~ -R topography_generator_tool
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/ \
--threads=22
--srtm_path=/home/planet/SRTM-patched-europe/ \
--threads=96
- name: Check isolines
shell: bash
run: |
NUMISO=$(ls -al /home/planet/isolines/*.isolines | wc -l)
echo "Found $NUMISO isolines"
if [ $NUMISO -lt 10 ]; then
echo "ERROR: Did generation fail?"
exit 1
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=Isolines are done!'
update-subways:
if: inputs.jobs == 'subways' || inputs.jobs == 'all'
if: inputs.jobs == 'subways' || inputs.jobs == 'all-except-upload'
name: Update Subways
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
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
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Update Subways
shell: bash
run: |
cd /media/4tbexternal/comaps-init/
cd ~/comaps/
cp tools/unix/maps/settings.sh.prod tools/unix/maps/settings.sh
./tools/unix/maps/generate_subways.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=Subways are done!'
update-tiger:
if: inputs.jobs == 'tiger' || inputs.jobs == 'all'
if: inputs.jobs == 'tiger' || inputs.jobs == 'all-except-upload'
name: Update TIGER
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
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
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Build address_parser
shell: bash
run: |
cd /media/4tbexternal/comaps-init
rm -rf ../omim-build-relwithdebinfo/CMakeCache.txt
rm -rf ../omim-build-relwithdebinfo/CMakeFiles
./tools/unix/build_omim.sh -R address_parser_tool
cd ~/comaps
#rm -rf ~/omim-build-relwithdebinfo/CMakeCache.txt
#rm -rf ~/omim-build-relwithdebinfo/CMakeFiles
./tools/unix/build_omim.sh -p ~ -R address_parser_tool
- name: Update TIGER from Nominatim
shell: bash
# TODO: use curl instead of wget2
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 ~/comaps
tar -xOzf /home/planet/tiger-nominatim-preprocessed-latest.csv.tar.gz | ~/omim-build-relwithdebinfo/address_parser_tool --output_path=/home/planet/tiger
generate-maps:
if: inputs.jobs == 'maps' || inputs.jobs == 'all'
if: inputs.jobs == 'maps' || inputs.jobs == 'all-except-upload'
name: Generate Maps
runs-on: mapfilemaker
needs:
- clone-repos
timeout-minutes: 40320
container:
image: ubuntu:latest
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /media/4tbexternal:/media/4tbexternal
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
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
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Make output folders if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/osm-maps ]; then
mkdir -p /media/4tbexternal/osm-maps
if [ ! -d /mnt/4tbexternal/osm-maps ]; then
mkdir -p /mnt/4tbexternal/osm-maps
fi
- name: Get SRTM if necessary
# TODO: it should be a separate step like Wiki or isolines
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 ~/comaps
bash ./tools/unix/maps/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'
name: Upload Maps
runs-on: mapfilemaker
container:
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
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
- name: Upload map files to CDNs
shell: bash
run: |
shopt -s nullglob
buildfolder=$(find /mnt/4tbexternal/osm-maps/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f5)
builddate=$(find /mnt/4tbexternal/osm-maps/*/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f6)
mwmfiles=( /mnt/4tbexternal/osm-maps/$buildfolder/$builddate/*.mwm )
if (( ${#mwmfiles[@]} )); then
echo "<$(date +%T)> Uploading maps from $buildfolder/$builddate..."
cd ~/comaps/tools/unix/maps
./upload_to_cdn.sh /mnt/4tbexternal/osm-maps/$buildfolder/$builddate
echo "<$(date +%T)> Finished uploading maps from $buildfolder/$builddate."
else
echo "<$(date +%T)> No MWM files in /mnt/4tbexternal/osm-maps/$buildfolder/$builddate/*.mwm, not uploading maps."
echo "<$(date +%T)> Found top level: $(ls -alt /mnt/4tbexternal/osm-maps/*)"
echo "<$(date +%T)> Found second level: $(ls -alt /mnt/4tbexternal/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

@@ -175,10 +175,10 @@ if (NOT PLATFORM_IPHONE AND NOT PLATFORM_ANDROID)
find_package(Qt6 COMPONENTS REQUIRED ${qt_components} PATHS $ENV{QT_PATH} /opt/homebrew/opt/qt@6 /usr/local/opt/qt@6 /usr/lib/x86_64-linux-gnu/qt6)
set(MINIMUM_REQUIRED_QT_VERSION 6.4.0)
if (Qt6Widgets_VERSION VERSION_LESS ${MINIMUM_REQUIRED_QT_VERSION})
message(FATAL_ERROR "Unsupported Qt version: ${Qt6Widgets_VERSION}, the minimum required is ${MINIMUM_REQUIRED_QT_VERSION}")
if (Qt6_VERSION VERSION_LESS ${MINIMUM_REQUIRED_QT_VERSION})
message(FATAL_ERROR "Unsupported Qt version: ${Qt6_VERSION}, the minimum required is ${MINIMUM_REQUIRED_QT_VERSION}")
else()
message(STATUS "Found Qt version: ${Qt6Widgets_VERSION}")
message(STATUS "Found Qt version: ${Qt6_VERSION}")
endif()
endif()

View File

@@ -1,8 +1,8 @@
• OpenStreetMap-Daten vom 28. Oktober
• OpenStreetMap-Daten vom 4. November
• 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 (via OM)
• Verbesserte Sprachführung während der Navigation
Weitere Änderungen finden in unseren Codeberg-Versionshinweisen!

View File

@@ -1,7 +1,8 @@
• 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 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)
• 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
Check our Codeberg release notes for more changes!

View File

@@ -1,7 +1,7 @@
• Datos OSM del 28/10
• Datos OSM del 04/11
• 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 (via OM)
• Mejora en la orientación por voz durante la navegación
Más detalles en Codeberg

View File

@@ -1,8 +1,8 @@
• Données OpenStreetMap du 28 octobre
• Données OpenStreetMap au 4 novembre
• 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 (via le projet OM)
• Amélioration de la synthèse vocale durant la navigation
Plus d'informations sur notre Codeberg

View File

@@ -1,7 +1,7 @@
• Dados OSM de 28/10
• Dados OSM de 04/11
• Í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 (via projeto OM)
• Melhoria na orientação por voz durante a navegação
Confira nossas notas de lançamento no Codeberg para mais detalhes!

View File

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

View File

@@ -0,0 +1,31 @@
Brezplačno in odprtokodno zemljevidno orodje, ki ga vodi skupnost, temelji na podatkih OpenStreetMap in je okrepljena s predanostjo transparentnosti, zasebnosti in nedobičkonosnosti. CoMaps je izpeljanka OrganicMaps, ta pa je izpeljanka Maps.ME.
Preverite si o razlogih za ta projekt in njegovi usmerjenosti na <b><i>codeberg.org/comaps</i></b>.
Pridružite se skupnosti in pomagajte narediti najboljše zemljevidno orodje
• Uporabljajte orodje in širite glas o njem
• Dajajte povratne informacije in poročajte o napakah
• Posodabljajte podatke zemljevida v tem orodju ali na spletni strani OpenStreetMap
‣ <b>Osredotočeno na uporabo brez povezave</b>: Načrtujte in se usmerjajte na vašem potovanju v tujini vrez potrebe po mobilnih podatkih, iščite vmesne točke potocanja ko ste na daljšem pohodu ipd. Vse zmogljivosti orodja so zasnovane za delo brez povezave.
‣ <b>Spoštovanje zasebnosti</b>: orodje je zasnovano z mislijo na zasebnost ne prepoznava oseb, ne sledi in ne zbira osebnih podatkov. Brez oglasov.
‣ <b>Preprosto in dodelano</b>: nujne zmogljivosti, enostavne za uporabo, ki preprosto delujejo.
‣ <b>Prihrani vašo baterijo in prostor.</b>: ne izčrpava vaše baterije kakor druga usmerjevalna orodja. Strnjeni zemljevidi prihranijo dragocen prostor na vašem telefonu.
‣ <b>Brezplačno in ustvarjeno v skupnosti</b>: ljudje kot ste vi pomagajo ustvarjati to orodje, tako da dodajajo kraje na OpenStreetMap, preizkušajo in dajejo povratne informacije o zmogljivostih in prispevajo svoje razvijalske sposobnosti in sredstva.
‣ <b>Odprto in transparentno odločanje in finance, nedobičkonosno in popolnoma odprtokodno.</b>
<b>Glavne zmogljivosti</b>:
• Prenosljivi podrobni zemljevidi s kraji, ki na Googlovoh zemljevidih niso na voljo.
• Prikaz za dejavnosti na prostem s poudarjenimi pohodniškimi potmi, tabornimi prostori, vodnimi viri, vrhovi, plastnicami itd.
• Pešpoti in kolesarke poti
• Kraji zanimanja, npr. restavracije, bencinske črpalke, hoteli, trgovine, znamenitosti in mnogo več
• Iščite po imenu, hišnemu naslovu ali po vrsti
• Usmerjanje z glasovnimi obvestili za hojo, kolesarjenje ali vožnjo avtomobila.
• Zaznamujte svoje najljubše kraje s preprostim dotikom
• Wikipedijini članki brez povezave
• Prometna plast podzemne železnice z usmerjanjem
• Izvozite ali uvozite zaznamke in sledi v oblikah KML, KMZ, GPX
• Temni prikaz za uporabo ponoči
• Izboljšajtw podatke zemljevida za vse z uporabo vgrajenega urejevalnika
<b>Svoboda je tu</b>
Odkijte več o vašem potovanju, usmerjajte se po svetu s poudarkom na zasebnosti in skupnostnem delovanju!

View File

@@ -0,0 +1 @@
Comaps- Vandra, Cykla, Kör Offline, Privat

View File

@@ -0,0 +1 @@
Comaps- Navigera Privat

View File

@@ -1,11 +1,13 @@
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;
@@ -35,7 +37,11 @@ public class OsmUploadWork extends Worker
if (Editor.nativeHasSomethingToUpload() && OsmOAuth.isAuthorized())
{
final Constraints c = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
final OneTimeWorkRequest wr = new OneTimeWorkRequest.Builder(OsmUploadWork.class).setConstraints(c).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();
WorkManager.getInstance(context).beginUniqueWork("UploadOsmChanges", ExistingWorkPolicy.KEEP, wr).enqueue();
}
}

View File

@@ -32,7 +32,8 @@ public class DrivingOptionsScreen extends BaseMapScreen
new DrivingOption(RoadType.Dirty, R.string.avoid_unpaved),
new DrivingOption(RoadType.Ferry, R.string.avoid_ferry),
new DrivingOption(RoadType.Motorway, R.string.avoid_motorways),
new DrivingOption(RoadType.Steps, R.string.avoid_steps)};
new DrivingOption(RoadType.Steps, R.string.avoid_steps),
new DrivingOption(RoadType.Paved, R.string.avoid_paved)};
@NonNull
private final Map<RoadType, Boolean> mInitialDrivingOptionsState = new HashMap<>();

View File

@@ -357,7 +357,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
private MenuBottomSheetItem getCancelMenuItem()
{
return new MenuBottomSheetItem(R.string.cancel, R.drawable.ic_cancel, () -> onCancelActionSelected(mSelectedItem));
return new MenuBottomSheetItem(R.string.cancel, R.drawable.ic_close, () -> onCancelActionSelected(mSelectedItem));
}
private class ItemViewHolder extends BaseInnerViewHolder<CountryItem>

View File

@@ -153,6 +153,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private final Map<Metadata.MetadataType, View> mDetailsBlocks = new HashMap<>();
private final Map<Metadata.MetadataType, View> mSocialMediaBlocks = new HashMap<>();
private MaterialButton mReset;
private MaterialButton mDisused;
private EditorHostFragment mParent;
@@ -827,6 +828,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
osmInfo.setMovementMethod(LinkMovementMethod.getInstance());
mReset = view.findViewById(R.id.reset);
mReset.setOnClickListener(this);
mDisused = view.findViewById(R.id.disused);
mDisused.setOnClickListener(this);
mDetailsBlocks.put(Metadata.MetadataType.FMD_OPEN_HOURS, blockOpeningHours);
mDetailsBlocks.put(Metadata.MetadataType.FMD_PHONE_NUMBER, blockPhone);
@@ -894,6 +897,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
mParent.addLanguage();
else if (id == R.id.reset)
reset();
else if (id == R.id.disused)
placeDisused();
else if (id == R.id.block_outdoor_seating)
mOutdoorSeating.toggle();
}
@@ -939,9 +944,12 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
if (mParent.addingNewObject())
{
UiUtils.hide(mReset);
UiUtils.hide(mDisused);
return;
}
mDisused.setVisibility(Editor.nativeCanMarkPlaceAsDisused() ? View.VISIBLE : View.GONE);
if (Editor.nativeIsMapObjectUploaded())
{
mReset.setText(R.string.editor_place_doesnt_exist);
@@ -1014,6 +1022,19 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
dialogFragment.setTextSaveListener(this::commitPlaceDoesntExists);
}
private void placeDisused()
{
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
.setTitle(R.string.editor_mark_business_vacant_title)
.setMessage(R.string.editor_mark_business_vacant_description)
.setPositiveButton(R.string.editor_submit, (dlg, which) -> {
Editor.nativeMarkPlaceAsDisused();
mParent.processEditedFeatures();
})
.setNegativeButton(android.R.string.cancel, null)
.show();
}
private void commitPlaceDoesntExists(@NonNull String text)
{
Editor.nativePlaceDoesNotExist(text);

View File

@@ -358,7 +358,7 @@ public class EditorHostFragment
.show();
}
private void processEditedFeatures()
public void processEditedFeatures()
{
if (OsmOAuth.isAuthorized())
{

View File

@@ -90,28 +90,36 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
{
SwitchCompat tollsBtn = root.findViewById(R.id.avoid_tolls_btn);
tollsBtn.setChecked(RoutingOptions.hasOption(RoadType.Toll));
CompoundButton.OnCheckedChangeListener tollBtnListener = new ToggleRoutingOptionListener(RoadType.Toll);
CompoundButton.OnCheckedChangeListener tollBtnListener = new ToggleRoutingOptionListener(RoadType.Toll, root);
tollsBtn.setOnCheckedChangeListener(tollBtnListener);
SwitchCompat motorwaysBtn = root.findViewById(R.id.avoid_motorways_btn);
motorwaysBtn.setChecked(RoutingOptions.hasOption(RoadType.Motorway));
CompoundButton.OnCheckedChangeListener motorwayBtnListener = new ToggleRoutingOptionListener(RoadType.Motorway);
CompoundButton.OnCheckedChangeListener motorwayBtnListener =
new ToggleRoutingOptionListener(RoadType.Motorway, root);
motorwaysBtn.setOnCheckedChangeListener(motorwayBtnListener);
SwitchCompat ferriesBtn = root.findViewById(R.id.avoid_ferries_btn);
ferriesBtn.setChecked(RoutingOptions.hasOption(RoadType.Ferry));
CompoundButton.OnCheckedChangeListener ferryBtnListener = new ToggleRoutingOptionListener(RoadType.Ferry);
CompoundButton.OnCheckedChangeListener ferryBtnListener = new ToggleRoutingOptionListener(RoadType.Ferry, root);
ferriesBtn.setOnCheckedChangeListener(ferryBtnListener);
SwitchCompat dirtyRoadsBtn = root.findViewById(R.id.avoid_dirty_roads_btn);
dirtyRoadsBtn.setChecked(RoutingOptions.hasOption(RoadType.Dirty));
CompoundButton.OnCheckedChangeListener dirtyBtnListener = new ToggleRoutingOptionListener(RoadType.Dirty);
dirtyRoadsBtn.setEnabled(!RoutingOptions.hasOption(RoadType.Paved) || RoutingOptions.hasOption(RoadType.Dirty));
CompoundButton.OnCheckedChangeListener dirtyBtnListener = new ToggleRoutingOptionListener(RoadType.Dirty, root);
dirtyRoadsBtn.setOnCheckedChangeListener(dirtyBtnListener);
SwitchCompat stepsBtn = root.findViewById(R.id.avoid_steps_btn);
stepsBtn.setChecked(RoutingOptions.hasOption(RoadType.Steps));
CompoundButton.OnCheckedChangeListener stepsBtnListener = new ToggleRoutingOptionListener(RoadType.Steps);
CompoundButton.OnCheckedChangeListener stepsBtnListener = new ToggleRoutingOptionListener(RoadType.Steps, root);
stepsBtn.setOnCheckedChangeListener(stepsBtnListener);
SwitchCompat pavedBtn = root.findViewById(R.id.avoid_paved_roads_btn);
pavedBtn.setChecked(RoutingOptions.hasOption(RoadType.Paved));
pavedBtn.setEnabled(!RoutingOptions.hasOption(RoadType.Dirty) || RoutingOptions.hasOption(RoadType.Paved));
CompoundButton.OnCheckedChangeListener pavedBtnListener = new ToggleRoutingOptionListener(RoadType.Paved, root);
pavedBtn.setOnCheckedChangeListener(pavedBtnListener);
}
private static class ToggleRoutingOptionListener implements CompoundButton.OnCheckedChangeListener
@@ -119,9 +127,13 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
@NonNull
private final RoadType mRoadType;
private ToggleRoutingOptionListener(@NonNull RoadType roadType)
@NonNull
private final View mRoot;
private ToggleRoutingOptionListener(@NonNull RoadType roadType, @NonNull View root)
{
mRoadType = roadType;
mRoot = root;
}
@Override
@@ -131,6 +143,27 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
RoutingOptions.addOption(mRoadType);
else
RoutingOptions.removeOption(mRoadType);
SwitchCompat dirtyRoadsBtn = mRoot.findViewById(R.id.avoid_dirty_roads_btn);
SwitchCompat pavedBtn = mRoot.findViewById(R.id.avoid_paved_roads_btn);
if (mRoadType == RoadType.Dirty)
{
pavedBtn.setEnabled(!isChecked);
if (isChecked)
{
pavedBtn.setChecked(false);
dirtyRoadsBtn.setEnabled(true);
}
}
else if (mRoadType == RoadType.Paved)
{
dirtyRoadsBtn.setEnabled(!isChecked);
if (isChecked)
{
dirtyRoadsBtn.setChecked(false);
pavedBtn.setEnabled(true);
}
}
}
}
}

View File

@@ -0,0 +1,49 @@
package app.organicmaps.widget.placepage;
import java.time.ZonedDateTime;
import java.time.format.TextStyle;
import java.util.Locale;
public class OpenStateTextFormatter
{
private OpenStateTextFormatter() {}
static String formatHoursMinutes(int hour, int minute, boolean use24h)
{
if (use24h)
return String.format(Locale.ROOT, "%02d:%02d", hour, minute);
int h = hour % 12;
if (h == 0) h = 12;
String ampm = (hour < 12) ? "AM" : "PM";
return String.format(Locale.ROOT, "%d:%02d %s", h, minute, ampm);
}
static boolean isSameLocalDate(ZonedDateTime a, ZonedDateTime b)
{
return a.toLocalDate().isEqual(b.toLocalDate());
}
static String dayShort(ZonedDateTime t, Locale locale)
{
return t.getDayOfWeek().getDisplayName(TextStyle.SHORT, locale);
}
static String buildAtLabel(
boolean opens,
boolean isToday,
String dayShort,
String time,
String opensAtLocalized,
String closesAtLocalized,
String opensDayAtLocalized,
String closesDayAtLocalized
)
{
if (isToday)
return opens ? String.format(Locale.ROOT, opensAtLocalized, time) // Opens at %s
: String.format(Locale.ROOT, closesAtLocalized, time); // Closes at %s
return opens ? String.format(Locale.ROOT, opensDayAtLocalized, dayShort, time) // Opens %s at %s
: String.format(Locale.ROOT, closesDayAtLocalized, dayShort, time); // Closes %s at %s
}
}

View File

@@ -85,9 +85,11 @@ import com.google.android.material.textview.MaterialTextView;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.TextStyle;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
public class PlacePageView extends Fragment
implements View.OnClickListener, View.OnLongClickListener, LocationListener, SensorListener, Observer<MapObject>,
@@ -105,6 +107,10 @@ public class PlacePageView extends Fragment
private static final String LINKS_FRAGMENT_TAG = "LINKS_FRAGMENT_TAG";
private static final String TRACK_SHARE_MENU_ID = "TRACK_SHARE_MENU_ID";
private static final int SHORT_HORIZON_CLOSE_MIN = 60;
private static final int SHORT_HORIZON_OPEN_MIN = 15;
private static final List<CoordinatesFormat> visibleCoordsFormat =
Arrays.asList(CoordinatesFormat.LatLonDMS, CoordinatesFormat.LatLonDecimal, CoordinatesFormat.OLCFull,
CoordinatesFormat.UTM, CoordinatesFormat.MGRS, CoordinatesFormat.OSMLink);
@@ -797,57 +803,95 @@ public class PlacePageView extends Fragment
final String ohStr = mMapObject.getMetadata(Metadata.MetadataType.FMD_OPEN_HOURS);
final Timetable[] timetables = OpeningHours.nativeTimetablesFromString(ohStr);
if (timetables != null && timetables.length != 0)
// No valid timetable
if (timetables == null || timetables.length == 0)
{
final Context context = requireContext();
final OhState poiState = OpeningHours.nativeCurrentState(timetables);
// Ignore unknown rule state
if (poiState.state == OhState.State.Unknown)
{
UiUtils.hide(mTvOpenState);
return;
}
// Get colours
final ForegroundColorSpan colorGreen =
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_green));
final ForegroundColorSpan colorYellow =
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_yellow));
final ForegroundColorSpan colorRed = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_red));
// Get next state info
final SpannableStringBuilder openStateString = new SpannableStringBuilder();
final boolean isOpen = (poiState.state == OhState.State.Open); // False == Closed due to early exit for Unknown
final long nextStateTime = isOpen ? poiState.nextTimeClosed : poiState.nextTimeOpen; // Unix time (seconds)
final int minsToNextState = (int) ((nextStateTime - (System.currentTimeMillis() / 1000)) / 60);
if (minsToNextState <= 60) // POI opens/closes in 60 mins
{
final String minsToChangeStr = minsToNextState + " " + getString(R.string.minute);
final String nextChangeFormatted = getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
final ForegroundColorSpan nextChangeColor = isOpen ? colorYellow : colorRed;
// TODO: We should check closed/open time for specific feature's timezone.
ZonedDateTime time = ZonedDateTime.ofInstant(Instant.ofEpochSecond(nextStateTime), ZoneId.systemDefault());
String localizedTime =
new HoursMinutes(time.getHour(), time.getMinute(), DateUtils.is24HourFormat(context)).toString();
openStateString.append(nextChangeFormatted, nextChangeColor, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
.append("") // Add spacer
.append(getString(R.string.at, localizedTime));
}
else if (isOpen)
openStateString.append(getString(R.string.open_now), colorGreen, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// TODO: Add "Closes at 18:00" etc
else // Closed
openStateString.append(getString(R.string.closed_now), colorRed, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// TODO: Add "Opens at 18:00" etc
UiUtils.setTextAndHideIfEmpty(mTvOpenState, openStateString);
UiUtils.hide(mTvOpenState);
return;
}
// No valid timetable
UiUtils.hide(mTvOpenState);
final Context context = requireContext();
final OhState poiState = OpeningHours.nativeCurrentState(timetables);
// Ignore unknown rule state
if (poiState.state == OhState.State.Unknown)
{
UiUtils.hide(mTvOpenState);
return;
}
// Get colours
final ForegroundColorSpan colorGreen =
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_green));
final ForegroundColorSpan colorYellow =
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_yellow));
final ForegroundColorSpan colorRed = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_red));
// Get next state info
final SpannableStringBuilder openStateString = new SpannableStringBuilder();
final boolean isOpen = (poiState.state == OhState.State.Open); // False == Closed due to early exit for Unknown
final long nextStateTime = isOpen ? poiState.nextTimeClosed : poiState.nextTimeOpen; // Unix time (seconds)
final long nowSec = System.currentTimeMillis() / 1000;
final int minsToNextState = (int) ((nextStateTime - nowSec) / 60);
// NOTE: Timezone is currently device timezone. TODO: use feature-specific timezone.
final ZonedDateTime nextChangeLocal =
ZonedDateTime.ofInstant(Instant.ofEpochSecond(nextStateTime), ZoneId.systemDefault());
String localizedTimeString = OpenStateTextFormatter.formatHoursMinutes(
nextChangeLocal.getHour(), nextChangeLocal.getMinute(), DateUtils.is24HourFormat(context));
final boolean shortHorizonClosing = isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_CLOSE_MIN;
final boolean shortHorizonOpening = !isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_OPEN_MIN;
if (shortHorizonClosing || shortHorizonOpening) // POI Opens/Closes in 60 mins • at 18:00
{
final String minsToChangeStr = getResources().getQuantityString(
R.plurals.minutes_short, Math.max(minsToNextState, 1), Math.max(minsToNextState, 1));
final String nextChangeFormatted = getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
openStateString.append(nextChangeFormatted, colorYellow, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
.append("") // Add spacer
.append(getString(R.string.at, localizedTimeString));
}
else
{
final String opensAtStr = getString(R.string.opens_at); // "Opens at %s"
final String closesAtStr = getString(R.string.closes_at); // "Closes at %s"
final String opensDayAtStr = getString(R.string.opens_day_at); // "Opens %1$s at %2$s"
final String closesDayAtStr = getString(R.string.closes_day_at); // "Closes %1$s at %2$s"
final boolean isToday =
OpenStateTextFormatter.isSameLocalDate(nextChangeLocal, ZonedDateTime.now(nextChangeLocal.getZone()));
// Full weekday name per design feedback.
final String dayName =
nextChangeLocal.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.getDefault());
if (isOpen) // > 60 minutes OR negative (safety). Show “Open now • Closes at 18:00”
{
openStateString.append(getString(R.string.open_now), colorGreen, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
final String atLabel =
OpenStateTextFormatter.buildAtLabel(false, isToday, dayName, localizedTimeString,
opensAtStr, closesAtStr, opensDayAtStr, closesDayAtStr);
if (!TextUtils.isEmpty(atLabel))
openStateString.append("").append(atLabel);
}
else // Closed
{
openStateString.append(getString(R.string.closed_now), colorRed, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
final String atLabel =
OpenStateTextFormatter.buildAtLabel(true, isToday, dayName, localizedTimeString,
opensAtStr, closesAtStr, opensDayAtStr, closesDayAtStr);
if (!TextUtils.isEmpty(atLabel))
openStateString.append("").append(atLabel);
}
}
UiUtils.setTextAndHideIfEmpty(mTvOpenState, openStateString);
}
private void addPlace()

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M80,360v-160q0,-33 23.5,-56.5T160,120h640q33,0 56.5,23.5T880,200v160h-80v-160L160,200v160L80,360ZM160,720q-33,0 -56.5,-23.5T80,640v-200h80v200h640v-200h80v200q0,33 -23.5,56.5T800,720L160,720ZM40,840v-80h880v80L40,840ZM480,420ZM80,440v-80h240q11,0 21,6t15,16l47,93 123,-215q5,-9 14,-14.5t20,-5.5q11,0 21,5.5t15,16.5l49,98h235v80L620,440q-11,0 -21,-5.5T584,418l-26,-53 -123,215q-5,10 -15,15t-21,5q-11,0 -20.5,-6T364,578l-69,-138L80,440Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,536L284,732Q273,743 256,743Q239,743 228,732Q217,721 217,704Q217,687 228,676L424,480L228,284Q217,273 217,256Q217,239 228,228Q239,217 256,217Q273,217 284,228L480,424L676,228Q687,217 704,217Q721,217 732,228Q743,239 743,256Q743,273 732,284L536,480L732,676Q743,687 743,704Q743,721 732,732Q721,743 704,743Q687,743 676,732L480,536Z"/>
</vector>

View File

@@ -1,5 +1,10 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,536L284,732Q273,743 256,743Q239,743 228,732Q217,721 217,704Q217,687 228,676L424,480L228,284Q217,273 217,256Q217,239 228,228Q239,217 256,217Q273,217 284,228L480,424L676,228Q687,217 704,217Q721,217 732,228Q743,239 743,256Q743,273 732,284L536,480L732,676Q743,687 743,704Q743,721 732,732Q721,743 704,743Q687,743 676,732L480,536Z"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M480,840q-150,0 -255,-105T120,480q0,-150 105,-255t255,-105q14,0 27.5,1t26.5,3q-41,29 -65.5,75.5T444,300q0,90 63,153t153,63q55,0 101,-24.5t75,-65.5q2,13 3,26.5t1,27.5q0,150 -105,255T480,840ZM480,760q88,0 158,-48.5T740,585q-20,5 -40,8t-40,3q-123,0 -209.5,-86.5T364,300q0,-20 3,-40t8,-40q-78,32 -126.5,102T200,480q0,116 82,198t198,82ZM470,490Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?colorControlNormal">
<path
android:pathData="M19,9h-4v-6h-6v6h-4l7,7 7,-7ZM5,18v2h14v-2h-14Z"
android:fillColor="#FFF"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M216,784q-45,-45 -70.5,-104T120,558q0,-63 24,-124.5T222,318q35,-35 86.5,-60t122,-39.5Q501,204 591.5,201t202.5,7q8,106 5,195t-16.5,160.5q-13.5,71.5 -38,125T684,778q-53,53 -112.5,77.5T450,880q-65,0 -127,-25.5T216,784ZM328,768q29,17 59.5,24.5T450,800q46,0 91,-18.5t86,-59.5q18,-18 36.5,-50.5t32,-85Q709,534 716,459.5t2,-177.5q-49,-2 -110.5,-1.5T485,290q-61,9 -116,29t-90,55q-45,45 -62,89t-17,85q0,59 22.5,103.5T262,714q42,-80 111,-153.5T534,440q-72,63 -125.5,142.5T328,768ZM328,768ZM328,768Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M200,800v-280h-80v-80h240v80h-80v280h-80ZM200,360v-200h80v200h-80ZM360,360v-80h80v-120h80v120h80v80L360,360ZM440,800v-360h80v360h-80ZM680,800v-120h-80v-80h240v80h-80v120h-80ZM680,520v-360h80v360h-80Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M280,920q-33,0 -56.5,-23.5T200,840v-720q0,-33 23.5,-56.5T280,40h400q33,0 56.5,23.5T760,120v124q18,7 29,22t11,34v80q0,19 -11,34t-29,22v404q0,33 -23.5,56.5T680,920L280,920ZM280,840h400v-720L280,120v720ZM280,840v-720,720ZM394,640h172q14,0 24,-10t10,-24v-132q0,-14 -10,-24t-24,-10h-6v-40q0,-33 -23.5,-56.5T480,320q-33,0 -56.5,23.5T400,400v40h-6q-14,0 -24,10t-10,24v132q0,14 10,24t24,10ZM440,440v-40q0,-17 11.5,-28.5T480,360q17,0 28.5,11.5T520,400v40h-80Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M339,698q22,-22 49.5,-36t58.5,-19q-5,19 -8,38t-3,39q0,24 3.5,47t11.5,44L339,698ZM254,614 L170,528q62,-62 142,-95t168,-33q49,0 96,10.5t90,30.5q-44,8 -81.5,29T517,522q-9,-1 -18.5,-1.5T480,520q-64,0 -122.5,24.5T254,614ZM84,444 L0,360q95,-97 219.5,-148.5T480,160q136,0 260.5,51.5T960,360l-84,84q-79,-79 -181.5,-121.5T480,280q-112,0 -214.5,42.5T84,444ZM760,520 L772,580q12,5 22.5,10.5T816,604l58,-18 40,68 -46,40q2,12 2,26t-2,26l46,40 -40,68 -58,-18q-11,8 -21.5,13.5T772,860l-12,60h-80l-12,-60q-12,-5 -22.5,-10.5T624,836l-58,18 -40,-68 46,-40q-2,-12 -2,-26t2,-26l-46,-40 40,-68 58,18q11,-8 21.5,-13.5T668,580l12,-60h80ZM720,640q-33,0 -56.5,23.5T640,720q0,33 23.5,56.5T720,800q33,0 56.5,-23.5T800,720q0,-33 -23.5,-56.5T720,640Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M480,480q-66,0 -113,-47t-47,-113q0,-66 47,-113t113,-47q66,0 113,47t47,113q0,66 -47,113t-113,47ZM160,800v-112q0,-34 17.5,-62.5T224,582q62,-31 126,-46.5T480,520q66,0 130,15.5T736,582q29,15 46.5,43.5T800,688v112L160,800ZM240,720h480v-32q0,-11 -5.5,-20T700,654q-54,-27 -109,-40.5T480,600q-56,0 -111,13.5T260,654q-9,5 -14.5,14t-5.5,20v32ZM480,400q33,0 56.5,-23.5T560,320q0,-33 -23.5,-56.5T480,240q-33,0 -56.5,23.5T400,320q0,33 23.5,56.5T480,400ZM480,320ZM480,720Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="m798,638 l-62,-62q44,-41 69,-97t25,-119q0,-63 -25,-118t-69,-96l62,-64q56,53 89,125t33,153q0,81 -33,153t-89,125ZM670,510l-64,-64q18,-17 29,-38.5t11,-47.5q0,-26 -11,-47.5T606,274l64,-64q32,29 50,67.5t18,82.5q0,44 -18,82.5T670,510ZM360,520q-66,0 -113,-47t-47,-113q0,-66 47,-113t113,-47q66,0 113,47t47,113q0,66 -47,113t-113,47ZM40,840v-112q0,-33 17,-62t47,-44q51,-26 115,-44t141,-18q77,0 141,18t115,44q30,15 47,44t17,62v112L40,840ZM120,760h480v-32q0,-11 -5.5,-20T580,694q-36,-18 -92.5,-36T360,640q-71,0 -127.5,18T140,694q-9,5 -14.5,14t-5.5,20v32ZM360,440q33,0 56.5,-23.5T440,360q0,-33 -23.5,-56.5T360,280q-33,0 -56.5,23.5T280,360q0,33 23.5,56.5T360,440ZM360,360ZM360,760Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M360,440h80v-160h-80v160ZM480,440h80v-160h-80v160ZM600,440h80v-160h-80v160ZM240,880q-33,0 -56.5,-23.5T160,800v-480l240,-240h320q33,0 56.5,23.5T800,160v640q0,33 -23.5,56.5T720,880L240,880ZM240,800h480v-640L434,160L240,354v446ZM240,800h480,-480Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M13.26,3C8.17,2.86 4,6.95 4,12L2.21,12c-0.45,0 -0.67,0.54 -0.35,0.85l2.79,2.8c0.2,0.2 0.51,0.2 0.71,0l2.79,-2.8c0.31,-0.31 0.09,-0.85 -0.36,-0.85L6,12c0,-3.9 3.18,-7.05 7.1,-7 3.72,0.05 6.85,3.18 6.9,6.9 0.05,3.91 -3.1,7.1 -7,7.1 -1.61,0 -3.1,-0.55 -4.28,-1.48 -0.4,-0.31 -0.96,-0.28 -1.32,0.08 -0.42,0.42 -0.39,1.13 0.08,1.49C9,20.29 10.91,21 13,21c5.05,0 9.14,-4.17 9,-9.26 -0.13,-4.69 -4.05,-8.61 -8.74,-8.74zM12.75,8c-0.41,0 -0.75,0.34 -0.75,0.75v3.68c0,0.35 0.19,0.68 0.49,0.86l3.12,1.85c0.36,0.21 0.82,0.09 1.03,-0.26 0.21,-0.36 0.09,-0.82 -0.26,-1.03l-2.88,-1.71v-3.4c0,-0.4 -0.34,-0.74 -0.75,-0.74z"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M480,560q-33,0 -56.5,-23.5T400,480q0,-33 23.5,-56.5T480,400q33,0 56.5,23.5T560,480q0,33 -23.5,56.5T480,560ZM480,840q-139,0 -241,-91.5T122,520h82q14,104 92.5,172T480,760q117,0 198.5,-81.5T760,480q0,-117 -81.5,-198.5T480,200q-69,0 -129,32t-101,88h110v80L120,400v-240h80v94q51,-64 124.5,-99T480,120q75,0 140.5,28.5t114,77q48.5,48.5 77,114T840,480q0,75 -28.5,140.5t-77,114q-48.5,48.5 -114,77T480,840Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M2,20h20v-4h-20v4ZM4,17h2v2h-2v-2ZM2,4v4h20v-4h-20ZM6,7h-2v-2h2v2ZM2,14h20v-4h-20v4ZM4,11h2v2h-2v-2Z"
android:fillColor="#FFF"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M160,720q-33,0 -56.5,-23.5T80,640v-320q0,-33 23.5,-56.5T160,240h640q33,0 56.5,23.5T880,320v320q0,33 -23.5,56.5T800,720L160,720ZM160,640h640v-320L680,320v160h-80v-160h-80v160h-80v-160h-80v160h-80v-160L160,320v320ZM280,480h80,-80ZM440,480h80,-80ZM600,480h80,-80ZM480,480Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M280,800v-520L80,280v-120h520v120L400,280v520L280,800ZM640,800v-320L520,480v-120h360v120L760,480v320L640,800Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M480,880q-83,0 -156,-31.5T197,763q-54,-54 -85.5,-127T80,480h80q0,115 72.5,203T418,794l-58,-58 56,-56L598,862q-29,10 -58.5,14T480,880ZM500,600v-240h120q17,0 28.5,11.5T660,400v160q0,17 -11.5,28.5T620,600L500,600ZM300,600v-60h100v-40h-60v-40h60v-40L300,420v-60h120q17,0 28.5,11.5T460,400v160q0,17 -11.5,28.5T420,600L300,600ZM560,540h40v-120h-40v120ZM800,480q0,-115 -72.5,-203T542,166l58,58 -56,56 -182,-182q29,-10 58.5,-14t59.5,-4q83,0 156,31.5T763,197q54,54 85.5,127T880,480h-80Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="m476,880 l182,-480h84L924,880h-84l-43,-122L603,758L560,880h-84ZM160,760l-56,-56 202,-202q-35,-35 -63.5,-80T190,320h84q20,39 40,68t48,58q33,-33 68.5,-92.5T484,240L40,240v-80h280v-80h80v80h280v80L564,240q-21,72 -63,148t-83,116l96,98 -30,82 -122,-125 -202,201ZM628,688h144l-72,-204 -72,204Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="m476,880 l182,-480h84L924,880h-84l-43,-122L603,758L560,880h-84ZM628,688h144l-72,-204 -72,204ZM254,640q-66,0 -123.5,-38.5T44,498l72,-36q21,42 58,70t79,28q38,0 62.5,-23.5T340,480q0,-33 -23.5,-56.5T260,400h-60v-80h60q25,0 42.5,-17.5T320,260q0,-25 -17,-42.5T261,200q-23,0 -41,15t-32,33l-63,-49q26,-32 60,-55.5t77,-23.5q57,0 97.5,40.5T400,259q0,27 -10,52.5T361,357q10,10 18.5,20.5T396,400h124v-200h-80v-80h240v80h-80v116l-61,164L420,480v4q0,63 -46,109.5T254,640Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -3,7 +3,13 @@
android:height="20dp"
android:viewportWidth="960"
android:viewportHeight="960">
<group
android:pivotX="370"
android:pivotY="480"
android:scaleX="2.2"
android:scaleY="1.7">
<path
android:pathData="M420,652q-8,0 -14,-5.5t-6,-14.5v-304q0,-9 6,-14.5t14,-5.5q2,0 14,6l145,145q5,5 7,10t2,11q0,6 -2,11t-7,10L434,646q-3,3 -6.5,4.5T420,652Z"
android:fillColor="#1f1f1f"/>
android:pathData="M640,760 L200,480l440,-280v560Z"
android:fillColor="#FFFFFF"/>
</group>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M480,840 L0,359q93,-93 215.5,-146T480,160q142,0 264.5,53T960,359l-56,57q-81,-81 -190,-128.5T480,240q-103,0 -195,32.5T117,363l419,420 -56,57ZM864,800L761,698q-18,11 -38,16.5t-43,5.5q-68,0 -114,-46t-46,-114q0,-68 46,-114t114,-46q68,0 114,46t46,114q0,23 -5.5,43T818,641l102,103 -56,56ZM680,640q34,0 57,-23t23,-57q0,-34 -23,-57t-57,-23q-34,0 -57,23t-23,57q0,34 23,57t57,23ZM480,783Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -22,8 +22,8 @@
android:clipChildren="false">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/floating_triangle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="@dimen/margin_half"
android:layout_height="@dimen/margin_half"
android:elevation="@dimen/margin_eighth"
android:layout_centerVertical="true"
app:tint="@android:color/white"

View File

@@ -36,7 +36,6 @@
android:layout_height="match_parent"
android:padding="@dimen/margin_half_double_plus"/>
</LinearLayout>
<include layout="@layout/item_divider"/>
<LinearLayout
android:orientation="horizontal"
android:minHeight="@dimen/height_block_base"
@@ -58,7 +57,27 @@
android:layout_height="match_parent"
android:padding="@dimen/margin_half_double_plus"/>
</LinearLayout>
<include layout="@layout/item_divider"/>
<LinearLayout
android:orientation="horizontal"
android:minHeight="@dimen/height_block_base"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="@dimen/margin_base"
android:paddingStart="@dimen/margin_base">
<com.google.android.material.textview.MaterialTextView
android:text="@string/avoid_paved"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="?android:attr/textColorPrimary"/>
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/avoid_paved_roads_btn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="@dimen/margin_half_double_plus"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:minHeight="@dimen/height_block_base"
@@ -80,7 +99,6 @@
android:layout_height="match_parent"
android:padding="@dimen/margin_half_double_plus"/>
</LinearLayout>
<include layout="@layout/item_divider"/>
<LinearLayout
android:orientation="horizontal"
android:minHeight="@dimen/height_block_base"
@@ -102,7 +120,6 @@
android:padding="@dimen/margin_half_double_plus"
android:layout_height="match_parent"/>
</LinearLayout>
<include layout="@layout/item_divider"/>
<LinearLayout
android:orientation="horizontal"
android:minHeight="@dimen/height_block_base"

View File

@@ -394,7 +394,8 @@
<com.google.android.material.card.MaterialCardView
android:id="@+id/cv__more"
style="@style/MwmWidget.Editor.CardView">
style="@style/MwmWidget.Editor.CardView"
android:layout_marginBottom="@dimen/margin_base">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -421,6 +422,17 @@
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.button.MaterialButton
android:id="@+id/disused"
style="@style/MwmWidget.M3.Button.Secondary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginBottom="@dimen/margin_quarter"
app:backgroundTint="?cardBackground"
android:textColor="@color/base_red"
app:strokeColor="@color/base_red"
android:text="@string/editor_business_vacant_button"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/reset"
style="@style/MwmWidget.M3.Button.Secondary"

View File

@@ -3,4 +3,4 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/MwmWidget.TextView.Search"
android:text="@string/clear_search"
app:drawableStartCompat="@drawable/ic_cancel"/>
app:drawableStartCompat="@drawable/ic_close"/>

View File

@@ -54,7 +54,7 @@
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/clear_the_search"
android:scaleType="center"
app:srcCompat="@drawable/ic_cancel"/>
app:srcCompat="@drawable/ic_close"/>
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/voice_input"

View File

@@ -889,4 +889,5 @@
<string name="avoid_steps">Vyhnout se schodům</string>
<string name="offline_explanation_title">Offline mapy</string>
<string name="list_description_empty">Upravit seznam pro přidání popisu</string>
<string name="avoid_paved">Vyhnout se zpevněným cestám</string>
</resources>

View File

@@ -880,4 +880,5 @@
<string name="offline_explanation_title">Offline kort</string>
<string name="offline_explanation_text">Der skal downloades et kort for at kunne se og navigere i området.\nDownload kort over de områder, du ønsker at rejse i.</string>
<string name="list_description_empty">Rediger listen for at tilføje en beskrivelse</string>
<string name="avoid_paved">Undgå veje med fast belægning</string>
</resources>

View File

@@ -893,4 +893,5 @@
<string name="unknown_count">unbekannt</string>
<string name="error_invalid_number">ungültige Zahl</string>
<string name="list_description_empty">Liste bearbeiten, um eine Beschreibung hinzuzufügen</string>
<string name="avoid_paved">Befst. Straßen vermeiden</string>
</resources>

View File

@@ -898,4 +898,5 @@
<string name="offline_explanation_title">Mapas sin conexión</string>
<string name="offline_explanation_text">Se debe descargar un mapa para ver y navegar el área\nDescarga mapas de las áreas que quieras navegar.</string>
<string name="editor_place_doesnt_exist_description">Describe la situación actual del lugar para enviar una nota de error a la comunidad de OpenStreetMap</string>
<string name="avoid_paved">Evitar caminos pavimentados</string>
</resources>

View File

@@ -889,4 +889,5 @@
<string name="offline_explanation_title">Ilma võrguühenduseta toimivad kaardid</string>
<string name="offline_explanation_text">Selles piirkonnas liikumiseks ja teekonna juhatamiseks pead vajaliku kaardi alla laadima.\nVali allalaaditav kaart selle piirkonna kohta.</string>
<string name="list_description_empty">Kirjelduse lisamiseks muuda loendit</string>
<string name="avoid_paved">Väldi sillutatud teid</string>
</resources>

View File

@@ -898,4 +898,5 @@
<string name="editor_place_doesnt_exist_description">Décrivez le lieu afin de signaler l\'erreur à la communauté OpenStreetMap</string>
<string name="offline_explanation_text">Une carte doit être téléchargée pour visualiser et vous déplacer dans une zone.\nTéléchargez les cartes des zones que vous souhaitez visiter.</string>
<string name="list_description_empty">Modifier la liste pour ajouter une description</string>
<string name="avoid_paved">Éviter les routes goudronnées</string>
</resources>

View File

@@ -623,7 +623,8 @@
<string name="charge_socket_unknown_other">Outro ou descoñecido</string>
<string name="unknow_socket_type">engache descoñecido</string>
<string name="editor_place_doesnt_exist_description">Describe a aparencia do lugar para enviar unha nota co erro á comunidade OpenStreetMap</string>
<string name="avoid_steps">Evitar pasos</string>
<string name="avoid_steps">Evitar escaleiras</string>
<string name="offline_explanation_title">Mapas sen conexión</string>
<string name="offline_explanation_text">Hai que descargar un mapa para ver e navegar polo área.\nDescarga os mapas para as zonas polas que vas viaxar.</string>
<string name="list_description_empty">Editar a lista para engadir unha descrición</string>
</resources>

View File

@@ -844,4 +844,5 @@
<string name="backup_interval_every_day">Ik dienu</string>
<string name="clear">Notīrīt</string>
<string name="closed_now">Šobrīd slēgts</string>
<string name="avoid_paved">Izvairīties no ceļiem ar cietu mākslīgo segumu</string>
</resources>

View File

@@ -885,4 +885,5 @@
<string name="editor_socket">Rediger kontakt</string>
<string name="charge_socket_type1">Type 1</string>
<string name="edit_socket_info_tooltip">Opprett nye kontakter eller rediger eksisterende.</string>
<string name="avoid_paved">Unngå asfalterte veier</string>
</resources>

View File

@@ -372,7 +372,7 @@
<!-- The message when user did not find anything in the search. -->
<string name="search_not_found_query">Pobierz region, w którym szukasz lub spróbuj dodać nazwę pobliskiego miasta/wsi.</string>
<string name="search_history_title">Historia wyszukiwania</string>
<string name="search_history_text">Uzyskaj szybki dostęp do ostatniego hasła wyszukiwania.</string>
<string name="search_history_text">Zobacz swoje ostatnie wyszukiwania</string>
<string name="clear_search">Wyczyść historię wyszukiwania</string>
<!-- Place Page link to Wikipedia article (if map object has it). -->
<string name="read_in_wikipedia">Wikipedia</string>

View File

@@ -870,4 +870,5 @@
<string name="offline_explanation_title">Mapas offline</string>
<string name="editor_place_doesnt_exist_description">Descreva com detalhes como está o local agora mesmo para enviar uma nota de erro à comunidade do OpenStreetMap</string>
<string name="list_description_empty">Edite a lista para adicionar uma descrição</string>
<string name="avoid_paved">Evitar vias pavimentadas</string>
</resources>

View File

@@ -890,4 +890,6 @@
<string name="offline_explanation_title">Офлајн мапе</string>
<string name="editor_place_doesnt_exist_description">Опишите како место сада изгледа та бисте послали поруку о грешци OpenStreetMap заједници</string>
<string name="avoid_steps">Избегавај степенице</string>
<string name="avoid_paved">Избегавај асфалтиране путеве</string>
<string name="list_description_empty">Промените листу да бисте додали опис</string>
</resources>

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Items in the Preferences can have space reserved for an icon. As none of the
settings currently have associated icons, this leads to items that seem indented
without purpose. This wastes space and can lead to truncation of the item names
and descriptions. See https://github.com/organicmaps/organicmaps/issues/1872
To rectify this, the iconSpaceReserved property needs to be set to false.
According to https://developer.android.com/reference/android/preference/Preference#attr_android:iconSpaceReserved
false should be the default. However, according to
https://material.io/design/platform-guidance/android-settings.html this goes
against the material design guidelines and the default was overridden to true in
https://cs.android.com/android/platform/superproject/+/android-9.0.0_r1:prebuilts/sdk/current/support/v7/preference/res/values-sw360dp-v13/values-sw360dp-v13.xml
This file sets the default value back to false (i.e. no space reserved for icons).
See also the discussion at https://github.com/organicmaps/organicmaps/pull/1924
-->
<resources xmlns:tools="http://schemas.android.com/tools">
<bool name="config_materialPreferenceIconSpaceReserved" tools:ignore="MissingDefaultResource">false</bool>
</resources>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>

View File

@@ -27,7 +27,7 @@
<!-- A dialog title, that warns a user that Precise Location is disabled and suggests to turn it on -->
<string name="limited_accuracy">精度有限</string>
<!-- A dialog text, that warns a user that Precise Location is disabled and suggests to turn it on -->
<string name="precise_location_is_disabled_long_text">为确保准确导航,请在设置中启用确切位置</string>
<string name="precise_location_is_disabled_long_text">为确保导航准确,请在设置中启用 \"精确定位\"</string>
<!-- View and button titles for accessibility -->
<string name="zoom_to_country">在地图上显示</string>
<!-- Message to display at the center of the screen when the country download has failed -->
@@ -36,13 +36,13 @@
<string name="try_again">再试一次</string>
<string name="about_menu_title">关于 CoMaps</string>
<!-- Text in About screen -->
<string name="about_headline">由社区动的开项目</string>
<string name="about_headline">由社区动的开项目</string>
<!-- Text in About screen -->
<string name="about_proposition_1">使用方便,外观精美</string>
<string name="about_proposition_1">简单易用,精工细作</string>
<!-- Text in About screen -->
<string name="about_proposition_2">•注隐私,无广告</string>
<string name="about_proposition_2">注隐私,无广告</string>
<!-- Text in About screen -->
<string name="about_proposition_3">• 离线、快速、精简</string>
<string name="about_proposition_3">• 离线、迅捷、轻量</string>
<!-- Text in About screen -->
<string name="about_developed_by_enthusiasts">完全开源、决策问责、财务透明的非营利应用。</string>
<!-- The button that opens system location settings -->

View File

@@ -441,6 +441,14 @@
<string name="opens_in">Opens in %s</string>
<string name="closes_in">Closes in %s</string>
<string name="closed">Closed</string>
<string name="opens_at">Opens at %s</string>
<string name="closes_at">Closes at %s</string>
<string name="opens_day_at">Opens on %1$s at %2$s</string>
<string name="closes_day_at">Closes on %1$s at %2$s</string>
<plurals name="minutes_short">
<item quantity="one">%d min</item>
<item quantity="other">%d min</item>
</plurals>
<!-- Used in the opening_hours fragment for the last checked date, eg. "Confirmed two weeks ago" -->
<string name="hours_confirmed_time_ago">Confirmed %s</string>
<!-- Used on the place page for the last checked date, eg. "Existence confirmed two weeks ago" -->
@@ -543,6 +551,14 @@
<string name="editor_place_doesnt_exist_description">Describe what the place looks like now to send an error note to the OpenStreetMap community</string>
<!-- Error message for "Place doesn't exist" dialog when comment is empty -->
<string name="delete_place_empty_comment_error">Please indicate the reason for deleting the place</string>
<!-- Button in the editor to mark business as vacant -->
<string name="editor_business_vacant_button">Business is vacant</string>
<!-- Title of confirmation dialog before marking business as vacant -->
<string name="editor_mark_business_vacant_title">Mark business as vacant</string>
<!-- Description in confirmation dialog before marking business as vacant -->
<string name="editor_mark_business_vacant_description">Use this if the business has moved out and the space is empty and ready for a new tenant.</string>
<!-- Submit change to OSM in the editor -->
<string name="editor_submit">Submit</string>
<!-- Phone number error message -->
<string name="error_enter_correct_phone">Enter a valid phone number</string>
<string name="error_enter_correct_web">Enter a valid web address</string>
@@ -677,6 +693,7 @@
<string name="avoid_ferry">Avoid ferries</string>
<string name="avoid_motorways">Avoid freeways</string>
<string name="avoid_steps">Avoid stairs</string>
<string name="avoid_paved">Avoid paved roads</string>
<string name="unable_to_calc_alert_title">Unable to calculate route</string>
<string name="unable_to_calc_alert_subtitle">A route could not be found. This may be caused by your routing options or incomplete OpenStreetMap data. Please change your routing options and retry.</string>
<string name="define_to_avoid_btn">Define roads to avoid</string>

View File

@@ -1,24 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference
android:key="backup_location"
android:summary="@string/pref_backup_location_summary_initial"
android:title="@string/pref_backup_location_title" />
android:title="@string/pref_backup_location_title"
app:iconSpaceReserved="false" />
<Preference
android:key="backup_now"
android:summary="@string/pref_backup_now_summary"
android:title="@string/pref_backup_now_title" />
android:title="@string/pref_backup_now_title"
app:iconSpaceReserved="false" />
<ListPreference
android:defaultValue="86400000"
android:entries="@array/backup_interval_entries"
android:entryValues="@array/backup_interval_values"
android:key="backup_history_interval"
android:title="@string/pref_backup_interval_title" />
android:title="@string/pref_backup_interval_title"
app:iconSpaceReserved="false" />
<ListPreference
android:defaultValue="10"
android:entries="@array/backup_history_entries"
android:entryValues="@array/backup_history_values"
android:key="backup_history_count"
android:title="@string/pref_backup_history_title" />
android:title="@string/pref_backup_history_title"
app:iconSpaceReserved="false" />
</PreferenceScreen>

View File

@@ -7,6 +7,7 @@
<Preference
android:key="@string/pref_osm_profile"
android:title="@string/profile"
app:icon="@drawable/ic_profile"
tools:summary="LongLongUsernameHere"
app:singleLineTitle="false"
android:order="1"/>
@@ -17,6 +18,7 @@
<ListPreference
android:key="@string/pref_munits"
android:title="@string/measurement_units"
app:icon="@drawable/ic_straighten"
app:singleLineTitle="false"
android:summary="@string/measurement_units_summary"
android:entries="@array/measument_units"
@@ -42,6 +44,7 @@
<SwitchPreferenceCompat
android:key="@string/pref_autodownload"
android:title="@string/autodownload"
app:icon="@drawable/ic_download_st"
app:singleLineTitle="false"
android:order="5"/>
<SwitchPreferenceCompat
@@ -49,22 +52,26 @@
android:title="@string/big_font"
app:singleLineTitle="false"
android:defaultValue="false"
app:icon="@drawable/ic_text_fields"
android:order="6"/>
<SwitchPreferenceCompat
android:key="@string/pref_transliteration"
android:title="@string/transliteration_title"
app:singleLineTitle="false"
app:icon="@drawable/ic_translate_indic"
android:defaultValue="false"
android:order="7"/>
<Preference
android:key="@string/pref_storage"
android:title="@string/maps_storage"
app:icon="@drawable/ic_sd_card"
app:singleLineTitle="false"
android:summary="@string/maps_storage_summary"
android:order="8"/>
<SwitchPreferenceCompat
android:key="@string/pref_enable_logging"
android:title="@string/enable_logging"
app:icon="@drawable/ic_browse_activity"
app:singleLineTitle="false"
android:summary="@string/enable_logging_warning_message"
android:defaultValue="false"
@@ -80,6 +87,7 @@
android:key="@string/pref_use_mobile_data"
android:title="@string/mobile_data"
app:singleLineTitle="false"
app:icon="@drawable/ic_network_manage"
android:summary="@string/mobile_data_description"
android:entries="@array/mobile_data_options"
android:entryValues="@array/mobile_data_options_values"
@@ -91,6 +99,7 @@
android:summary="@string/power_managment_description"
android:entries="@array/power_management_scheme"
android:entryValues="@array/power_management_scheme_values"
app:icon="@drawable/ic_eco"
android:order="15"/>
<SwitchPreferenceCompat
android:key="@string/pref_keep_screen_on"
@@ -102,6 +111,7 @@
<SwitchPreferenceCompat
android:key="@string/pref_show_on_lock_screen"
android:title="@string/enable_show_on_lock_screen"
app:icon="@drawable/ic_mobile_lock_portrait"
app:singleLineTitle="false"
android:summary="@string/enable_show_on_lock_screen_description"
android:defaultValue="true"
@@ -109,6 +119,7 @@
<Preference
android:key="@string/pref_map_locale"
android:title="@string/change_map_locale"
app:icon="@drawable/ic_translate"
app:singleLineTitle="false"
android:persistent="false"
android:order="18"/>
@@ -116,6 +127,7 @@
android:key="@string/pref_backup"
android:title="@string/pref_backup_title"
android:summary="@string/pref_backup_summary"
app:icon="@drawable/ic_settings_backup_restore"
app:singleLineTitle="false"
android:persistent="false"
android:order="19"/>
@@ -128,12 +140,14 @@
<ListPreference
android:key="@string/pref_map_style"
android:title="@string/pref_map_style_title"
app:icon="@drawable/ic_dark_mode"
app:singleLineTitle="false"
android:entries="@array/map_style"
android:order="1"/>
<SwitchPreferenceCompat
android:key="@string/pref_3d"
android:title="@string/pref_map_3d_title"
app:icon="@drawable/ic_three_d_rotation"
app:singleLineTitle="false"
android:order="2"/>
<SwitchPreferenceCompat
@@ -146,12 +160,14 @@
android:title="@string/pref_tts_enable_title"
app:singleLineTitle="false"
android:persistent="false"
app:icon="@drawable/ic_record_voice_over"
android:order="4">
</Preference>
<PreferenceScreen
android:key="@string/prefs_routing"
android:order="5"
android:title="@string/driving_options_title">
android:title="@string/driving_options_title"
app:icon="@drawable/ic_instant_mix">
<intent
android:targetClass="app.organicmaps.settings.DrivingOptionsActivity"
android:targetPackage="@string/app_id">
@@ -167,12 +183,14 @@
android:key="@string/pref_play_services"
android:title="@string/google_play_services"
app:singleLineTitle="false"
app:icon="@drawable/ic_wifi_find"
android:summary="@string/pref_use_google_play"
android:defaultValue="true"
android:order="1"/>
<SwitchPreferenceCompat
android:key="@string/pref_search_history"
android:title="@string/search_history_title"
app:icon="@drawable/ic_search_recent_st"
app:singleLineTitle="false"
android:defaultValue="true"
android:order="2"/>

View File

@@ -5,45 +5,54 @@
<SwitchPreferenceCompat
android:key="@string/pref_tts_enabled"
android:title="@string/pref_tts_enable_title" />
android:title="@string/pref_tts_enable_title"
app:iconSpaceReserved="false"/>
<SwitchPreferenceCompat
android:key="@string/pref_tts_street_names"
android:title="@string/pref_tts_street_names_title"
app:isPreferenceVisible="false"
android:summary="@string/pref_tts_street_names_description"
android:defaultValue="false" />
android:defaultValue="false"
app:iconSpaceReserved="false"/>
<ListPreference
android:key="@string/pref_tts_language"
app:isPreferenceVisible="false"
android:title="@string/pref_tts_language_title" />
android:title="@string/pref_tts_language_title"
app:iconSpaceReserved="false"/>
<SeekBarPreference
android:key="@string/pref_tts_volume"
app:isPreferenceVisible="false"
android:title="@string/volume" />
android:title="@string/volume"
app:iconSpaceReserved="false"/>
<Preference
android:key="@string/pref_tts_test_voice"
app:isPreferenceVisible="false"
android:title="@string/pref_tts_test_voice_title" />
android:title="@string/pref_tts_test_voice_title"
app:iconSpaceReserved="false"/>
<Preference
android:key="@string/pref_tts_open_system_settings"
android:title="@string/pref_tts_open_system_settings" />
android:title="@string/pref_tts_open_system_settings"
app:iconSpaceReserved="false"/>
<Preference
android:enabled="false"
android:key="@string/pref_tts_info"
android:persistent="false"
android:selectable="false"
android:summary="@string/prefs_languages_information" />
android:summary="@string/prefs_languages_information"
app:iconSpaceReserved="false" />
<Preference
android:enabled="true"
android:key="@string/pref_tts_info_link"
android:persistent="false"
android:selectable="true"
android:summary="@string/prefs_languages_information_off_link" />
android:summary="@string/prefs_languages_information_off_link"
app:iconSpaceReserved="false" />
<ListPreference
android:key="@string/pref_tts_speed_cameras"
android:title="@string/speedcams_alert_title"
app:singleLineTitle="false"
android:entries="@array/speed_cameras"
android:entryValues="@array/speed_cameras_values"
android:defaultValue="@string/auto_enum_value" />
android:defaultValue="@string/auto_enum_value"
app:iconSpaceReserved="false" />
</androidx.preference.PreferenceScreen>

View File

@@ -0,0 +1,72 @@
package app.organicmaps.widget.placepage;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Locale;
public class OpenStateTextFormatterTest
{
private static final String OPENS_AT = "Opens at %s";
private static final String CLOSES_AT = "Closes at %s";
private static final String OPENS_DAY_AT = "Opens %1$s at %2$s";
private static final String CLOSES_DAY_AT = "Closes %1$s at %2$s";
@Test
public void formatHoursMinutes_24h()
{
assertEquals("09:00", OpenStateTextFormatter.formatHoursMinutes(9, 0, true));
assertEquals("18:05", OpenStateTextFormatter.formatHoursMinutes(18, 5, true));
}
@Test
public void formatHoursMinutes_12h()
{
assertEquals("9:00 AM", OpenStateTextFormatter.formatHoursMinutes(9, 0, false));
assertEquals("6:05 PM", OpenStateTextFormatter.formatHoursMinutes(18, 5, false));
assertEquals("12:00 PM", OpenStateTextFormatter.formatHoursMinutes(12, 0, false));
assertEquals("12:00 AM", OpenStateTextFormatter.formatHoursMinutes(0, 0, false));
}
@Test
public void buildAtLabel_today_open_close()
{
String open = OpenStateTextFormatter.buildAtLabel(true, true, "Sat", "09:00",
OPENS_AT, CLOSES_AT, OPENS_DAY_AT, CLOSES_DAY_AT);
String close = OpenStateTextFormatter.buildAtLabel(false, true, "Sat", "18:00",
OPENS_AT, CLOSES_AT, OPENS_DAY_AT, CLOSES_DAY_AT);
assertEquals("Opens at 09:00", open);
assertEquals("Closes at 18:00", close);
}
@Test
public void buildAtLabel_other_day()
{
String open = OpenStateTextFormatter.buildAtLabel(true, false, "Sat", "09:00",
OPENS_AT, CLOSES_AT, OPENS_DAY_AT, CLOSES_DAY_AT);
String close = OpenStateTextFormatter.buildAtLabel(false, false, "Tue", "18:00",
OPENS_AT, CLOSES_AT, OPENS_DAY_AT, CLOSES_DAY_AT);
assertEquals("Opens Sat at 09:00", open);
assertEquals("Closes Tue at 18:00", close);
}
@Test
public void isSameLocalDate_and_dayShort_helpers()
{
ZonedDateTime a = ZonedDateTime.of(2025, 3, 1, 10, 0, 0, 0, ZoneId.of("Europe/Paris"));
ZonedDateTime b = ZonedDateTime.of(2025, 3, 1, 22, 0, 0, 0, ZoneId.of("Europe/Paris"));
ZonedDateTime c = a.plusDays(1);
assertTrue(OpenStateTextFormatter.isSameLocalDate(a, b));
assertFalse(OpenStateTextFormatter.isSameLocalDate(a, c));
String day = OpenStateTextFormatter.dayShort(c, Locale.US);
// March 2, 2025 is a Sunday; "Sun" in US locale
assertEquals("Sun", day);
}
}

View File

@@ -277,6 +277,12 @@ JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeIsNameEd
return g_editableMapObject.IsNameEditable();
}
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeCanMarkPlaceAsDisused(JNIEnv * env,
jclass clazz)
{
return g_editableMapObject.CanMarkPlaceAsDisused();
}
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeIsPointType(JNIEnv * env, jclass clazz)
{
return g_editableMapObject.IsPointType();
@@ -434,6 +440,11 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeRollbackMapO
g_framework->NativeFramework()->RollBackChanges(g_editableMapObject.GetID());
}
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeMarkPlaceAsDisused(JNIEnv * env, jclass clazz)
{
g_framework->NativeFramework()->MarkPlaceAsDisused(g_editableMapObject);
}
JNIEXPORT jobjectArray JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeGetAllCreatableFeatureTypes(JNIEnv * env,
jclass clazz,
jstring jLang)

View File

@@ -99,6 +99,7 @@ public final class Editor
public static native boolean nativeIsAddressEditable();
public static native boolean nativeIsNameEditable();
public static native boolean nativeCanMarkPlaceAsDisused();
public static native boolean nativeIsPointType();
public static native boolean nativeIsBuilding();
@@ -164,6 +165,7 @@ public final class Editor
public static native void nativeCreateNote(String text);
public static native void nativePlaceDoesNotExist(@NonNull String comment);
public static native void nativeRollbackMapObject();
public static native void nativeMarkPlaceAsDisused();
public static native void nativeCreateStandaloneNote(double lat, double lon, String text);
/**

View File

@@ -7,5 +7,6 @@ public enum RoadType
Motorway,
Ferry,
Dirty,
Steps
Steps,
Paved
}

View File

@@ -1433,4 +1433,10 @@
<string name="type.leisure.sports_centre.sport.swimming">Plavecké centrum</string>
<string name="type.disusedbusiness">Neobsazený prostor</string>
<string name="type.leisure.fitness_centre.sport.yoga">Studio jógy</string>
<string name="type.amenity.boat_rental">Půjčovna lodí</string>
<string name="type.amenity.mobile_money_agent">Mobilní peněžní agent</string>
<string name="type.amenity.payment_centre">Platební centrum</string>
<string name="type.leisure.indoor_play">Vnitřní herní centrum</string>
<string name="type.shop.telecommunication">Telekomunikační obchod</string>
<string name="type.amenity.car_pooling">Spolujízda</string>
</resources>

View File

@@ -28,9 +28,9 @@
<string name="type.amenity.gambling">Gambling</string>
<string name="type.leisure.adult_gaming_centre">Spillehal for voksne</string>
<string name="type.leisure.amusement_arcade">Arkadespil</string>
<string name="type.amenity.charging_station">Ladestander</string>
<string name="type.amenity.charging_station.bicycle">Cykelladestander</string>
<string name="type.amenity.charging_station.motorcar">Billadestander</string>
<string name="type.amenity.charging_station">Ladestation</string>
<string name="type.amenity.charging_station.bicycle">Ladestation til elcykler</string>
<string name="type.amenity.charging_station.motorcar">Ladestation til elbiler</string>
<string name="type.amenity.childcare">Vuggestue</string>
<string name="type.amenity.cinema">Biograf</string>
<string name="type.leisure.bowling_alley">Bowlinghal</string>
@@ -83,17 +83,17 @@
<string name="type.amenity.parking.street_side">Parkeringslomme</string>
<string name="type.amenity.parking.street_side.fee">Parkeringslomme</string>
<string name="type.amenity.parking.street_side.private">Privat parkeringslomme</string>
<string name="type.amenity.parking.lane">Parkering i vejside</string>
<string name="type.amenity.parking.lane.fee">Parkering i vejside</string>
<string name="type.amenity.parking.lane.private">Privat parkering i vejside</string>
<string name="type.amenity.parking_entrance">Parkeringsindkørsel</string>
<string name="type.amenity.parking_entrance.private">Privat parkeringsindkørsel</string>
<string name="type.amenity.parking_entrance.permissive">Parkeringsindkørsel</string>
<string name="type.amenity.parking_space">Parkeringsplads</string>
<string name="type.amenity.parking_space.permissive">Parkeringsplads</string>
<string name="type.amenity.parking_space.private">Parkeringsplads</string>
<string name="type.amenity.parking_space.underground">Parkeringsplads</string>
<string name="type.amenity.parking_space.disabled">Handicapparkeringsplads</string>
<string name="type.amenity.parking.lane">Gadeparkering</string>
<string name="type.amenity.parking.lane.fee">Gadeparkering</string>
<string name="type.amenity.parking.lane.private">Privat gadeparkering</string>
<string name="type.amenity.parking_entrance">Indkørsel til parkeringshus</string>
<string name="type.amenity.parking_entrance.private">Indkørsel til privat parkeringshus</string>
<string name="type.amenity.parking_entrance.permissive">Indkørsel til parkeringshus</string>
<string name="type.amenity.parking_space">Parkeringss</string>
<string name="type.amenity.parking_space.permissive">Parkeringss</string>
<string name="type.amenity.parking_space.private">Parkeringss</string>
<string name="type.amenity.parking_space.underground">Parkeringss</string>
<string name="type.amenity.parking_space.disabled">Handicapparkeringss</string>
<string name="type.amenity.payment_terminal">Betalingsautomat</string>
<string name="type.amenity.pharmacy">Apotek</string>
<string name="type.amenity.place_of_worship">Tilbedelsessted</string>
@@ -393,7 +393,7 @@
<string name="type.man_made.bridge">Bro</string>
<!-- These translations are used for all type.highway.*.tunnel. -->
<string name="type.highway.road.tunnel">Tunnel</string>
<string name="type.highway.secondary">Sækunder hovedvej</string>
<string name="type.highway.secondary">Sekundær hovedvej</string>
<!-- These translations are used for all type.highway.*.bridge. -->
<string name="type.highway.secondary.bridge">Bro</string>
<!-- These translations are used for all type.highway.*.tunnel. -->
@@ -964,7 +964,7 @@
<string name="type.shop.curtain">Gardinhandel</string>
<string name="type.shop.deli">Delikatessebutik</string>
<string name="type.shop.department_store">Stormagasin</string>
<string name="type.shop.doityourself">Isenkræmmer</string>
<string name="type.shop.doityourself">Byggemarked</string>
<string name="type.shop.dry_cleaning">Renseri</string>
<string name="type.shop.electronics">Elektronikbutik</string>
<string name="type.shop.erotic">Erotikbutik</string>
@@ -984,7 +984,7 @@
<string name="type.shop.hearing_aids">Høreapparatbutik</string>
<string name="type.shop.herbalist">Urtebutik</string>
<string name="type.shop.hifi">HiFi lyd</string>
<string name="type.shop.houseware">Husholdningsartikler butik</string>
<string name="type.shop.houseware">Isenkræmmer</string>
<string name="type.shop.jewelry">Smykkebutik</string>
<string name="type.shop.kitchen">Køkkenforretning</string>
<string name="type.shop.laundry">Vaskeri</string>
@@ -993,21 +993,21 @@
<string name="type.shop.mobile_phone">Mobiltelefonbutik</string>
<string name="type.shop.money_lender">Pengeudlåner</string>
<string name="type.shop.motorcycle">Motorcykelforhandler</string>
<string name="type.shop.motorcycle_repair">Motorcykel reparation</string>
<string name="type.shop.motorcycle_repair">Motorcykelværksted</string>
<string name="type.shop.music">Pladebutik</string>
<string name="type.shop.musical_instrument">Butik med musikinstrumenter</string>
<string name="type.shop.musical_instrument">Instrumentbutik</string>
<string name="type.shop.newsagent">Avis-kiosk</string>
<string name="type.shop.optician">Optiker</string>
<string name="type.shop.outdoor">Fritidsudstyr</string>
<string name="type.shop.outdoor">Friluftsbutik</string>
<string name="type.shop.outpost">Afhentningssted</string>
<string name="type.shop.pasta">Pasta butik</string>
<string name="type.shop.pasta">Pastabutik</string>
<string name="type.shop.pastry">Bagværk</string>
<string name="type.shop.pawnbroker">Pantelåner</string>
<string name="type.shop.pet">Dyrehandel</string>
<string name="type.shop.pet_grooming">Kæledyrspleje</string>
<string name="type.shop.photo">Fotobutik</string>
<string name="type.shop.rental">Udlejningsbutik</string>
<string name="type.shop.rental.bicycle">Cykeludlejningsbutik</string>
<string name="type.shop.rental.bicycle">Cykeludlejning</string>
<string name="type.shop.seafood">Fiskehandler</string>
<string name="type.shop.second_hand">Genbrugsbutik</string>
<string name="type.shop.shoes">Skobutik</string>
@@ -1015,7 +1015,7 @@
<string name="type.shop.stationery">Kontorartikler</string>
<string name="type.shop.supermarket">Supermarked</string>
<string name="type.shop.tattoo">Tatovør</string>
<string name="type.shop.tea">Tebutik</string>
<string name="type.shop.tea">Tehandel</string>
<string name="type.shop.ticket">Billetkontor</string>
<string name="type.shop.toys">Legetøjsbutik</string>
<string name="type.shop.travel_agency">Rejsebureau</string>
@@ -1026,7 +1026,7 @@
<string name="type.shop.wine">Vinhandel</string>
<string name="type.shop.agrarian">Landbrugsbutik</string>
<string name="type.shop.antiques">Antikvitetsbutik</string>
<string name="type.shop.appliance">Hvidevarer butik</string>
<string name="type.shop.appliance">Hvidevareforretning</string>
<!-- maybe change to Art Gallery for en-US when supported -->
<string name="type.shop.art">Kunstbutik</string>
<string name="type.shop.baby_goods">Børnebutik</string>
@@ -1036,8 +1036,8 @@
<string name="type.shop.charity">Velgørenhedsbutik</string>
<string name="type.shop.cheese">Ostebutik</string>
<string name="type.shop.craft">Kunst og kunsthåndværk</string>
<string name="type.shop.dairy">Mejeriprodukter</string>
<string name="type.shop.electrical">El-butik</string>
<string name="type.shop.dairy">Mejeributik</string>
<string name="type.shop.electrical">Elektrikerbutik</string>
<string name="type.shop.fishing">Fiskeributik</string>
<string name="type.shop.interior_decoration">Brugskunsthandel</string>
<string name="type.shop.lottery">Lottobutik</string>
@@ -1058,7 +1058,7 @@
<string name="type.sport.australian_football">Australsk fodbold</string>
<string name="type.sport.baseball">Baseball</string>
<string name="type.sport.basketball">Basketball</string>
<string name="type.sport.beachvolleyball">Beachvolley</string>
<string name="type.sport.beachvolleyball">Strandvolley</string>
<string name="type.sport.chess">Skak</string>
<string name="type.sport.curling">Curling</string>
<string name="type.sport.equestrian">Ridesport</string>
@@ -1163,7 +1163,7 @@
<string name="type.highway.bridleway">Ridesti</string>
<string name="type.highway.elevator">Elevator</string>
<string name="type.highway.bridleway.permissive">Ridesti</string>
<string name="type.amenity.biergarten">Traktørsted</string>
<string name="type.amenity.biergarten">Biergarten</string>
<string name="type.aerialway">Svævebane</string>
<string name="type.aerialway.cable_car">Kabinelift</string>
<string name="type.aerialway.drag_lift">Træklift</string>
@@ -1220,7 +1220,7 @@
<string name="type.cuisine.bubble_tea">Boblete</string>
<string name="type.barrier.wall">Mur</string>
<string name="type.cuisine.fish_and_chips">Fish and Chips</string>
<string name="type.highway">Hovedvej</string>
<string name="type.highway">Vej</string>
<string name="type.highway.services">Rasteplads</string>
<string name="type.internet_access">Internet</string>
<string name="type.internet_access.wlan">Trådløst internet</string>
@@ -1305,7 +1305,7 @@
<string name="type.railway.subway">Metrolinje</string>
<string name="type.public_transport.platform">Stoppested</string>
<string name="type.railway.subway.tunnel">Metrolinjetunnel</string>
<string name="type.shop.hardware">Byggemarked</string>
<string name="type.shop.hardware">Isenkræmmer</string>
<string name="type.aerialway.t.bar">Ankerlift</string>
<string name="type.traffic_calming.bump">Vejbump</string>
<string name="type.route.ferry">Færgerute</string>
@@ -1389,8 +1389,32 @@
<string name="type.barrier.wicket_gate">Portlåge</string>
<string name="type.natural.wetland.reedbed">Rørskov</string>
<string name="type.shop.lighting">Lysbutik</string>
<string name="type.amenity.bench.backless">Rygløs bænk</string>
<string name="type.amenity.charging_station.motorcar.small">Opladningspunkt til biler</string>
<string name="type.leisure.sports_centre.sport.multi">Sportscenter</string>
<string name="type.leisure.sports_centre.sport.american_football">Sportscenter</string>
<string name="type.amenity.bench.backless">Bænk</string>
<string name="type.amenity.charging_station.motorcar.small">Ladestander til biler</string>
<string name="type.leisure.sports_centre.sport.multi">Idrætscenter</string>
<string name="type.leisure.sports_centre.sport.american_football">Idrætscenter</string>
<string name="type.amenity.car_pooling">Samkørsel</string>
<string name="type.shop.telecommunication">Telefonibutik</string>
<string name="type.disusedbusiness">Ledig forretning</string>
<string name="type.amenity.boat_rental">Bådudlejning</string>
<string name="type.man_made.observatory">Observatorium</string>
<string name="type.amenity.lounger">Solseng</string>
<string name="type.leisure.bandstand">Scenepavillon</string>
<string name="type.leisure.indoor_play">Legeland</string>
<string name="type.leisure.sports_centre.sport.archery">Bueskydningscenter</string>
<string name="type.leisure.sports_centre.sport.athletics">Atletikcenter</string>
<string name="type.leisure.sports_centre.sport.baseball">Baseballcenter</string>
<string name="type.leisure.sports_centre.sport.badminton">Badmintoncenter</string>
<string name="type.leisure.sports_centre.sport.basketball">Basketballcenter</string>
<string name="type.leisure.sports_centre.sport.golf">Golfcenter</string>
<string name="type.leisure.sports_centre.sport.gymnastics">Gymnastikcenter</string>
<string name="type.man_made.telescope">Teleskop</string>
<string name="type.man_made.telescope.optical">Teleskop (Optisk)</string>
<string name="type.man_made.telescope.radio">Teleskop (Radio)</string>
<string name="type.man_made.telescope.gamma">Teleskop (Gamma)</string>
<string name="type.leisure.sports_centre.sport.swimming">Svømmehal</string>
<string name="type.amenity.food_bank">Fødevarebank</string>
<string name="type.amenity.soup_kitchen">Suppekøkken</string>
<string name="type.amenity.food_sharing">Fødevarerdeling</string>
<string name="type.amenity.give_box">Donationsbøsse</string>
</resources>

View File

@@ -27,6 +27,7 @@
<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>
@@ -336,7 +337,9 @@
<string name="type.cuisine.vegetarian">Vegetarisch</string>
<string name="type.cuisine.vietnamese">Vietnamesisch</string>
<string name="type.emergency">Notfall</string>
<string name="type.emergency.access_point">Rettungspunkt</string>
<string name="type.emergency.assembly_point">Notfall-Sammelpunkt</string>
<string name="type.emergency.life_ring">Rettungsring</string>
<string name="type.emergency.defibrillator">Defibrillator</string>
<string name="type.emergency.fire_hydrant">Hydrant</string>
<string name="type.emergency.phone">Notruftelefon</string>
@@ -1437,4 +1440,15 @@
<string name="type.power.portal">Abspannportal</string>
<string name="type.shop.lighting">Lampenladen</string>
<string name="type.disusedbusiness">Leerstehendes Geschäft</string>
<string name="type.leisure.indoor_play">Indoor-Spielplatz</string>
<string name="type.amenity.car_pooling">Fahrgemeinschaften</string>
<string name="type.shop.telecommunication">Telekommunikationsgeschäft</string>
<string name="type.man_made.telescope">Teleskop</string>
<string name="type.man_made.telescope.optical">Teleskop (Optisch)</string>
<string name="type.man_made.telescope.radio">Teleskop (Radio)</string>
<string name="type.man_made.telescope.gamma">Teleskop (Gamma)</string>
<string name="type.man_made.observatory">Observatorium</string>
<string name="type.amenity.payment_centre">Zahlungszentrum</string>
<string name="type.amenity.soup_kitchen">Suppenküche</string>
<string name="type.amenity.food_bank">Tafel</string>
</resources>

View File

@@ -1437,4 +1437,13 @@
<string name="type.leisure.fitness_centre.sport.yoga">Estudio de yoga</string>
<string name="type.disusedbusiness">Local comercial vacante</string>
<string name="type.amenity.lounger">Tumbona</string>
<string name="type.amenity.boat_rental">Alquiler de botes</string>
<string name="type.man_made.telescope">Telescopio</string>
<string name="type.man_made.telescope.optical">Telescopio (óptico)</string>
<string name="type.man_made.telescope.radio">Radiotelescopio</string>
<string name="type.man_made.telescope.gamma">Telescopio Fermi</string>
<string name="type.man_made.observatory">Observatorio</string>
<string name="type.amenity.mobile_money_agent">Agencia de efectivo móvil</string>
<string name="type.amenity.car_pooling">Punto de Vehículo Compartido</string>
<string name="type.amenity.payment_centre">Centro de pagos</string>
</resources>

View File

@@ -1436,4 +1436,19 @@
<string name="type.leisure.sports_centre.sport.yoga">Joogakeskus</string>
<string name="type.disusedbusiness">Vaba äripind</string>
<string name="type.amenity.lounger">Rannatool</string>
<string name="type.amenity.boat_rental">Paadirent</string>
<string name="type.man_made.telescope">Teleskoop</string>
<string name="type.man_made.telescope.optical">Optiline teleskoop</string>
<string name="type.man_made.telescope.radio">Raadioteleskoop</string>
<string name="type.man_made.telescope.gamma">Gammateleskoop</string>
<string name="type.man_made.observatory">Observatoorium</string>
<string name="type.amenity.mobile_money_agent">Nutiraha müüja</string>
<string name="type.amenity.car_pooling">Ühiskasutusautode peatus</string>
<string name="type.amenity.payment_centre">Maksekeskus</string>
<string name="type.leisure.indoor_play">Mängusaal/Mängutuba</string>
<string name="type.shop.telecommunication">Sideteenuste pood</string>
<string name="type.amenity.soup_kitchen">Supiköök</string>
<string name="type.amenity.food_bank">Toidupank</string>
<string name="type.amenity.food_sharing">Toidujagamine</string>
<string name="type.amenity.give_box">Annetuskast</string>
</resources>

View File

@@ -1434,6 +1434,21 @@
<string name="type.leisure.sports_centre.sport.volleyball">Complexe sportif</string>
<string name="type.leisure.sports_centre.sport.yoga">Complexe sportif</string>
<string name="type.leisure.fitness_centre.sport.yoga">Salle de yoga</string>
<string name="type.disusedbusiness">Locaux commerciaux libres</string>
<string name="type.disusedbusiness">Magasin vacant</string>
<string name="type.amenity.lounger">Chaise longue</string>
<string name="type.amenity.boat_rental">Vente de bateau</string>
<string name="type.amenity.payment_centre">Centre de paiement</string>
<string name="type.amenity.mobile_money_agent">Agent d\'argent liquide</string>
<string name="type.leisure.indoor_play">Complexe de jeux intérieurs</string>
<string name="type.shop.telecommunication">Boutique télécom</string>
<string name="type.man_made.telescope.optical">Télescope (optique)</string>
<string name="type.man_made.telescope.radio">Télescope (radio)</string>
<string name="type.man_made.observatory">Observatoire</string>
<string name="type.amenity.food_bank">Banque alimentaire</string>
<string name="type.amenity.food_sharing">Repas partagé</string>
<string name="type.man_made.telescope.gamma">Télescope (Gamma)</string>
<string name="type.amenity.car_pooling">Covoiturage</string>
<string name="type.amenity.soup_kitchen">Soupe populaire</string>
<string name="type.amenity.give_box">Boîte à don</string>
<string name="type.man_made.telescope">Télescope</string>
</resources>

View File

@@ -1400,4 +1400,5 @@
<string name="type.shop.lighting">Negozio di illuminazione</string>
<string name="type.amenity.bench.backless">Panchina senza schienale</string>
<string name="type.amenity.charging_station.motorcar.small">Colonnina di ricarica</string>
<string name="type.man_made.observatory">Osservatorio</string>
</resources>

View File

@@ -33,7 +33,7 @@
<string name="type.place.sea">Jūra</string>
<string name="type.amenity.bar">Bārs</string>
<string name="type.amenity.bicycle_parking">Divriteņu novietne</string>
<string name="type.amenity.bicycle_rental">Velosipēdu īre</string>
<string name="type.amenity.bicycle_rental">Velosipēdu noma</string>
<string name="type.amenity.biergarten">Alus dārzs</string>
<string name="type.amenity.bureau_de_change">Valūtas maiņa</string>
<string name="type.amenity.bus_station">Autoosta</string>
@@ -136,4 +136,23 @@
<string name="type.sport.climbing">Kāpšana</string>
<string name="type.sport.scuba_diving">Niršana</string>
<string name="type.sport.cricket">Krikets</string>
<string name="type.shop.telecommunication">Tālsaziņas preču veikals</string>
<string name="type.shop.ticket">Biļešu tirdzniecības vieta</string>
<string name="type.shop.toys">Rotaļlietu veikals</string>
<string name="type.shop.travel_agency">Ceļojumu aģentūra</string>
<string name="type.shop.tyres">Riepu veikals</string>
<string name="type.amenity.payment_centre">Maksājumu centrs</string>
<string name="type.amenity.pharmacy">Aptieka</string>
<string name="type.amenity.place_of_worship">Pielūgsmes vieta</string>
<string name="type.amenity.place_of_worship.buddhist">Budistu templis</string>
<string name="type.amenity.place_of_worship.christian">Baznīca</string>
<string name="type.amenity.boat_rental">Laivu noma</string>
<string name="type.amenity.bicycle_repair_station">Divriteņu darbnīca</string>
<string name="type.man_made.telescope.gamma">Teleskops (Gamma)</string>
<string name="type.man_made.observatory">Observatorija</string>
<string name="type.man_made.telescope">Teleskops</string>
<string name="type.man_made.telescope.optical">Teleskops (optiskais)</string>
<string name="type.man_made.telescope.radio">Teleskops (radio)</string>
<string name="type.amenity.soup_kitchen">Zupas virtuve</string>
<string name="type.amenity.food_sharing">Ēdiena kopīgošana</string>
</resources>

View File

@@ -975,7 +975,7 @@
<string name="type.shop.books">Bokhandel</string>
<string name="type.shop.butcher">Slakter</string>
<string name="type.shop.cannabis">Cannabisbutikk</string>
<string name="type.shop.car">Bil butikk</string>
<string name="type.shop.car">Bilforhandler</string>
<string name="type.shop.car_parts">Bildeler</string>
<string name="type.shop.car_repair">Bilverksted</string>
<string name="type.shop.car_repair.tyres">Dekkreparasjon</string>
@@ -1353,4 +1353,23 @@
<string name="type.railway.narrow_gauge.bridge">Smalsporet jernbanebru</string>
<string name="type.railway.narrow_gauge.tunnel">Smalsporet jernbanetunnel</string>
<string name="type.leisure.slipway">Slipp</string>
<string name="type.post_office.post_partner">Post i butikk</string>
<string name="type.amenity.pub">Pub</string>
<string name="type.historic.monument">Monument</string>
<string name="type.man_made.crane">Kran</string>
<string name="type.military.bunker">Bunker</string>
<string name="type.railway.construction">Jernbanebygging</string>
<string name="type.railway.funicular.bridge">Kabelbanebru</string>
<string name="type.railway.funicular.tunnel">Kabelbanetunnel</string>
<string name="type.military">Militært</string>
<string name="type.landuse.education">Utdanningsinstitusjon</string>
<string name="type.man_made.telescope">Teleskop</string>
<string name="type.amenity.food_bank">Matsentral</string>
<string name="type.man_made.telescope.gamma">Teleskop (Gamma)</string>
<string name="type.man_made.telescope.radio">Teleskop (Radio)</string>
<string name="type.amenity.soup_kitchen">Suppekjøkken</string>
<string name="type.amenity.car_pooling">Samkjøring</string>
<string name="type.shop.telecommunication">Telekommunikasjonsbutikk</string>
<string name="type.amenity.boat_rental">Båtutleie</string>
<string name="type.man_made.observatory">Observatorium</string>
</resources>

View File

@@ -1435,4 +1435,15 @@
<string name="type.leisure.sports_centre.sport.yoga">Centrum sportowe</string>
<string name="type.leisure.fitness_centre.sport.yoga">Studio Jogi</string>
<string name="type.disusedbusiness">Pusty lokal</string>
<string name="type.amenity.boat_rental">Wypożyczalnia łodzi</string>
<string name="type.man_made.telescope">Teleskop</string>
<string name="type.man_made.telescope.optical">Teleskop optyczny</string>
<string name="type.man_made.telescope.radio">Radioteleskop</string>
<string name="type.man_made.telescope.gamma">Teleskop (prom. gamma)</string>
<string name="type.man_made.observatory">Obserwatorium</string>
<string name="type.amenity.car_pooling">Car Pooling</string>
<string name="type.shop.telecommunication">Sklep dostawcy usług telekomunikacyjnych</string>
<string name="type.amenity.food_bank">Bank żywności</string>
<string name="type.amenity.soup_kitchen">Jadłodajnia</string>
<string name="type.amenity.food_sharing">Jadłodzielnia</string>
</resources>

View File

@@ -1425,4 +1425,19 @@
<string name="type.leisure.fitness_centre.sport.yoga">Academia de ioga</string>
<string name="type.disusedbusiness">Estabelecimento vazio</string>
<string name="type.amenity.lounger">Espreguiçadeira</string>
<string name="type.amenity.boat_rental">Aluguel de barco</string>
<string name="type.man_made.telescope">Telescópio</string>
<string name="type.man_made.telescope.optical">Telescópio (óptico)</string>
<string name="type.man_made.telescope.radio">Telescópio (rádio)</string>
<string name="type.man_made.telescope.gamma">Telescópio (gama)</string>
<string name="type.man_made.observatory">Observatório</string>
<string name="type.amenity.mobile_money_agent">Agente de Mobile Money</string>
<string name="type.amenity.car_pooling">Carona</string>
<string name="type.amenity.payment_centre">Centro de pagamentos</string>
<string name="type.leisure.indoor_play">Centro de recreação interno</string>
<string name="type.shop.telecommunication">Loja de Telecomunicação</string>
<string name="type.amenity.soup_kitchen">Restaurante popular</string>
<string name="type.amenity.food_bank">Banco de alimentos</string>
<string name="type.amenity.food_sharing">Compartilhamento de alimentos</string>
<string name="type.amenity.give_box">Caixa de doação</string>
</resources>

View File

@@ -1180,7 +1180,7 @@
<string name="type.amenity.bar">Bar</string>
<string name="type.amenity.bicycle_parking.covered">Parcare acoperită pentru biciclete</string>
<string name="type.amenity.love_hotel">Hotel cu ora</string>
<string name="type.amenity.studio">Garsonieră</string>
<string name="type.amenity.studio">Studio Media</string>
<string name="type.amenity.bicycle_repair_station">Stație Reparații Biciclete</string>
<string name="type.amenity.car_sharing">Utilizare comună a mașinii</string>
<string name="type.amenity.dentist">Dentist</string>

View File

@@ -652,8 +652,8 @@
<string name="type.leisure.sauna">Сауна</string>
<string name="type.leisure.slipway">Лодочный спуск</string>
<string name="type.leisure.sports_centre">Спорткомплекс</string>
<string name="type.sport.climbing">Скалодром</string>
<string name="type.sport.yoga">Йога-центр</string>
<string name="type.sport.climbing">Скалолазание</string>
<string name="type.sport.yoga">Йога</string>
<string name="type.leisure.stadium">Стадион</string>
<string name="type.leisure.swimming_pool">Плавательный бассейн</string>
<string name="type.leisure.swimming_pool.private">Плавательный бассейн</string>
@@ -1131,7 +1131,7 @@
<string name="type.shop.chemist">Бытовая химия</string>
<string name="type.shop.chocolate">Магазин шоколада</string>
<string name="type.shop.clothes">Магазин одежды</string>
<string name="type.shop.coffee">Магазин кофе</string>
<string name="type.shop.coffee">Продавец кофе</string>
<string name="type.shop.computer">Компьютерный магазин</string>
<string name="type.shop.confectionery">Кондитерская</string>
<string name="type.shop.convenience">Продуктовый магазин</string>
@@ -1248,7 +1248,7 @@
<string name="type.sport.handball">Гандбол</string>
<string name="type.sport.multi">Различные виды спорта</string>
<!-- Used to tag a scuba diving site. -->
<string name="type.sport.scuba_diving">Место для ныряния с аквалангом</string>
<string name="type.sport.scuba_diving">Подводное плавание с аквалангом</string>
<string name="type.sport.shooting">Стрельба</string>
<string name="type.sport.skateboard">Скейтбординг</string>
<string name="type.sport.skiing">Лыжи</string>
@@ -1383,7 +1383,7 @@
<string name="type.fee.yes">$</string>
<string name="type.barrier.guard_rail">Дорожное ограждение (отбойник)</string>
<string name="type.landuse.plant_nursery">Садовый питомник</string>
<string name="type.amenity.studio">Студия</string>
<string name="type.amenity.studio">Медиа-студия</string>
<string name="type.leisure.firepit">Кострище</string>
<string name="type.highway.ladder">Лестница-лаз</string>
<string name="type.sport.diving">Высотные прыжки в воду</string>
@@ -1399,4 +1399,57 @@
<string name="type.office.security">Офис охранника</string>
<string name="type.building.guardhouse">Будка безопасности</string>
<string name="type.power.portal">Портальная опора</string>
<string name="type.amenity.boat_rental">Прокат лодок</string>
<string name="type.man_made.telescope">Телескоп</string>
<string name="type.man_made.telescope.optical">Телескоп (оптический)</string>
<string name="type.man_made.telescope.radio">Телескоп (радио)</string>
<string name="type.man_made.telescope.gamma">Телескоп (Гамма)</string>
<string name="type.man_made.observatory">Обсерватория</string>
<string name="type.amenity.charging_station.motorcar.small">Пункт зарядки автомобиля</string>
<string name="type.amenity.lounger">Шезлонг</string>
<string name="type.amenity.car_pooling">Совместное использование авто</string>
<string name="type.amenity.payment_centre">Платежный центр</string>
<string name="type.leisure.bandstand">Эстрада</string>
<string name="type.leisure.indoor_play">Крытый игровой центр</string>
<string name="type.leisure.sports_centre.sport.multi">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.american_football">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.archery">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.athletics">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.australian_football">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.badminton">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.baseball">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.basketball">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.beachvolleyball">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.bowls">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.climbing">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.cricket">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.curling">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.equestrian">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.field_hockey">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.futsal">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.golf">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.gymnastics">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.handball">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.ice_hockey">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.padel">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.pelota">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.scuba_diving">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.shooting">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.skateboard">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.skiing">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.soccer">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.swimming">Плавательный центр</string>
<string name="type.leisure.sports_centre.sport.table_tennis">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.tennis">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.volleyball">Спортивный центр</string>
<string name="type.leisure.sports_centre.sport.yoga">Спортивный центр</string>
<string name="type.leisure.fitness_centre.sport.yoga">Студия Йоги</string>
<string name="type.shop.telecommunication">Телекоммуникационный магазин</string>
<string name="type.disusedbusiness">Вакантный бизнес</string>
<string name="type.amenity.soup_kitchen">Бесплатная столовая</string>
<string name="type.amenity.food_bank">Продовольственный банк</string>
<string name="type.amenity.food_sharing">Обмен едой</string>
<string name="type.amenity.give_box">Подарить коробку</string>
<string name="type.amenity.bench.backless">Скамья без спинки</string>
<string name="type.amenity.mobile_money_agent">Агент мобильных платежей</string>
</resources>

View File

@@ -153,4 +153,11 @@
<string name="type.leisure.amusement_arcade">Arkadne igre</string>
<string name="type.amenity.charging_station.motorcar.small">Polnilno mesto za avtomobile</string>
<string name="type.amenity.childcare">Vrtec</string>
<string name="type.amenity.cinema">Kino</string>
<string name="type.amenity.boat_rental">Izposoja čolnov</string>
<string name="type.man_made.telescope">Teleskop</string>
<string name="type.man_made.telescope.optical">Teleskop (svetlobni)</string>
<string name="type.man_made.telescope.radio">Teleskop (radijski)</string>
<string name="type.man_made.telescope.gamma">Teleskop (gama žarki)</string>
<string name="type.man_made.observatory">Zvezdarna</string>
</resources>

View File

@@ -28,7 +28,7 @@
<string name="type.amenity.bbq">Грил</string>
<string name="type.amenity.bench">Клупа</string>
<string name="type.amenity.bicycle_parking">Паркинг за бицикле</string>
<string name="type.amenity.bicycle_rental">Рентирање бицикли</string>
<string name="type.amenity.bicycle_rental">Изнајмљивање бицикала</string>
<string name="type.amenity.bicycle_repair_station">Станица за поправку бицикала</string>
<string name="type.amenity.biergarten">Пивска башта</string>
<string name="type.amenity.brothel">Јавна кућа</string>
@@ -648,7 +648,7 @@
<string name="type.leisure.slipway">Навоз</string>
<string name="type.leisure.sports_centre">Спортски центар</string>
<string name="type.sport.climbing">Вештачка стена</string>
<string name="type.sport.yoga">Јога студио</string>
<string name="type.sport.yoga">Јога</string>
<string name="type.leisure.stadium">Стадион</string>
<string name="type.leisure.swimming_pool">Базен</string>
<string name="type.leisure.swimming_pool.private">Приватни базен</string>
@@ -1161,7 +1161,7 @@
<string name="type.shop.pet_grooming">Грумер</string>
<string name="type.shop.photo">Фотограф</string>
<string name="type.shop.rental">Центар за изнајмљивање</string>
<string name="type.shop.rental.bicycle">Изнајмљивање бицикала</string>
<string name="type.shop.rental.bicycle">Центар за изнајмљивање бицикала</string>
<string name="type.shop.seafood">Рибарница</string>
<string name="type.shop.second_hand">Половна одећа</string>
<string name="type.shop.shoes">Обућа</string>
@@ -1230,7 +1230,7 @@
<string name="type.sport.soccer">Фудбал</string>
<string name="type.sport.swimming">Пливање</string>
<string name="type.sport.table_tennis">Стони тенис</string>
<string name="type.sport.tennis">Тенис</string>
<string name="type.sport.tennis">Тениски терен</string>
<string name="type.sport.volleyball">Одбојка</string>
<string name="type.sport.10pin">Куглање</string>
<string name="type.sport.9pin">Куглање</string>
@@ -1375,7 +1375,7 @@
<string name="type.leisure.firepit">Огњиште</string>
<string name="type.landuse.plant_nursery">Расадник</string>
<string name="type.barrier.guard_rail">Заштитна ограда</string>
<string name="type.amenity.studio">Студио</string>
<string name="type.amenity.studio">Медијски студио</string>
<string name="type.highway.ladder">Мердевине</string>
<string name="type.man_made.crane">Кран</string>
<string name="type.railway.station.subway.qingdao">Метро станица</string>
@@ -1398,4 +1398,57 @@
<string name="type.building.guardhouse">Кућица обезбеђења</string>
<string name="type.power.portal">Носач електричних водова</string>
<string name="type.shop.lighting">Продавница расвете</string>
<string name="type.amenity.give_box">Кутија за поклоне</string>
<string name="type.amenity.food_sharing">Дељење хране</string>
<string name="type.amenity.food_bank">Банка хране</string>
<string name="type.amenity.soup_kitchen">Народна кухиња</string>
<string name="type.man_made.observatory">Опсерваторија</string>
<string name="type.man_made.telescope">Телескоп</string>
<string name="type.man_made.telescope.optical">Телескоп (оптички)</string>
<string name="type.man_made.telescope.radio">Телескоп (радио)</string>
<string name="type.man_made.telescope.gamma">Телескоп (гама)</string>
<string name="type.amenity.car_pooling">Заједничка вожња</string>
<string name="type.amenity.payment_centre">Плаћање рачуна</string>
<string name="type.amenity.bench.backless">Клупа без наслона</string>
<string name="type.amenity.boat_rental">Изнајмљивање чамаца</string>
<string name="type.amenity.charging_station.motorcar.small">Место за пуњење аутомобила</string>
<string name="type.amenity.lounger">Лежаљка</string>
<string name="type.amenity.mobile_money_agent">Посредник за мобилно плаћање</string>
<string name="type.leisure.bandstand">Бина</string>
<string name="type.leisure.indoor_play">Играоница</string>
<string name="type.leisure.sports_centre.sport.multi">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.american_football">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.archery">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.athletics">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.australian_football">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.badminton">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.baseball">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.basketball">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.beachvolleyball">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.bowls">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.climbing">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.cricket">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.curling">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.equestrian">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.field_hockey">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.futsal">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.golf">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.gymnastics">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.handball">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.ice_hockey">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.padel">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.pelota">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.scuba_diving">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.shooting">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.skateboard">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.skiing">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.soccer">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.swimming">Пливачки центар</string>
<string name="type.leisure.sports_centre.sport.table_tennis">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.tennis">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.volleyball">Спортски центар</string>
<string name="type.leisure.sports_centre.sport.yoga">Спортски центар</string>
<string name="type.leisure.fitness_centre.sport.yoga">Јога студио</string>
<string name="type.shop.telecommunication">Продавница мобилног оператера</string>
<string name="type.disusedbusiness">Некоришћен пословни простор</string>
</resources>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>

View File

@@ -30,6 +30,7 @@
<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>
@@ -42,6 +43,11 @@
<string name="type.amenity.motorcycle_rental">Motorcycle Rental</string>
<string name="type.amenity.car_sharing">Car Sharing</string>
<string name="type.amenity.car_wash">Car Wash</string>
<string name="type.man_made.telescope">Telescope</string>
<string name="type.man_made.telescope.optical">Telescope (Optical)</string>
<string name="type.man_made.telescope.radio">Telescope (Radio)</string>
<string name="type.man_made.telescope.gamma">Telescope (Gamma)</string>
<string name="type.man_made.observatory">Observatory</string>
<string name="type.amenity.casino">Casino</string>
<string name="type.amenity.gambling">Gambling</string>
<string name="type.leisure.adult_gaming_centre">Adult Gaming Centre</string>
@@ -92,6 +98,7 @@
<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>
@@ -121,6 +128,8 @@
<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.car_pooling">Car Pooling</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>
@@ -362,7 +371,9 @@
<string name="type.cuisine.vegetarian">Vegetarian</string>
<string name="type.cuisine.vietnamese">Vietnamese</string>
<string name="type.emergency">Emergency</string>
<string name="type.emergency.access_point">Emergency Rescue Point</string>
<string name="type.emergency.assembly_point">Emergency Assembly Point</string>
<string name="type.emergency.life_ring">Lifebuoy</string>
<string name="type.emergency.defibrillator">Defibrillator</string>
<string name="type.emergency.fire_hydrant">Fire Hydrant</string>
<string name="type.emergency.phone">Emergency Phone</string>
@@ -657,6 +668,7 @@
<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>
@@ -1251,6 +1263,7 @@
<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>
@@ -1435,6 +1448,10 @@
<string name="type.self_service.no">No self-service</string>
<!-- https://wiki.openstreetmap.org/wiki/Key:social_facility -->
<string name="type.amenity.social_facility">Social Facility</string>
<string name="type.amenity.soup_kitchen">Soup Kitchen</string>
<string name="type.amenity.food_bank">Food Bank</string>
<string name="type.amenity.food_sharing">Food Sharing</string>
<string name="type.amenity.give_box">Give Box</string>
<!-- https://wiki.openstreetmap.org/wiki/Tag:emergency=emergency_ward_entrance -->
<string name="type.emergency.emergency_ward_entrance">Emergency Ward Entrance</string>
<!-- https://wiki.openstreetmap.org/wiki/Tag:amenity=dojo -->

View File

@@ -119,7 +119,7 @@ echo "Generating search categories / synonyms..."
if [ -z "$SKIP_GENERATE_SYMBOLS" ]; then
if Diff data/symbols_hash data/styles/*/*/symbols/* || [ ! -z "$SYMBOLS_NOT_GENERATED" ]; then
echo "Generating symbols..."
bash ./tools/unix/generate_symbols.sh
bash ./tools/unix/generate_symbols.sh || (rm data/symbols_hash; exit 1)
fi
else
echo "Skipping generate symbols..."
@@ -128,7 +128,7 @@ fi
if [ -z "$SKIP_GENERATE_DRULES" ]; then
if Diff data/drules_hash data/styles/*/*/*.mapcss data/styles/*/*/*.prio.txt data/mapcss-mapping.csv || [ ! -z "$DRULES_NOT_GENERATED" ]; then
echo "Generating drules..."
bash ./tools/unix/generate_drules.sh
bash ./tools/unix/generate_drules.sh || (rm data/drules_hash; exit 1)
fi
else
echo "Skipping generate drules..."

View File

@@ -19,13 +19,13 @@
"@category_recycling": "Recycling|Abfallverwertung|Recyclebares Material|Getrennte Müllsammlung|Müllsortierung|Wiederverwendung",
"amenity-bureau_de_change": "3Geldwechselstelle|Wechselstube|Geld|Geldumtausch",
"amenity-bar|amenity-pub|@category_eat|@category_nightlife": "2Bar|2Pub|4Kneipe|Bier|Trinken|4Gaststätte|4Bars und Kneipen|Brauhaus|Cocktail-Lounge",
"amenity-cafe|@category_eat": "3Café|3Restaurant|4Kaffee|6Kaffeehaus|Kaffeebar|Cafeteria",
"amenity-fast_food|@category_eat": "4Fast-Food|Takeaway|Restaurant|Café|Pizzeria|3Imbiss|5Essen zum Mitnehmen|Junkfood|7Schnellimbiss",
"amenity-restaurant|@category_eat": "3Restaurant|3Café|4Gasthaus|Gaststube|6Speiselokal|Gastwirtschaft",
"amenity-cafe|@category_eat": "3Café|6Kaffeehaus|Kaffeebar|Cafeteria",
"amenity-fast_food|@category_eat": "4Fast Food|Mitnahme|3Imbiss|Essen zum Mitnehmen|Junkfood|7Schnellimbiss",
"amenity-restaurant|@category_eat": "3Restaurant|4Gasthaus|Gaststube|6Speiselokal|Gastwirtschaft",
"amenity-fuel|@category_fuel": "Tankstation|3Tankstelle",
"@shop": "3Verbrauchermarkt|5Geschäft|5Laden",
"shop-bakery|shop-pastry|@category_eat|@category_food|@shop": "3Bäckerei|Bäckerladen|Bäcker|4Konditorei",
"shop-cosmetics|@category_shopping|@shop": "4Kosmetikgeschäft|Kosmetik|Schönheitspflege",
"shop-bakery|shop-pastry|@category_eat|@category_food|@shop": "3Bäckerei|Bäckerladen|Bäcker|4Konditorei|Konditor",
"shop-cosmetics|@category_shopping|@shop": "4Kosmetikgeschäft|Kosmetik|Schönheitspflege|Make Up|Make-Up|Makeup",
"shop-convenience|@category_food|@shop": "5Gemischtwarenladen|Lebensmittelhändler|Lebensmittelhandlung|Lebensmittelgeschäft|4Greißler|4Tante-Emma-Laden",
"shop-deli|@category_food|@shop": "4Feinkostladen|Feinkostgeschäft",
"shop-farm|@category_food|@shop": "4Hofladen|4Bauernhofladen",
@@ -397,7 +397,9 @@
"amenity-payment_terminal": "Bezahlterminal",
"amenity-public_bath": "Öffentliches Bad",
"amenity-shower": "Dusche",
"emergency-access_point": "4Rettungspunkt|Notfallpunkt|Notfall-Rettungspunkt|Notfall-Treffpunkt",
"emergency-assembly_point": "Notfall-Sammelpunkt",
"emergency-life_ring": "4Rettungsring",
"emergency-defibrillator": "4Defibrillator",
"emergency-fire_hydrant": "4Hydrant",
"emergency-lifeguard": "Notfall-Rettungsschwimmer|Rettungsschwimmer",
@@ -484,7 +486,7 @@
"shop-craft|@shop": "Künstlerbedarf",
"shop-pasta|@shop": "Nudelgeschäft",
"amenity-luggage_locker": "Gepäckschließfach",
"amenity-studio": "Studio",
"amenity-studio": "Medienstudio|Studio",
"shop-cannabis|@shop": "Cannabis",
"man_made-cross": "Kreuz",
"leisure-dance|@category_entertainment": "4Tanz|Tanzschule",

View File

@@ -28,7 +28,7 @@
"shop-bakery|shop-pastry|@category_eat|@category_food|@shop": "3Bakery|3Pastry|Cake|3Cakes|U+1F35E",
"shop|@shop": "",
"shop-cannabis|@shop": "Cannabis",
"shop-cosmetics|@category_shopping|@shop": "4Cosmetics|4Beauty Care|makeup",
"shop-cosmetics|@category_shopping|@shop": "4Cosmetics|4Beauty Care|makeup|make-up",
"shop-convenience|@category_food|@shop": "4Convenience|mini-mart|mini-market|superette",
"shop-deli|@category_food|@shop": "4Delicatessen",
"shop-farm|@category_food|@shop": "Farm food",
@@ -62,6 +62,7 @@
"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",
@@ -128,6 +129,7 @@
"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",
@@ -343,6 +345,8 @@
"shop-dry_cleaning": "3Dry Cleaner|cleaning",
"shop-tyres|@shop": "3Tyre|tyres",
"amenity-car_wash": "3Car Wash",
"man_made-telescope|man_made-telescope-optical|man_made-telescope-radio|man_made-telescope-gamma": "5Telescope",
"man_made-observatory": "4Observatory",
"amenity-veterinary": "Veterinary Doctor|4veterinary",
"amenity-animal_shelter": "Animal Shelter",
"@charging_station": "4Charging Station|charging",
@@ -417,11 +421,15 @@
"amenity-internet_cafe": "3Internet Cafe",
"amenity-motorcycle_parking": "4Motorcycle Parking",
"amenity-parking_space-disabled|@category_parking": "Disabled Parking Space",
"amenity-car_pooling|@category_parking": "Car Pooling",
"amenity-nursing_home": "4Nursing Home",
"amenity-payment_terminal": "Payment Terminal",
"amenity-payment_centre": "Payment Centre",
"amenity-public_bath": "Public Bath",
"amenity-shower": "Shower",
"emergency-access_point": "5Emergency Rescue Point|Emergency Location|Emergency Marker|Emergency Access Point",
"emergency-assembly_point": "Emergency Assembly Point",
"emergency-life_ring": "5Lifebuoy|6Life Ring|life-ring|lifering|flotation device|floatation device",
"emergency-defibrillator": "4Defibrillator|AED",
"emergency-fire_hydrant": "4Fire Hydrant|Fire Plug",
"emergency-lifeguard": "Lifeguard|Lifesaver",
@@ -450,6 +458,7 @@
"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",
@@ -459,6 +468,7 @@
"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",
@@ -488,6 +498,10 @@
"man_made-cairn": "4Cairn",
"wheelchair-yes": "5Wheelchair",
"amenity-social_facility": "Social Facility",
"social_facility-soup_kitchen": "4Soup Kitchen|Food",
"social_facility-food_bank": "4Food Bank|foodbank|Food",
"amenity-food_sharing": "Food Sharing|Food",
"amenity-give_box": "Give Box",
"leisure-sports_hall": "Sports hall",
"amenity-arts_centre|@category_tourism": "Arts Center",
"amenity-prison": "prison",

View File

@@ -498,5 +498,16 @@
"sport-9pin": "Bolos",
"sport-10pin": "Bolos",
"shop-bookmaker|@gambling": "Corredor de apuestas",
"leisure-fitness_centre-sport-yoga": "Estudio de yoga"
"leisure-fitness_centre-sport-yoga": "Estudio de yoga",
"amenity-mobile_money_agent": "Agencia de efectivo móvil | agente de dinero móvil | agencia de dinero móvil | agente de efectivo móvil",
"amenity-boat_rental": "4aquiler de botes|alquiler de barcos|bote|botes|barco|barcos|barca|barcas|lancha|lanchas|embarcación|embarcaciones|velero|veleros|nagegar|3alquiler",
"man_made-telescope|man_made-telescope-optical|man_made-telescope-radio|man_made-telescope-gamma": "4Telescopio",
"man_made-observatory": "3Observatorio",
"amenity-car_pooling|@category_parking": "Car pooling | Vehículo compartido | Blabla Car",
"amenity-payment_centre": "Centro de pagos",
"leisure-indoor_play": "Parque interior|niños",
"shop-telecommunication|@shop": "Telecomunicaciones",
"leisure-bandstand": "4Tarima",
"social_facility-soup_kitchen": "4Comedor social | Comedor popular | Comedor comunitario | Comida",
"social_facility-food_bank": "Banco de alimentos | alimento | comida | voluntariado"
}

View File

@@ -34,7 +34,7 @@
"Austria_Burgenland":"Burgenland",
"Austria_Carinthia":"Carintia",
"Austria_Lower Austria_West":"Austria Inferioară — Vest",
"Austria_Lower Austria_Wien":"Viena",
"Austria_Lower Austria_Wien":"Viena și Austria de Jos",
"Austria_Salzburg":"Salzburg",
"Austria_Styria":"Stiria",
"Austria_Tyrol":"Tirol",

File diff suppressed because it is too large Load Diff

View File

@@ -24,3 +24,4 @@ China_Guangdong Hong Kong
US_Guam Guam
Macedonia North Macedonia
Czech Republic Czechia
Myanmar Burma
1 Samoa American Samoa
24 US_Guam Guam
25 Macedonia North Macedonia
26 Czech Republic Czechia
27 Myanmar Burma

View File

@@ -258,6 +258,10 @@
<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" />
@@ -382,9 +386,42 @@
<include field="operator" />
<include field="opening_hours" />
</type>
<type id="amenity-car_pooling">
<include field="name" />
<include field="operator" />
<include field="opening_hours" />
</type>
<type id="amenity-pharmacy" group="shop">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-buddhist" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-christian" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-hindu" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-jewish" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-muslim" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-shinto" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-taoist" can_add="no">
<include group="poi_internet" />
</type>
<type id="amenity-place_of_worship">
<include group="poi_internet" />
</type>
@@ -1058,6 +1095,9 @@
<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>
@@ -1105,6 +1145,25 @@
<include group="poi_internet" />
<include field="self_service" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="tourism-information-office" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="tourism-information-visitor_centre" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="tourism-information-board" can_add="no">
<include field="name" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="tourism-information-map" can_add="no">
<include field="name" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="tourism-information-guidepost" can_add="no">
</type>
<type id="tourism-information">
<include group="poi" />
</type>
@@ -1126,6 +1185,7 @@
<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>
@@ -1134,6 +1194,14 @@
<include field="opening_hours" />
<include field="level" />
</type>
<type id="amenity-food_sharing">
<include group="poi_internet" />
<include field="operator" />
</type>
<type id="amenity-give_box">
<include group="poi_internet" />
<include field="operator" />
</type>
<type id="tourism-picnic_site" />
<type id="leisure-picnic_table" />
<type id="leisure-park">
@@ -1196,6 +1264,18 @@
</type>
<type id="amenity-social_facility">
<include group="poi_internet" />
<include field="operator" />
</type>
<type id="social_facility-soup_kitchen">
<include group="poi_internet" />
<include field="operator" />
</type>
<type id="social_facility-food_bank">
<include group="poi_internet" />
<include field="operator" />
</type>
<type id="amenity-payment_centre">
<include group="poi_internet" />
</type>
<type id="amenity-payment_terminal">
<include field="operator" />
@@ -1226,6 +1306,9 @@
<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>
@@ -1288,6 +1371,9 @@
<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>
@@ -1456,19 +1542,6 @@
<tag k="service" v="tyres" />
<include group="poi_internet" />
</type>
<type id="tourism-information-office">
<tag k="tourism" v="information" />
<tag k="information" v="board" />
<include group="poi_internet" />
</type>
<type id="tourism-information-board">
<tag k="tourism" v="information" />
<tag k="information" v="board" />
</type>
<type id="tourism-information-map">
<tag k="tourism" v="information" />
<tag k="information" v="board" />
</type>
<type id="leisure-sports_centre-climbing">
<tag k="leisure" v="sports_centre" />
<tag k="sport" v="climbing" />

View File

@@ -169,7 +169,7 @@ highway|residential|bridge;[highway=residential][bridge?];;name;int_name;81;
# railway|rail|service|bridge;[railway=rail][service?][service!=spur][bridge?];...
railway|rail|bridge;[railway=rail][bridge?][dont=match];;name;int_name;82;
deprecated:boundary|administrative|10:04.2024;[boundary=administrative][admin_level=10];x;name;int_name;83;
deprecated:boundary|administrative|6:04.2024;[boundary=administrative][admin_level=6];x;name;int_name;84;
emergency|access_point;[emergency=access_point];;name;;84;
highway|secondary|bridge;[highway=secondary][bridge?];;name;int_name;85;
highway|tertiary|bridge;[highway=tertiary][bridge?];;name;int_name;86;
barrier|bollard;87;
@@ -225,7 +225,7 @@ place|suburb;128;
landuse|allotments;129;
landuse|forest|coniferous;[landuse=forest][wood=coniferous],[landuse=forest][leaf_type=coniferous],[natural=wood][wood=coniferous],[natural=wood][leaf_type=coniferous];;name;int_name;130;
landuse|forest|mixed;[landuse=forest][wood=mixed],[landuse=forest][leaf_type=mixed],[landuse=forest][leaf_cycle=mixed],[natural=wood][wood=mixed],[natural=wood][leaf_type=mixed],[natural=wood][leaf_cycle=mixed];;name;int_name;131;
deprecated:natural|wood|mixed:01.2020;[natural=wood][wood=mixed],[natural=wood][leaf_type=mixed],[natural=wood][leaf_cycle=mixed];x;name;int_name;132;landuse|forest|mixed
emergency|life_ring;132;
sport|tennis;133;
# ~730k usages.
landuse|vineyard;134;
@@ -628,21 +628,21 @@ drinking_water|no;505;
deprecated|deprecated;506;x
deprecated|deprecated;507;x
deprecated|deprecated;508;x
deprecated:railway|spur|bridge:06.2023;509;x
deprecated|deprecated;510;x
deprecated|deprecated;511;x
deprecated|deprecated;512;x
amenity|car_pooling;509;
social_facility|soup_kitchen;510;
social_facility|food_bank;511;
amenity|food_sharing;512;
sport|curling;513;
deprecated|deprecated;514;x
deprecated|deprecated;515;x
deprecated|deprecated;516;x
deprecated|deprecated;517;x
deprecated|deprecated;518;x
deprecated|deprecated;519;x
amenity|give_box;514;
man_made|telescope;515;
man_made|telescope|optical;[man_made=telescope][telescope:type=optical];;name;int_name;516;
man_made|telescope|radio;[man_made=telescope][telescope:type=radio];;name;int_name;517;
man_made|telescope|gamma;[man_made=telescope][telescope:type=gamma];;name;int_name;518;
man_made|observatory;519;
sport|diving;520;
#~270k uses.
man_made|utility_pole;521;
deprecated:boundary|administrative|suburb:04.2024;[boundary=administrative][border_type=suburb];x;name;int_name;522;
amenity|payment_centre;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;
deprecated:amenity|speed_trap:10.2021;542;highway|speed_camera
leisure|indoor_play;542;
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;
deprecated:boundary|administrative|4|state:01.2022;[boundary=administrative][admin_level=4][border_type=state];x;name;int_name;736;boundary|administrative|4
shop|telecommunication;736;
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,8 +980,7 @@ 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;
# service=bus/busway is deprecated in OSM
deprecated:highway|service|busway:10.2023;[highway=service][service=busway];x;name;int_name;857;highway|busway
amenity|mobile_money_agent;857;
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;
@@ -989,7 +988,7 @@ natural|salt_pond;861;landuse|salt_pond
amenity|conference_centre;862;
amenity|exhibition_centre;863;
deprecated:railway|siding|tunnel:06.2023;864;x
deprecated:railway|yard|tunnel:06.2023;865;x
amenity|boat_rental;865;
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

@@ -77,6 +77,8 @@ vending=water : vending=drinks
vending=milk : vending=drinks
vending=bread : vending=food
highway=emergency_access_point : emergency=access_point
building=entrance : entrance=yes
ice_road=yes : highway=ice_road

View File

@@ -242,6 +242,7 @@
@neutral_label: #51585E;
@healthcare_label: #983E44;
@public_transport_label: #2F6499;
@emergency_label: #247F52;
/* 6.4 Road labels */

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.4 KiB

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