Compare commits

...

29 Commits

Author SHA1 Message Date
x7z4w
4c8ff9c22e [routing] Faster IndexGraph
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-08 13:21:11 +00: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
102 changed files with 3423 additions and 2779 deletions

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 • Aktualisierte Karten-Icons, inkl. Farben für Unterhaltungs-, Sport- & andere Unternehmen
• Informationen zu Steckdosen an EV-Ladestationen • Informationen zu Steckdosen an EV-Ladestationen
• Symbole für Sportzentren, Veranstaltungsorte, Massagesalons, Gästehäuser und einige stillgelegte Unternehmen • Symbole für Sportzentren, Veranstaltungsorte, Massagesalons, Gästehäuser und einige stillgelegte Unternehmen
• Verbesserungen bei der Suche • Verbesserungen bei der Suche
• Behebung eines Absturzes 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! 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 • Recategorized map icons including some new colors for entertainment, sports and other businesses
• Display info about available sockets on charging stations • Display info about available sockets on charging stations
• Added icons for different sport centres, event venues, massage salons, guest houses and some disused businesses • Added bandstands, backless benches and loungers
Multiple search improvements New icons for different sport centres, event venues, massage salons, guest houses and some disused businesses
Fixed crash in search Multiple search improvements and crash fix
• Improved voice guidance during navigation (via OM project) • Improved voice guidance during navigation
Check our Codeberg release notes for more changes! 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 • Iconos del mapa recategorizados, incluyendo nuevos colores
• Visualización de información sobre enchufes disponibles en estaciones de recarga • 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 • 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 • 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 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 • 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 • 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 • Ajout d'icônes pour les centres sportifs, salles d'événements, salon de massage et autres lieux
• Multiple améliorations dans la recherche • Multiple améliorations dans la recherche
• Correction d'un plantage 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 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 • Ícones do mapa recategorizados, incluindo novas cores
• Exibição de informações sobre tomadas disponíveis em eletropostos • 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 • 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 • 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! 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; package app.organicmaps.background;
import android.content.Context; import android.content.Context;
import android.os.Build;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.work.Constraints; import androidx.work.Constraints;
import androidx.work.ExistingWorkPolicy; import androidx.work.ExistingWorkPolicy;
import androidx.work.NetworkType; import androidx.work.NetworkType;
import androidx.work.OneTimeWorkRequest; import androidx.work.OneTimeWorkRequest;
import androidx.work.OutOfQuotaPolicy;
import androidx.work.WorkManager; import androidx.work.WorkManager;
import androidx.work.Worker; import androidx.work.Worker;
import androidx.work.WorkerParameters; import androidx.work.WorkerParameters;
@@ -35,7 +37,11 @@ public class OsmUploadWork extends Worker
if (Editor.nativeHasSomethingToUpload() && OsmOAuth.isAuthorized()) if (Editor.nativeHasSomethingToUpload() && OsmOAuth.isAuthorized())
{ {
final Constraints c = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build(); 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(); WorkManager.getInstance(context).beginUniqueWork("UploadOsmChanges", ExistingWorkPolicy.KEEP, wr).enqueue();
} }
} }

View File

@@ -623,7 +623,8 @@
<string name="charge_socket_unknown_other">Outro ou descoñecido</string> <string name="charge_socket_unknown_other">Outro ou descoñecido</string>
<string name="unknow_socket_type">engache 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="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_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="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> </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 --> <!-- A dialog title, that warns a user that Precise Location is disabled and suggests to turn it on -->
<string name="limited_accuracy">精度有限</string> <string name="limited_accuracy">精度有限</string>
<!-- A dialog text, that warns a user that Precise Location is disabled and suggests to turn it on --> <!-- 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 --> <!-- View and button titles for accessibility -->
<string name="zoom_to_country">在地图上显示</string> <string name="zoom_to_country">在地图上显示</string>
<!-- Message to display at the center of the screen when the country download has failed --> <!-- Message to display at the center of the screen when the country download has failed -->

View File

@@ -27,6 +27,7 @@
<string name="type.amenity.bench">Sitzbank</string> <string name="type.amenity.bench">Sitzbank</string>
<string name="type.amenity.bench.backless">Sitzbank ohne Rückenlehne</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.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_rental">Fahrradverleih</string>
<string name="type.amenity.bicycle_repair_station">Fahrrad-Reparaturstation</string> <string name="type.amenity.bicycle_repair_station">Fahrrad-Reparaturstation</string>
<string name="type.amenity.brothel">Bordell</string> <string name="type.amenity.brothel">Bordell</string>

View File

@@ -975,7 +975,7 @@
<string name="type.shop.books">Bokhandel</string> <string name="type.shop.books">Bokhandel</string>
<string name="type.shop.butcher">Slakter</string> <string name="type.shop.butcher">Slakter</string>
<string name="type.shop.cannabis">Cannabisbutikk</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_parts">Bildeler</string>
<string name="type.shop.car_repair">Bilverksted</string> <string name="type.shop.car_repair">Bilverksted</string>
<string name="type.shop.car_repair.tyres">Dekkreparasjon</string> <string name="type.shop.car_repair.tyres">Dekkreparasjon</string>
@@ -1353,4 +1353,14 @@
<string name="type.railway.narrow_gauge.bridge">Smalsporet jernbanebru</string> <string name="type.railway.narrow_gauge.bridge">Smalsporet jernbanebru</string>
<string name="type.railway.narrow_gauge.tunnel">Smalsporet jernbanetunnel</string> <string name="type.railway.narrow_gauge.tunnel">Smalsporet jernbanetunnel</string>
<string name="type.leisure.slipway">Slipp</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>
</resources> </resources>

View File

@@ -1180,7 +1180,7 @@
<string name="type.amenity.bar">Bar</string> <string name="type.amenity.bar">Bar</string>
<string name="type.amenity.bicycle_parking.covered">Parcare acoperită pentru biciclete</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.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.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.car_sharing">Utilizare comună a mașinii</string>
<string name="type.amenity.dentist">Dentist</string> <string name="type.amenity.dentist">Dentist</string>

View File

@@ -153,4 +153,5 @@
<string name="type.leisure.amusement_arcade">Arkadne igre</string> <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.charging_station.motorcar.small">Polnilno mesto za avtomobile</string>
<string name="type.amenity.childcare">Vrtec</string> <string name="type.amenity.childcare">Vrtec</string>
<string name="type.amenity.cinema">Kino</string>
</resources> </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.bench.backless">Backless Bench</string>
<string name="type.amenity.bicycle_parking">Bicycle Parking</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.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_rental">Bicycle Rental</string>
<string name="type.amenity.bicycle_repair_station">Bicycle Repair Station</string> <string name="type.amenity.bicycle_repair_station">Bicycle Repair Station</string>
<string name="type.amenity.biergarten">Biergarten</string> <string name="type.amenity.biergarten">Biergarten</string>
@@ -92,6 +93,7 @@
<string name="type.amenity.loading_dock">Loading Dock</string> <string name="type.amenity.loading_dock">Loading Dock</string>
<string name="type.amenity.lounger">Lounger</string> <string name="type.amenity.lounger">Lounger</string>
<string name="type.amenity.luggage_locker">Luggage Locker</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.marketplace">Marketplace</string>
<string name="type.amenity.motorcycle_parking">Motorcycle Parking</string> <string name="type.amenity.motorcycle_parking">Motorcycle Parking</string>
<string name="type.amenity.nightclub">Nightclub</string> <string name="type.amenity.nightclub">Nightclub</string>
@@ -121,6 +123,7 @@
<string name="type.amenity.parking_space.private">Parking Space</string> <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.underground">Parking Space</string>
<string name="type.amenity.parking_space.disabled">Disabled Parking Space</string> <string name="type.amenity.parking_space.disabled">Disabled Parking Space</string>
<string name="type.amenity.payment_centre">Payment Centre</string>
<string name="type.amenity.payment_terminal">Payment Terminal</string> <string name="type.amenity.payment_terminal">Payment Terminal</string>
<string name="type.amenity.pharmacy">Pharmacy</string> <string name="type.amenity.pharmacy">Pharmacy</string>
<string name="type.amenity.place_of_worship">Place of Worship</string> <string name="type.amenity.place_of_worship">Place of Worship</string>
@@ -657,6 +660,7 @@
<string name="type.leisure.miniature_golf">Minigolf</string> <string name="type.leisure.miniature_golf">Minigolf</string>
<string name="type.leisure.hackerspace">Hackerspace</string> <string name="type.leisure.hackerspace">Hackerspace</string>
<string name="type.leisure.ice_rink">Ice Rink</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.marina">Marina</string>
<string name="type.leisure.nature_reserve">Nature Reserve</string> <string name="type.leisure.nature_reserve">Nature Reserve</string>
<string name="type.leisure.outdoor_seating">Outdoor Seating</string> <string name="type.leisure.outdoor_seating">Outdoor Seating</string>
@@ -1251,6 +1255,7 @@
<string name="type.shop.supermarket">Supermarket</string> <string name="type.shop.supermarket">Supermarket</string>
<string name="type.shop.tattoo">Tattoo Parlour</string> <string name="type.shop.tattoo">Tattoo Parlour</string>
<string name="type.shop.tea">Tea Shop</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.ticket">Ticket Shop</string>
<string name="type.shop.toys">Toy Store</string> <string name="type.shop.toys">Toy Store</string>
<string name="type.shop.travel_agency">Travel Agency</string> <string name="type.shop.travel_agency">Travel Agency</string>

View File

@@ -19,13 +19,13 @@
"@category_recycling": "Recycling|Abfallverwertung|Recyclebares Material|Getrennte Müllsammlung|Müllsortierung|Wiederverwendung", "@category_recycling": "Recycling|Abfallverwertung|Recyclebares Material|Getrennte Müllsammlung|Müllsortierung|Wiederverwendung",
"amenity-bureau_de_change": "3Geldwechselstelle|Wechselstube|Geld|Geldumtausch", "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-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-cafe|@category_eat": "3Café|6Kaffeehaus|Kaffeebar|Cafeteria",
"amenity-fast_food|@category_eat": "4Fast-Food|Takeaway|Restaurant|Café|Pizzeria|3Imbiss|5Essen zum Mitnehmen|Junkfood|7Schnellimbiss", "amenity-fast_food|@category_eat": "4Fast Food|Mitnahme|3Imbiss|Essen zum Mitnehmen|Junkfood|7Schnellimbiss",
"amenity-restaurant|@category_eat": "3Restaurant|3Café|4Gasthaus|Gaststube|6Speiselokal|Gastwirtschaft", "amenity-restaurant|@category_eat": "3Restaurant|4Gasthaus|Gaststube|6Speiselokal|Gastwirtschaft",
"amenity-fuel|@category_fuel": "Tankstation|3Tankstelle", "amenity-fuel|@category_fuel": "Tankstation|3Tankstelle",
"@shop": "3Verbrauchermarkt|5Geschäft|5Laden", "@shop": "3Verbrauchermarkt|5Geschäft|5Laden",
"shop-bakery|shop-pastry|@category_eat|@category_food|@shop": "3Bäckerei|Bäckerladen|Bäcker|4Konditorei", "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", "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-convenience|@category_food|@shop": "5Gemischtwarenladen|Lebensmittelhändler|Lebensmittelhandlung|Lebensmittelgeschäft|4Greißler|4Tante-Emma-Laden",
"shop-deli|@category_food|@shop": "4Feinkostladen|Feinkostgeschäft", "shop-deli|@category_food|@shop": "4Feinkostladen|Feinkostgeschäft",
"shop-farm|@category_food|@shop": "4Hofladen|4Bauernhofladen", "shop-farm|@category_food|@shop": "4Hofladen|4Bauernhofladen",
@@ -484,7 +484,7 @@
"shop-craft|@shop": "Künstlerbedarf", "shop-craft|@shop": "Künstlerbedarf",
"shop-pasta|@shop": "Nudelgeschäft", "shop-pasta|@shop": "Nudelgeschäft",
"amenity-luggage_locker": "Gepäckschließfach", "amenity-luggage_locker": "Gepäckschließfach",
"amenity-studio": "Studio", "amenity-studio": "Medienstudio|Studio",
"shop-cannabis|@shop": "Cannabis", "shop-cannabis|@shop": "Cannabis",
"man_made-cross": "Kreuz", "man_made-cross": "Kreuz",
"leisure-dance|@category_entertainment": "4Tanz|Tanzschule", "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-bakery|shop-pastry|@category_eat|@category_food|@shop": "3Bakery|3Pastry|Cake|3Cakes|U+1F35E",
"shop|@shop": "", "shop|@shop": "",
"shop-cannabis|@shop": "Cannabis", "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-convenience|@category_food|@shop": "4Convenience|mini-mart|mini-market|superette",
"shop-deli|@category_food|@shop": "4Delicatessen", "shop-deli|@category_food|@shop": "4Delicatessen",
"shop-farm|@category_food|@shop": "Farm food", "shop-farm|@category_food|@shop": "Farm food",
@@ -62,6 +62,7 @@
"shop-laundry": "4Laundry|Laundrette|laundromat", "shop-laundry": "4Laundry|Laundrette|laundromat",
"shop-toys|@category_children|@shop": "Toy|toyshop|kids|toys|kids toys", "shop-toys|@category_children|@shop": "Toy|toyshop|kids|toys|kids toys",
"amenity-marketplace|@category_food": "3Marketplace|market", "amenity-marketplace|@category_food": "3Marketplace|market",
"amenity-mobile_money_agent": "Mobile Money Agent|mobile money",
"amenity-money_transfer": "Money Transfer", "amenity-money_transfer": "Money Transfer",
"shop-clothes|@category_shopping|@shop": "3Clothes|U+1F45A|U+1F457|U+1F456|U+1F455|clothing|wear", "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", "shop-caravan|@category_rv|@shop": "2RV dealership|4Caravan dealership|Motorhome dealership",
@@ -128,6 +129,7 @@
"leisure-garden": "3Garden", "leisure-garden": "3Garden",
"leisure-firepit": "5Firepit", "leisure-firepit": "5Firepit",
"amenity-bench|amenity-bench-backless": "Bench", "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_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-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", "amenity-car_sharing": "Car Share|3carsharing|car|sharing|U+1F697|U+1F698|U+1F699|carpool|carsharing services|car sharing|4rideshare",
@@ -419,6 +421,7 @@
"amenity-parking_space-disabled|@category_parking": "Disabled Parking Space", "amenity-parking_space-disabled|@category_parking": "Disabled Parking Space",
"amenity-nursing_home": "4Nursing Home", "amenity-nursing_home": "4Nursing Home",
"amenity-payment_terminal": "Payment Terminal", "amenity-payment_terminal": "Payment Terminal",
"amenity-payment_centre": "Payment Centre",
"amenity-public_bath": "Public Bath", "amenity-public_bath": "Public Bath",
"amenity-shower": "Shower", "amenity-shower": "Shower",
"emergency-assembly_point": "Emergency Assembly Point", "emergency-assembly_point": "Emergency Assembly Point",
@@ -450,6 +453,7 @@
"natural-glacier|@category_tourism": "Glacier", "natural-glacier|@category_tourism": "Glacier",
"highway-ford": "Ford", "highway-ford": "Ford",
"leisure-marina": "3Marina", "leisure-marina": "3Marina",
"leisure-indoor_play": "3Indoor Play Centre|indoor play|indoor playground",
"piste:type-downhill|piste:type-nordic": "Skiing|3Ski run|4Piste", "piste:type-downhill|piste:type-nordic": "Skiing|3Ski run|4Piste",
"amenity-events_venue": "Events Venue", "amenity-events_venue": "Events Venue",
"shop-chocolate|@category_food|@shop": "Chocolate", "shop-chocolate|@category_food|@shop": "Chocolate",
@@ -459,6 +463,7 @@
"shop-music|@shop": "Record|vinyl|Music", "shop-music|@shop": "Record|vinyl|Music",
"shop-musical_instrument|@shop": "Musical instruments", "shop-musical_instrument|@shop": "Musical instruments",
"shop-tea|@shop": "Tea", "shop-tea|@shop": "Tea",
"shop-telecommunication|@shop": "Telecommunication",
"shop-antiques|@category_shopping|@shop|@category_secondhand": "Antiques", "shop-antiques|@category_shopping|@shop|@category_secondhand": "Antiques",
"shop-art|@category_shopping|@shop": "3Artwork|Arts", "shop-art|@category_shopping|@shop": "3Artwork|Arts",
"shop-baby_goods|@category_children|@shop": "Baby Goods", "shop-baby_goods|@category_children|@shop": "Baby Goods",

View File

@@ -34,7 +34,7 @@
"Austria_Burgenland":"Burgenland", "Austria_Burgenland":"Burgenland",
"Austria_Carinthia":"Carintia", "Austria_Carinthia":"Carintia",
"Austria_Lower Austria_West":"Austria Inferioară — Vest", "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_Salzburg":"Salzburg",
"Austria_Styria":"Stiria", "Austria_Styria":"Stiria",
"Austria_Tyrol":"Tirol", "Austria_Tyrol":"Tirol",

File diff suppressed because it is too large Load Diff

View File

@@ -258,6 +258,10 @@
<include field="outdoor_seating" /> <include field="outdoor_seating" />
<include field="website_menu" /> <include field="website_menu" />
</type> </type>
<type id="amenity-boat_rental">
<include group="poi_internet" />
<include field="operator" />
</type>
<type id="amenity-bicycle_rental"> <type id="amenity-bicycle_rental">
<include field="website" /> <include field="website" />
<include field="opening_hours" /> <include field="opening_hours" />
@@ -385,6 +389,34 @@
<type id="amenity-pharmacy" group="shop"> <type id="amenity-pharmacy" group="shop">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </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"> <type id="amenity-place_of_worship">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
@@ -1058,6 +1090,9 @@
<type id="shop-tea" group="shop"> <type id="shop-tea" group="shop">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<type id="shop-telecommunication" group="shop">
<include group="poi_internet" />
</type>
<type id="shop-trade" group="shop"> <type id="shop-trade" group="shop">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
@@ -1105,6 +1140,25 @@
<include group="poi_internet" /> <include group="poi_internet" />
<include field="self_service" /> <include field="self_service" />
</type> </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"> <type id="tourism-information">
<include group="poi" /> <include group="poi" />
</type> </type>
@@ -1126,6 +1180,7 @@
<type id="amenity-bench" /> <type id="amenity-bench" />
<type id="amenity-compressed_air" /> <type id="amenity-compressed_air" />
<type id="amenity-bbq" /> <type id="amenity-bbq" />
<type id="leisure-slipway" />
<type id="amenity-shelter"> <type id="amenity-shelter">
<include field="name" /> <include field="name" />
</type> </type>
@@ -1197,6 +1252,9 @@
<type id="amenity-social_facility"> <type id="amenity-social_facility">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<type id="amenity-payment_centre">
<include group="poi_internet" />
</type>
<type id="amenity-payment_terminal"> <type id="amenity-payment_terminal">
<include field="operator" /> <include field="operator" />
<include field="level" /> <include field="level" />
@@ -1226,6 +1284,9 @@
<type id="amenity-money_transfer"> <type id="amenity-money_transfer">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
<type id="amenity-mobile_money_agent">
<include group="poi_internet" />
</type>
<type id="amenity-vehicle_inspection"> <type id="amenity-vehicle_inspection">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
@@ -1288,6 +1349,9 @@
<include group="poi" /> <include group="poi" />
<include field="operator" /> <include field="operator" />
</type> </type>
<type id="leisure-indoor_play">
<include group="poi_internet" />
</type>
<type id="leisure-fitness_centre"> <type id="leisure-fitness_centre">
<include group="poi_internet" /> <include group="poi_internet" />
</type> </type>
@@ -1456,19 +1520,6 @@
<tag k="service" v="tyres" /> <tag k="service" v="tyres" />
<include group="poi_internet" /> <include group="poi_internet" />
</type> </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"> <type id="leisure-sports_centre-climbing">
<tag k="leisure" v="sports_centre" /> <tag k="leisure" v="sports_centre" />
<tag k="sport" v="climbing" /> <tag k="sport" v="climbing" />

View File

@@ -642,7 +642,7 @@ deprecated|deprecated;519;x
sport|diving;520; sport|diving;520;
#~270k uses. #~270k uses.
man_made|utility_pole;521; 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) # Generic unspecified barrier, could be node (50k) or way (100k)
barrier|yes;523; barrier|yes;523;
railway|monorail|tunnel;[railway=monorail][tunnel?];;name;int_name;524; 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; railway|funicular|tunnel;[railway=funicular][tunnel?];;name;int_name;539;
barrier|cycle_barrier;540; barrier|cycle_barrier;540;
addr:interpolation;[addr:interpolation];;addr:housenumber;name;541; 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|track;543;
area:highway|primary;544; area:highway|primary;544;
deprecated|deprecated;545;x deprecated|deprecated;545;x
@@ -857,7 +857,7 @@ sport|skiing;732;
tourism|museum;733; tourism|museum;733;
tourism|guest_house;734; tourism|guest_house;734;
tourism|motel;735; 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; 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; 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; 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|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; railway|rail|tourism|tunnel;[railway=rail][usage=tourism][!service][tunnel?];;name;int_name;855;
mapswithme|grid;856; mapswithme|grid;856;
# service=bus/busway is deprecated in OSM amenity|mobile_money_agent;857;
deprecated:highway|service|busway:10.2023;[highway=service][service=busway];x;name;int_name;857;highway|busway
highway|busway;[highway=busway],[highway=service][service=busway],[highway=service][service=bus];;name;int_name;858; highway|busway;[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|bridge;[highway=busway][bridge?];;name;int_name;859;
highway|busway|tunnel;[highway=busway][tunnel?];;name;int_name;860; 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|conference_centre;862;
amenity|exhibition_centre;863; amenity|exhibition_centre;863;
deprecated:railway|siding|tunnel:06.2023;864;x deprecated:railway|siding|tunnel:06.2023;864;x
deprecated:railway|yard|tunnel:06.2023;865;x amenity|boat_rental;865;
area:highway|footway;866; area:highway|footway;866;
junction|circular;867; junction|circular;867;
area:highway|residential;868; area:highway|residential;868;
Can't render this file because it contains an unexpected character in line 7 and column 16.

View File

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

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

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

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

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

Before

Width:  |  Height:  |  Size: 878 B

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,14 @@
<svg
height="25"
viewBox="0 0 40 25"
width="40"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 39.091407,18.544437 C 38.430061,19.172594 21.322691,24.588874 20,24.588874 c -1.322691,0 -18.4300616,-5.41628 -19.09140734,-6.044437 -0.6613457,-0.628156 -0.6613456,-11.4607175 10e-8,-12.0888738 C 1.5699385,5.8274068 18.677309,0.411126 20,0.411126 c 1.322691,0 18.430061,5.4162809 19.091407,6.0444372 0.661346,0.6281564 0.661346,11.4607178 0,12.0888738 z"
fill="#999999"
style="stroke-width:0.594311" />
<path
d="M 37.381413,17.569578 C 36.779304,18.096424 21.204219,22.639156 20,22.639156 18.79578,22.639156 3.2206952,18.096424 2.6185853,17.569577 2.0164755,17.042731 2.0164756,7.9572668 2.6185854,7.4304207 3.2206953,6.9035747 18.79578,2.3608422 20,2.3608422 c 1.204219,0 16.779304,4.5427325 17.381413,5.0695786 0.60211,0.5268461 0.60211,9.6123102 0,10.1391572 z"
fill="#294c88"
style="stroke-width:0.519333" />
</svg>

After

Width:  |  Height:  |  Size: 973 B

View File

@@ -0,0 +1,14 @@
<svg
height="18"
viewBox="0 0 29 18"
width="29"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 28.229757,13.346912 C 27.754145,13.798656 15.451225,17.693823 14.5,17.693823 c -0.951226,0 -13.2541449,-3.895167 -13.72975757,-4.346912 -0.4756127,-0.451744 -0.47561263,-8.2420781 10e-8,-8.6938224 C 1.2458552,4.2013443 13.548774,0.306177 14.5,0.306177 c 0.951225,0 13.254145,3.8951673 13.729757,4.3469117 0.475613,0.4517443 0.475613,8.2420783 0,8.6938233 z"
fill="#999999"
style="stroke-width:0.427404" />
<path
d="m 27,12.645834 c -0.433012,0.378886 -11.633974,3.645833 -12.5,3.645833 -0.866025,0 -12.0669874,-3.266947 -12.5000002,-3.645833 C 1.5669871,12.266948 1.5669872,5.7330535 1.9999999,5.3541673 2.4330126,4.9752812 13.633975,1.708334 14.5,1.708334 c 0.866026,0 12.066988,3.2669473 12.5,3.6458334 0.433013,0.3788861 0.433013,6.9127806 0,7.2916666 z"
fill="#294c88"
style="stroke-width:0.373483" />
</svg>

After

Width:  |  Height:  |  Size: 965 B

View File

@@ -0,0 +1,14 @@
<svg
height="25"
viewBox="0 0 40 25"
width="40"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 39.091407,18.544437 C 38.430061,19.172594 21.322691,24.588874 20,24.588874 c -1.322691,0 -18.4300616,-5.41628 -19.09140734,-6.044437 -0.6613457,-0.628156 -0.6613456,-11.4607175 10e-8,-12.0888738 C 1.5699385,5.8274068 18.677309,0.411126 20,0.411126 c 1.322691,0 18.430061,5.4162809 19.091407,6.0444372 0.661346,0.6281564 0.661346,11.4607178 0,12.0888738 z"
fill="#999999"
style="stroke-width:0.594311" />
<path
d="M 37.381413,17.569578 C 36.779304,18.096424 21.204219,22.639156 20,22.639156 18.79578,22.639156 3.2206952,18.096424 2.6185853,17.569577 2.0164755,17.042731 2.0164756,7.9572668 2.6185854,7.4304207 3.2206953,6.9035747 18.79578,2.3608422 20,2.3608422 c 1.204219,0 16.779304,4.5427325 17.381413,5.0695786 0.60211,0.5268461 0.60211,9.6123102 0,10.1391572 z"
fill="#136c30"
style="stroke-width:0.519333" />
</svg>

After

Width:  |  Height:  |  Size: 992 B

View File

@@ -0,0 +1,14 @@
<svg
height="18"
viewBox="0 0 29 18"
width="29"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 28.229757,13.346912 C 27.754145,13.798656 15.451225,17.693823 14.5,17.693823 c -0.951226,0 -13.2541449,-3.895167 -13.72975757,-4.346912 -0.4756127,-0.451744 -0.47561263,-8.2420781 10e-8,-8.6938224 C 1.2458552,4.2013443 13.548774,0.306177 14.5,0.306177 c 0.951225,0 13.254145,3.8951673 13.729757,4.3469117 0.475613,0.4517443 0.475613,8.2420783 0,8.6938233 z"
fill="#999999"
style="stroke-width:0.427404" />
<path
d="m 27,12.645834 c -0.433012,0.378886 -11.633974,3.645833 -12.5,3.645833 -0.866025,0 -12.0669874,-3.266947 -12.5000002,-3.645833 C 1.5669871,12.266948 1.5669872,5.7330535 1.9999999,5.3541673 2.4330126,4.9752812 13.633975,1.708334 14.5,1.708334 c 0.866026,0 12.066988,3.2669473 12.5,3.6458334 0.433013,0.3788861 0.433013,6.9127806 0,7.2916666 z"
fill="#136c30"
style="stroke-width:0.373483" />
</svg>

After

Width:  |  Height:  |  Size: 984 B

View File

@@ -0,0 +1,14 @@
<svg
height="25"
viewBox="0 0 40 25"
width="40"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 39.091407,18.544437 C 38.430061,19.172594 21.322691,24.588874 20,24.588874 c -1.322691,0 -18.4300616,-5.41628 -19.09140734,-6.044437 -0.6613457,-0.628156 -0.6613456,-11.4607175 10e-8,-12.0888738 C 1.5699385,5.8274068 18.677309,0.411126 20,0.411126 c 1.322691,0 18.430061,5.4162809 19.091407,6.0444372 0.661346,0.6281564 0.661346,11.4607178 0,12.0888738 z"
fill="#999999"
style="stroke-width:0.594311" />
<path
d="M 37.381413,17.569578 C 36.779304,18.096424 21.204219,22.639156 20,22.639156 18.79578,22.639156 3.2206952,18.096424 2.6185853,17.569577 2.0164755,17.042731 2.0164756,7.9572668 2.6185854,7.4304207 3.2206953,6.9035747 18.79578,2.3608422 20,2.3608422 c 1.204219,0 16.779304,4.5427325 17.381413,5.0695786 0.60211,0.5268461 0.60211,9.6123102 0,10.1391572 z"
fill="#9f1a17"
style="stroke-width:0.519333" />
</svg>

After

Width:  |  Height:  |  Size: 992 B

View File

@@ -0,0 +1,14 @@
<svg
height="18"
viewBox="0 0 29 18"
width="29"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 28.229757,13.346912 C 27.754145,13.798656 15.451225,17.693823 14.5,17.693823 c -0.951226,0 -13.2541449,-3.895167 -13.72975757,-4.346912 -0.4756127,-0.451744 -0.47561263,-8.2420781 10e-8,-8.6938224 C 1.2458552,4.2013443 13.548774,0.306177 14.5,0.306177 c 0.951225,0 13.254145,3.8951673 13.729757,4.3469117 0.475613,0.4517443 0.475613,8.2420783 0,8.6938233 z"
fill="#999999"
style="stroke-width:0.427404" />
<path
d="m 27,12.645834 c -0.433012,0.378886 -11.633974,3.645833 -12.5,3.645833 -0.866025,0 -12.0669874,-3.266947 -12.5000002,-3.645833 C 1.5669871,12.266948 1.5669872,5.7330535 1.9999999,5.3541673 2.4330126,4.9752812 13.633975,1.708334 14.5,1.708334 c 0.866026,0 12.066988,3.2669473 12.5,3.6458334 0.433013,0.3788861 0.433013,6.9127806 0,7.2916666 z"
fill="#9f1a17"
style="stroke-width:0.373483" />
</svg>

After

Width:  |  Height:  |  Size: 984 B

View File

@@ -0,0 +1,14 @@
<svg
height="25"
viewBox="0 0 40 25"
width="40"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 39.091407,18.544437 C 38.430061,19.172594 21.322691,24.588874 20,24.588874 c -1.322691,0 -18.4300616,-5.41628 -19.09140734,-6.044437 -0.6613457,-0.628156 -0.6613456,-11.4607175 10e-8,-12.0888738 C 1.5699385,5.8274068 18.677309,0.411126 20,0.411126 c 1.322691,0 18.430061,5.4162809 19.091407,6.0444372 0.661346,0.6281564 0.661346,11.4607178 0,12.0888738 z"
fill="#212121"
style="stroke-width:0.594311" />
<path
d="M 37.381413,17.569578 C 36.779304,18.096424 21.204219,22.639156 20,22.639156 18.79578,22.639156 3.2206952,18.096424 2.6185853,17.569577 2.0164755,17.042731 2.0164756,7.9572668 2.6185854,7.4304207 3.2206953,6.9035747 18.79578,2.3608422 20,2.3608422 c 1.204219,0 16.779304,4.5427325 17.381413,5.0695786 0.60211,0.5268461 0.60211,9.6123102 0,10.1391572 z"
fill="#9f5a17"
style="stroke-width:0.519333" />
</svg>

After

Width:  |  Height:  |  Size: 992 B

View File

@@ -0,0 +1,14 @@
<svg
height="18"
viewBox="0 0 29 18"
width="29"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 28.229757,13.346912 C 27.754145,13.798656 15.451225,17.693823 14.5,17.693823 c -0.951226,0 -13.2541449,-3.895167 -13.72975757,-4.346912 -0.4756127,-0.451744 -0.47561263,-8.2420781 10e-8,-8.6938224 C 1.2458552,4.2013443 13.548774,0.306177 14.5,0.306177 c 0.951225,0 13.254145,3.8951673 13.729757,4.3469117 0.475613,0.4517443 0.475613,8.2420783 0,8.6938233 z"
fill="#212121"
style="stroke-width:0.427404" />
<path
d="m 27,12.645834 c -0.433012,0.378886 -11.633974,3.645833 -12.5,3.645833 -0.866025,0 -12.0669874,-3.266947 -12.5000002,-3.645833 C 1.5669871,12.266948 1.5669872,5.7330535 1.9999999,5.3541673 2.4330126,4.9752812 13.633975,1.708334 14.5,1.708334 c 0.866026,0 12.066988,3.2669473 12.5,3.6458334 0.433013,0.3788861 0.433013,6.9127806 0,7.2916666 z"
fill="#9f5a17"
style="stroke-width:0.373483" />
</svg>

After

Width:  |  Height:  |  Size: 984 B

View File

@@ -0,0 +1,14 @@
<svg
height="21"
viewBox="0 0 37 21"
width="37"
xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(0.27138802,0,0,0.27138802,4.3878227,-0.11668148)">
<path
d="M 52,2.3036748 H -16.168078 V 54.476396 c -4.14e-4,6.304117 4.321485,11.786348 10.4515331,13.257534 L 52,77.809925 109.71665,67.73393 c 6.13001,-1.471227 10.45186,-6.953449 10.45143,-13.257534 V 2.3036748 Z"
style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0" />
<path
d="M 52,9.0567997 H -8.0025878 V 53.8068 c -0.1582841,3.383075 1.8308869,6.499251 4.9662002,7.7799 L 52,70.9148 105.86959,61.5867 c 3.59724,-0.863346 6.13337,-4.080505 6.133,-7.7799 V 9.0567997 Z"
style="fill:#294c88;fill-opacity:1;stroke:#00008b;stroke-width:0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 774 B

View File

@@ -0,0 +1,14 @@
<svg
height="15"
viewBox="0 0 26 15"
width="26"
xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(0.19044333,0,0,0.19044333,3.0791026,0.18161878)">
<path
d="M 52,2.3036748 H -16.168078 V 54.476396 c -4.14e-4,6.304117 4.321485,11.786348 10.4515331,13.257534 L 52,77.809925 109.71665,67.73393 c 6.13001,-1.471227 10.45186,-6.953449 10.45143,-13.257534 V 2.3036748 Z"
style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0" />
<path
d="M 52,9.0567997 H -8.0025878 V 53.8068 c -0.1582841,3.383075 1.8308869,6.499251 4.9662002,7.7799 L 52,70.9148 105.86959,61.5867 c 3.59724,-0.863346 6.13337,-4.080505 6.133,-7.7799 V 9.0567997 Z"
style="fill:#294c88;fill-opacity:1;stroke:#00008b;stroke-width:0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 773 B

View File

@@ -0,0 +1,14 @@
<svg
height="21"
viewBox="0 0 37 21"
width="37"
xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(0.27138802,0,0,0.27138802,4.3878227,-0.11668148)">
<path
d="M 52,2.3036748 H -16.168078 V 54.476396 c -4.14e-4,6.304117 4.321485,11.786348 10.4515331,13.257534 L 52,77.809925 109.71665,67.73393 c 6.13001,-1.471227 10.45186,-6.953449 10.45143,-13.257534 V 2.3036748 Z"
style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0" />
<path
d="M 52,9.0567997 H -8.0025878 V 53.8068 c -0.1582841,3.383075 1.8308869,6.499251 4.9662002,7.7799 L 52,70.9148 105.86959,61.5867 c 3.59724,-0.863346 6.13337,-4.080505 6.133,-7.7799 V 9.0567997 Z"
style="fill:#136c30;fill-opacity:1;stroke:#00008b;stroke-width:0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 774 B

View File

@@ -0,0 +1,14 @@
<svg
height="15"
viewBox="0 0 26 15"
width="26"
xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(0.19044333,0,0,0.19044333,3.0791026,0.18161878)">
<path
d="M 52,2.3036748 H -16.168078 V 54.476396 c -4.14e-4,6.304117 4.321485,11.786348 10.4515331,13.257534 L 52,77.809925 109.71665,67.73393 c 6.13001,-1.471227 10.45186,-6.953449 10.45143,-13.257534 V 2.3036748 Z"
style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0" />
<path
d="M 52,9.0567997 H -8.0025878 V 53.8068 c -0.1582841,3.383075 1.8308869,6.499251 4.9662002,7.7799 L 52,70.9148 105.86959,61.5867 c 3.59724,-0.863346 6.13337,-4.080505 6.133,-7.7799 V 9.0567997 Z"
style="fill:#136c30;fill-opacity:1;stroke:#00008b;stroke-width:0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 773 B

View File

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

After

Width:  |  Height:  |  Size: 741 B

View File

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

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 487 B

View File

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

Before

Width:  |  Height:  |  Size: 797 B

After

Width:  |  Height:  |  Size: 402 B

View File

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

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

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

View File

@@ -844,6 +844,7 @@ node|z17-[amenity=casino],
node|z17-[amenity=gambling], node|z17-[amenity=gambling],
node|z17-[leisure=adult_gaming_centre], node|z17-[leisure=adult_gaming_centre],
node|z17-[leisure=amusement_arcade], node|z17-[leisure=amusement_arcade],
node|z17-[leisure=indoor_play],
node|z17-[amenity=courthouse], node|z17-[amenity=courthouse],
node|z17-[amenity=nursing_home], node|z17-[amenity=nursing_home],
node|z17-[amenity=social_facility], node|z17-[amenity=social_facility],
@@ -865,9 +866,11 @@ node|z17-[amenity=vending_machine][vending=parking_tickets],
node|z17-[amenity=vending_machine][vending=public_transport_tickets], node|z17-[amenity=vending_machine][vending=public_transport_tickets],
node|z17-[amenity=payment_terminal], node|z17-[amenity=payment_terminal],
node|z17-[amenity=shower], node|z17-[amenity=shower],
node|z17-[amenity=slipway],
node|z17-[amenity=motorcycle_rental], node|z17-[amenity=motorcycle_rental],
node|z17-[amenity=bicycle_rental], node|z17-[amenity=bicycle_rental],
node|z17-[amenity=bicycle_repair_station], node|z17-[amenity=bicycle_repair_station],
node|z17-[amenity=boat_rental],
node|z17-[amenity=post_office], node|z17-[amenity=post_office],
node|z17-[amenity=library], node|z17-[amenity=library],
node|z18-[post_office=post_partner], node|z18-[post_office=post_partner],
@@ -921,6 +924,8 @@ node|z18-[amenity=toilets],
node|z18-[amenity=atm], node|z18-[amenity=atm],
node|z18-[amenity=bureau_de_change], node|z18-[amenity=bureau_de_change],
node|z18-[amenity=money_transfer], node|z18-[amenity=money_transfer],
node|z18-[amenity=mobile_money_agent],
node|z18-[amenity=payment_centre],
node|z18-[amenity=waste_disposal], node|z18-[amenity=waste_disposal],
node|z18-[amenity=recycling], node|z18-[amenity=recycling],
node|z16-[amenity=recycling][recycling_type=centre], node|z16-[amenity=recycling][recycling_type=centre],
@@ -1308,7 +1313,7 @@ node|z15-[landuse=industrial][industrial=mine],
{icon-image: mine-m.svg;text-offset: 1;font-size: 10;} {icon-image: mine-m.svg;text-offset: 1;font-size: 10;}
node|z16-[leisure=water_park], node|z16-[leisure=water_park],
{icon-image: swimming-m.svg;icon-min-distance: 30;} {icon-image: swimming-centre-m.svg;icon-min-distance: 30;}
node|z17-[leisure=water_park], node|z17-[leisure=water_park],
{icon-min-distance: 20;} {icon-min-distance: 20;}
@@ -1419,6 +1424,9 @@ node|z17-[leisure=amusement_arcade],
node|z18-[shop=lottery], node|z18-[shop=lottery],
{icon-image: lottery-m.svg;} {icon-image: lottery-m.svg;}
node|z17-[leisure=indoor_play],
{icon-image: indoor_play-m.svg;icon-min-distance: 20;}
node|z17-[amenity=courthouse], node|z17-[amenity=courthouse],
{icon-image: public-building-m.svg;} {icon-image: public-building-m.svg;}
@@ -1452,6 +1460,9 @@ node|z16-17[building=guardhouse],
node|z16-[building=guardhouse]::int_name, node|z16-[building=guardhouse]::int_name,
{text: none;} {text: none;}
node|z17-[building=train_station],
{icon-image: train_building-m.svg; font-size: 11; text-offset: 1;}
node|z17-[amenity=prison], node|z17-[amenity=prison],
{icon-image: prison-m.svg;} {icon-image: prison-m.svg;}
node|z18-[amenity=prison], node|z18-[amenity=prison],
@@ -1470,6 +1481,11 @@ node|z17-[amenity=motorcycle_rental],
node|z18-[amenity=motorcycle_rental], node|z18-[amenity=motorcycle_rental],
{font-size: 11;} {font-size: 11;}
node|z17-[amenity=boat_rental],
{icon-image: boat-rental.svg;}
node|z18-[amenity=boat_rental],
{font-size: 11;}
node|z17-[amenity=bicycle_rental], node|z17-[amenity=bicycle_rental],
{icon-image: bicycle-rental.svg;} {icon-image: bicycle-rental.svg;}
node|z18-[amenity=bicycle_rental], node|z18-[amenity=bicycle_rental],
@@ -1538,6 +1554,9 @@ node|z15-[power=plant][plant:source=wind],
node|z16-[power=plant][plant:source=wind], node|z16-[power=plant][plant:source=wind],
{text: name;text-color: @neutral_label;text-halo-radius: 1;text-halo-opacity: 0.9;text-halo-color: @label_halo_light; text-offset: 1; font-size: 10;} {text: name;text-color: @neutral_label;text-halo-radius: 1;text-halo-opacity: 0.9;text-halo-color: @label_halo_light; text-offset: 1; font-size: 10;}
node|z17-[leisure=slipway],
{icon-image: slipway-m.svg;}
node|z17-[amenity=shower], node|z17-[amenity=shower],
{icon-image: shower-m.svg;} {icon-image: shower-m.svg;}
@@ -1562,6 +1581,8 @@ node|z17-[aeroway=gate],
node|z17-[amenity=bureau_de_change], node|z17-[amenity=bureau_de_change],
node|z17-[amenity=money_transfer], node|z17-[amenity=money_transfer],
node|z17-[amenity=mobile_money_agent],
node|z17-[amenity=payment_centre],
{icon-image: banknote-m.svg;font-size: 11;} {icon-image: banknote-m.svg;font-size: 11;}
node|z16-[amenity=fire_station], node|z16-[amenity=fire_station],
@@ -1708,6 +1729,7 @@ node|z16-[shop=laundry],
node|z16-[shop=lighting], node|z16-[shop=lighting],
node|z16-[shop=dry_cleaning], node|z16-[shop=dry_cleaning],
node|z16-[shop=mobile_phone], node|z16-[shop=mobile_phone],
node|z16-[shop=telecommunication],
node|z16-[shop=optician], node|z16-[shop=optician],
node|z16-[shop=outdoor], node|z16-[shop=outdoor],
node|z16-[shop=rental], node|z16-[shop=rental],
@@ -1874,6 +1896,7 @@ node|z16[shop=laundry],
node|z16[shop=dry_cleaning], node|z16[shop=dry_cleaning],
{icon-image:dry_cleaning-m.svg;} {icon-image:dry_cleaning-m.svg;}
node|z16[shop=mobile_phone], node|z16[shop=mobile_phone],
node|z16[shop=telecommunication],
{icon-image: mobile_phone-m.svg;} {icon-image: mobile_phone-m.svg;}
node|z16[shop=optician], node|z16[shop=optician],
{icon-image: optician-m.svg;} {icon-image: optician-m.svg;}
@@ -2020,6 +2043,7 @@ node|z17-[shop=laundry],
node|z17-[shop=dry_cleaning], node|z17-[shop=dry_cleaning],
{icon-image:dry_cleaning-m.svg;icon-min-distance: 24;} {icon-image:dry_cleaning-m.svg;icon-min-distance: 24;}
node|z17-[shop=mobile_phone], node|z17-[shop=mobile_phone],
node|z17-[shop=telecommunication],
{icon-image: mobile_phone-m.svg;icon-min-distance: 24;} {icon-image: mobile_phone-m.svg;icon-min-distance: 24;}
node|z17-[shop=optician], node|z17-[shop=optician],
{icon-image: optician-m.svg;icon-min-distance: 24;} {icon-image: optician-m.svg;icon-min-distance: 24;}

View File

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

View File

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

View File

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

View File

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

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

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

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

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

Before

Width:  |  Height:  |  Size: 878 B

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,14 @@
<svg
height="25"
viewBox="0 0 40 25"
width="40"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 39.091407,18.544437 C 38.430061,19.172594 21.322691,24.588874 20,24.588874 c -1.322691,0 -18.4300616,-5.41628 -19.09140734,-6.044437 -0.6613457,-0.628156 -0.6613456,-11.4607175 10e-8,-12.0888738 C 1.5699385,5.8274068 18.677309,0.411126 20,0.411126 c 1.322691,0 18.430061,5.4162809 19.091407,6.0444372 0.661346,0.6281564 0.661346,11.4607178 0,12.0888738 z"
fill="#ffffff"
style="stroke-width:0.594311" />
<path
d="M 37.381413,17.569578 C 36.779304,18.096424 21.204219,22.639156 20,22.639156 18.79578,22.639156 3.2206952,18.096424 2.6185853,17.569577 2.0164755,17.042731 2.0164756,7.9572668 2.6185854,7.4304207 3.2206953,6.9035747 18.79578,2.3608422 20,2.3608422 c 1.204219,0 16.779304,4.5427325 17.381413,5.0695786 0.60211,0.5268461 0.60211,9.6123102 0,10.1391572 z"
fill="#1a5ec1"
style="stroke-width:0.519333" />
</svg>

After

Width:  |  Height:  |  Size: 973 B

View File

@@ -0,0 +1,14 @@
<svg
height="18"
viewBox="0 0 29 18"
width="29"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 28.229757,13.346912 C 27.754145,13.798656 15.451225,17.693823 14.5,17.693823 c -0.951226,0 -13.2541449,-3.895167 -13.72975757,-4.346912 -0.4756127,-0.451744 -0.47561263,-8.2420781 10e-8,-8.6938224 C 1.2458552,4.2013443 13.548774,0.306177 14.5,0.306177 c 0.951225,0 13.254145,3.8951673 13.729757,4.3469117 0.475613,0.4517443 0.475613,8.2420783 0,8.6938233 z"
fill="#ffffff"
style="stroke-width:0.427404" />
<path
d="m 27,12.645834 c -0.433012,0.378886 -11.633974,3.645833 -12.5,3.645833 -0.866025,0 -12.0669874,-3.266947 -12.5000002,-3.645833 C 1.5669871,12.266948 1.5669872,5.7330535 1.9999999,5.3541673 2.4330126,4.9752812 13.633975,1.708334 14.5,1.708334 c 0.866026,0 12.066988,3.2669473 12.5,3.6458334 0.433013,0.3788861 0.433013,6.9127806 0,7.2916666 z"
fill="#1a5ec1"
style="stroke-width:0.373483" />
</svg>

After

Width:  |  Height:  |  Size: 965 B

View File

@@ -0,0 +1,14 @@
<svg
height="25"
viewBox="0 0 40 25"
width="40"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 39.091407,18.544437 C 38.430061,19.172594 21.322691,24.588874 20,24.588874 c -1.322691,0 -18.4300616,-5.41628 -19.09140734,-6.044437 -0.6613457,-0.628156 -0.6613456,-11.4607175 10e-8,-12.0888738 C 1.5699385,5.8274068 18.677309,0.411126 20,0.411126 c 1.322691,0 18.430061,5.4162809 19.091407,6.0444372 0.661346,0.6281564 0.661346,11.4607178 0,12.0888738 z"
fill="#ffffff"
style="stroke-width:0.594311" />
<path
d="M 37.381413,17.569578 C 36.779304,18.096424 21.204219,22.639156 20,22.639156 18.79578,22.639156 3.2206952,18.096424 2.6185853,17.569577 2.0164755,17.042731 2.0164756,7.9572668 2.6185854,7.4304207 3.2206953,6.9035747 18.79578,2.3608422 20,2.3608422 c 1.204219,0 16.779304,4.5427325 17.381413,5.0695786 0.60211,0.5268461 0.60211,9.6123102 0,10.1391572 z"
fill="#309302"
style="stroke-width:0.519333" />
</svg>

After

Width:  |  Height:  |  Size: 992 B

View File

@@ -0,0 +1,14 @@
<svg
height="18"
viewBox="0 0 29 18"
width="29"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 28.229757,13.346912 C 27.754145,13.798656 15.451225,17.693823 14.5,17.693823 c -0.951226,0 -13.2541449,-3.895167 -13.72975757,-4.346912 -0.4756127,-0.451744 -0.47561263,-8.2420781 10e-8,-8.6938224 C 1.2458552,4.2013443 13.548774,0.306177 14.5,0.306177 c 0.951225,0 13.254145,3.8951673 13.729757,4.3469117 0.475613,0.4517443 0.475613,8.2420783 0,8.6938233 z"
fill="#fff"
style="stroke-width:0.427404" />
<path
d="m 27,12.645834 c -0.433012,0.378886 -11.633974,3.645833 -12.5,3.645833 -0.866025,0 -12.0669874,-3.266947 -12.5000002,-3.645833 C 1.5669871,12.266948 1.5669872,5.7330535 1.9999999,5.3541673 2.4330126,4.9752812 13.633975,1.708334 14.5,1.708334 c 0.866026,0 12.066988,3.2669473 12.5,3.6458334 0.433013,0.3788861 0.433013,6.9127806 0,7.2916666 z"
fill="#309302"
style="stroke-width:0.373483" />
</svg>

After

Width:  |  Height:  |  Size: 981 B

View File

@@ -0,0 +1,14 @@
<svg
height="25"
viewBox="0 0 40 25"
width="40"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 39.091407,18.544437 C 38.430061,19.172594 21.322691,24.588874 20,24.588874 c -1.322691,0 -18.4300616,-5.41628 -19.09140734,-6.044437 -0.6613457,-0.628156 -0.6613456,-11.4607175 10e-8,-12.0888738 C 1.5699385,5.8274068 18.677309,0.411126 20,0.411126 c 1.322691,0 18.430061,5.4162809 19.091407,6.0444372 0.661346,0.6281564 0.661346,11.4607178 0,12.0888738 z"
fill="#ffffff"
style="stroke-width:0.594311" />
<path
d="M 37.381413,17.569578 C 36.779304,18.096424 21.204219,22.639156 20,22.639156 18.79578,22.639156 3.2206952,18.096424 2.6185853,17.569577 2.0164755,17.042731 2.0164756,7.9572668 2.6185854,7.4304207 3.2206953,6.9035747 18.79578,2.3608422 20,2.3608422 c 1.204219,0 16.779304,4.5427325 17.381413,5.0695786 0.60211,0.5268461 0.60211,9.6123102 0,10.1391572 z"
fill="#e63534"
style="stroke-width:0.519333" />
</svg>

After

Width:  |  Height:  |  Size: 992 B

View File

@@ -0,0 +1,14 @@
<svg
height="18"
viewBox="0 0 29 18"
width="29"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 28.229757,13.346912 C 27.754145,13.798656 15.451225,17.693823 14.5,17.693823 c -0.951226,0 -13.2541449,-3.895167 -13.72975757,-4.346912 -0.4756127,-0.451744 -0.47561263,-8.2420781 10e-8,-8.6938224 C 1.2458552,4.2013443 13.548774,0.306177 14.5,0.306177 c 0.951225,0 13.254145,3.8951673 13.729757,4.3469117 0.475613,0.4517443 0.475613,8.2420783 0,8.6938233 z"
fill="#fff"
style="stroke-width:0.427404" />
<path
d="m 27,12.645834 c -0.433012,0.378886 -11.633974,3.645833 -12.5,3.645833 -0.866025,0 -12.0669874,-3.266947 -12.5000002,-3.645833 C 1.5669871,12.266948 1.5669872,5.7330535 1.9999999,5.3541673 2.4330126,4.9752812 13.633975,1.708334 14.5,1.708334 c 0.866026,0 12.066988,3.2669473 12.5,3.6458334 0.433013,0.3788861 0.433013,6.9127806 0,7.2916666 z"
fill="#e63534"
style="stroke-width:0.373483" />
</svg>

After

Width:  |  Height:  |  Size: 981 B

View File

@@ -0,0 +1,14 @@
<svg
height="25"
viewBox="0 0 40 25"
width="40"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 39.091407,18.544437 C 38.430061,19.172594 21.322691,24.588874 20,24.588874 c -1.322691,0 -18.4300616,-5.41628 -19.09140734,-6.044437 -0.6613457,-0.628156 -0.6613456,-11.4607175 10e-8,-12.0888738 C 1.5699385,5.8274068 18.677309,0.411126 20,0.411126 c 1.322691,0 18.430061,5.4162809 19.091407,6.0444372 0.661346,0.6281564 0.661346,11.4607178 0,12.0888738 z"
fill=""
style="stroke-width:0.594311" />
<path
d="M 37.381413,17.569578 C 36.779304,18.096424 21.204219,22.639156 20,22.639156 18.79578,22.639156 3.2206952,18.096424 2.6185853,17.569577 2.0164755,17.042731 2.0164756,7.9572668 2.6185854,7.4304207 3.2206953,6.9035747 18.79578,2.3608422 20,2.3608422 c 1.204219,0 16.779304,4.5427325 17.381413,5.0695786 0.60211,0.5268461 0.60211,9.6123102 0,10.1391572 z"
fill="#c97600"
style="stroke-width:0.519333" />
</svg>

After

Width:  |  Height:  |  Size: 985 B

View File

@@ -0,0 +1,14 @@
<svg
height="18"
viewBox="0 0 29 18"
width="29"
xmlns="http://www.w3.org/2000/svg">
<path
d="M 28.229757,13.346912 C 27.754145,13.798656 15.451225,17.693823 14.5,17.693823 c -0.951226,0 -13.2541449,-3.895167 -13.72975757,-4.346912 -0.4756127,-0.451744 -0.47561263,-8.2420781 10e-8,-8.6938224 C 1.2458552,4.2013443 13.548774,0.306177 14.5,0.306177 c 0.951225,0 13.254145,3.8951673 13.729757,4.3469117 0.475613,0.4517443 0.475613,8.2420783 0,8.6938233 z"
fill=""
style="stroke-width:0.427404" />
<path
d="m 27,12.645834 c -0.433012,0.378886 -11.633974,3.645833 -12.5,3.645833 -0.866025,0 -12.0669874,-3.266947 -12.5000002,-3.645833 C 1.5669871,12.266948 1.5669872,5.7330535 1.9999999,5.3541673 2.4330126,4.9752812 13.633975,1.708334 14.5,1.708334 c 0.866026,0 12.066988,3.2669473 12.5,3.6458334 0.433013,0.3788861 0.433013,6.9127806 0,7.2916666 z"
fill="#c97600"
style="stroke-width:0.373483" />
</svg>

After

Width:  |  Height:  |  Size: 977 B

View File

@@ -0,0 +1,14 @@
<svg
height="21"
viewBox="0 0 37 21"
width="37"
xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(0.27138802,0,0,0.27138802,4.3878227,-0.11668148)">
<path
d="M 52,2.3036748 H -16.168078 V 54.476396 c -4.14e-4,6.304117 4.321485,11.786348 10.4515331,13.257534 L 52,77.809925 109.71665,67.73393 c 6.13001,-1.471227 10.45186,-6.953449 10.45143,-13.257534 V 2.3036748 Z"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0" />
<path
d="M 52,9.0567997 H -8.0025878 V 53.8068 c -0.1582841,3.383075 1.8308869,6.499251 4.9662002,7.7799 L 52,70.9148 105.86959,61.5867 c 3.59724,-0.863346 6.13337,-4.080505 6.133,-7.7799 V 9.0567997 Z"
style="fill:#1a5ec1;fill-opacity:1;stroke:#00008b;stroke-width:0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 774 B

View File

@@ -0,0 +1,14 @@
<svg
height="15"
viewBox="0 0 26 15"
width="26"
xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(0.19044333,0,0,0.19044333,3.0791026,0.18161878)">
<path
d="M 52,2.3036748 H -16.168078 V 54.476396 c -4.14e-4,6.304117 4.321485,11.786348 10.4515331,13.257534 L 52,77.809925 109.71665,67.73393 c 6.13001,-1.471227 10.45186,-6.953449 10.45143,-13.257534 V 2.3036748 Z"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0" />
<path
d="M 52,9.0567997 H -8.0025878 V 53.8068 c -0.1582841,3.383075 1.8308869,6.499251 4.9662002,7.7799 L 52,70.9148 105.86959,61.5867 c 3.59724,-0.863346 6.13337,-4.080505 6.133,-7.7799 V 9.0567997 Z"
style="fill:#1a5ec1;fill-opacity:1;stroke:#00008b;stroke-width:0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 773 B

View File

@@ -0,0 +1,14 @@
<svg
height="21"
viewBox="0 0 37 21"
width="37"
xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(0.27138802,0,0,0.27138802,4.3878227,-0.11668148)">
<path
d="M 52,2.3036748 H -16.168078 V 54.476396 c -4.14e-4,6.304117 4.321485,11.786348 10.4515331,13.257534 L 52,77.809925 109.71665,67.73393 c 6.13001,-1.471227 10.45186,-6.953449 10.45143,-13.257534 V 2.3036748 Z"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0" />
<path
d="M 52,9.0567997 H -8.0025878 V 53.8068 c -0.1582841,3.383075 1.8308869,6.499251 4.9662002,7.7799 L 52,70.9148 105.86959,61.5867 c 3.59724,-0.863346 6.13337,-4.080505 6.133,-7.7799 V 9.0567997 Z"
style="fill:#309302;fill-opacity:1;stroke:#00008b;stroke-width:0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 774 B

View File

@@ -0,0 +1,14 @@
<svg
height="15"
viewBox="0 0 26 15"
width="26"
xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(0.19044333,0,0,0.19044333,3.0791026,0.18161878)">
<path
d="M 52,2.3036748 H -16.168078 V 54.476396 c -4.14e-4,6.304117 4.321485,11.786348 10.4515331,13.257534 L 52,77.809925 109.71665,67.73393 c 6.13001,-1.471227 10.45186,-6.953449 10.45143,-13.257534 V 2.3036748 Z"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0" />
<path
d="M 52,9.0567997 H -8.0025878 V 53.8068 c -0.1582841,3.383075 1.8308869,6.499251 4.9662002,7.7799 L 52,70.9148 105.86959,61.5867 c 3.59724,-0.863346 6.13337,-4.080505 6.133,-7.7799 V 9.0567997 Z"
style="fill:#309302;fill-opacity:1;stroke:#00008b;stroke-width:0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 773 B

View File

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

After

Width:  |  Height:  |  Size: 744 B

View File

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

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 490 B

View File

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

Before

Width:  |  Height:  |  Size: 797 B

After

Width:  |  Height:  |  Size: 405 B

View File

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

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

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

View File

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

View File

@@ -26,6 +26,7 @@
"type.amenity.bench" = "Sitzbank"; "type.amenity.bench" = "Sitzbank";
"type.amenity.bench.backless" = "Sitzbank ohne Rückenlehne"; "type.amenity.bench.backless" = "Sitzbank ohne Rückenlehne";
"type.amenity.bicycle_parking" = "Fahrradständer"; "type.amenity.bicycle_parking" = "Fahrradständer";
"type.amenity.boat_rental" = "Bootsverleih";
"type.amenity.bicycle_rental" = "Fahrradverleih"; "type.amenity.bicycle_rental" = "Fahrradverleih";
"type.amenity.bicycle_repair_station" = "Fahrrad-Reparaturstation"; "type.amenity.bicycle_repair_station" = "Fahrrad-Reparaturstation";
"type.amenity.biergarten" = "Biergarten"; "type.amenity.biergarten" = "Biergarten";

View File

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

View File

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

View File

@@ -591,5 +591,5 @@
"existence_confirmed_time_ago" = "Existence confirmed %@"; "existence_confirmed_time_ago" = "Existence confirmed %@";
"offline_explanation_text" = "Hai que descargar un mapa para ver e navegar polo área.\nDescarga os mapas para as zonas polas que vas viaxar."; "offline_explanation_text" = "Hai que descargar un mapa para ver e navegar polo área.\nDescarga os mapas para as zonas polas que vas viaxar.";
"offline_explanation_title" = "Mapas sen conexión"; "offline_explanation_title" = "Mapas sen conexión";
"avoid_steps" = "Evitar pasos"; "avoid_steps" = "Evitar escaleiras";
"editor_place_doesnt_exist_description" = "Describe a aparencia do lugar para enviar unha nota co erro á comunidade OpenStreetMap"; "editor_place_doesnt_exist_description" = "Describe a aparencia do lugar para enviar unha nota co erro á comunidade OpenStreetMap";

View File

@@ -662,7 +662,7 @@
"type.landuse.religious" = "Religiøst område"; "type.landuse.religious" = "Religiøst område";
"type.landuse.commercial" = "Næringsområde"; "type.landuse.commercial" = "Næringsområde";
"type.landuse.construction" = "Byggeplass"; "type.landuse.construction" = "Byggeplass";
"type.landuse.education" = "Educational Facility"; "type.landuse.education" = "Utdanningsinstitusjon";
"type.landuse.farmland" = "Jordbruksområde"; "type.landuse.farmland" = "Jordbruksområde";
"type.landuse.farmyard" = "Bondegård"; "type.landuse.farmyard" = "Bondegård";
"type.landuse.field" = "Field"; "type.landuse.field" = "Field";
@@ -760,7 +760,7 @@
"type.man_made.water_well.drinking_water_no" = "Brønn"; "type.man_made.water_well.drinking_water_no" = "Brønn";
"type.man_made.windmill" = "Vindmølle"; "type.man_made.windmill" = "Vindmølle";
"type.man_made.works" = "Industrial Works"; "type.man_made.works" = "Industrial Works";
"type.military" = "Military"; "type.military" = "Militært";
"type.military.bunker" = "Bunker"; "type.military.bunker" = "Bunker";
"type.mountain_pass" = "Fjellpass"; "type.mountain_pass" = "Fjellpass";
"type.natural" = "Natur"; "type.natural" = "Natur";
@@ -892,12 +892,12 @@
"type.railway.abandoned" = "Nedlagt jernbane"; "type.railway.abandoned" = "Nedlagt jernbane";
"type.railway.abandoned.bridge" = "Nedlagt jernbanebru"; "type.railway.abandoned.bridge" = "Nedlagt jernbanebru";
"type.railway.abandoned.tunnel" = "Nedlagt jernbanetunnel"; "type.railway.abandoned.tunnel" = "Nedlagt jernbanetunnel";
"type.railway.construction" = "Railway Construction"; "type.railway.construction" = "Jernbanebygging";
"type.railway.crossing" = "Jernbaneovergang"; "type.railway.crossing" = "Jernbaneovergang";
"type.railway.disused" = "Ubenyttet jernbane"; "type.railway.disused" = "Ubenyttet jernbane";
"type.railway.funicular" = "Kabelbane"; "type.railway.funicular" = "Kabelbane";
"type.railway.funicular.bridge" = "Funicular Bridge"; "type.railway.funicular.bridge" = "Kabelbanebru";
"type.railway.funicular.tunnel" = "Funicular Tunnel"; "type.railway.funicular.tunnel" = "Kabelbanetunnel";
"type.railway.halt" = "Togstasjon"; "type.railway.halt" = "Togstasjon";
"type.railway.level_crossing" = "Planovergang"; "type.railway.level_crossing" = "Planovergang";
"type.railway.light_rail" = "Light Rail"; "type.railway.light_rail" = "Light Rail";
@@ -1198,7 +1198,7 @@
"type.shop.books" = "Bokhandel"; "type.shop.books" = "Bokhandel";
"type.shop.butcher" = "Slakter"; "type.shop.butcher" = "Slakter";
"type.shop.cannabis" = "Cannabisbutikk"; "type.shop.cannabis" = "Cannabisbutikk";
"type.shop.car" = "Bil butikk"; "type.shop.car" = "Bilforhandler";
"type.shop.car_parts" = "Bildeler"; "type.shop.car_parts" = "Bildeler";
"type.shop.car_repair" = "Bilverksted"; "type.shop.car_repair" = "Bilverksted";
"type.shop.car_repair.tyres" = "Dekkreparasjon"; "type.shop.car_repair.tyres" = "Dekkreparasjon";
@@ -1467,7 +1467,7 @@
"type.sport.diving" = "High Diving"; "type.sport.diving" = "High Diving";
"type.highway.ladder" = "Stige"; "type.highway.ladder" = "Stige";
"type.natural.wetland.swamp" = "Sumpskog"; "type.natural.wetland.swamp" = "Sumpskog";
"type.man_made.crane" = "Crane"; "type.man_made.crane" = "Kran";
"type.natural.wetland.saltmarsh" = "Salt Marsh"; "type.natural.wetland.saltmarsh" = "Salt Marsh";
"type.natural.wetland.mangrove" = "Mangrove"; "type.natural.wetland.mangrove" = "Mangrove";
"type.barrier.guard_rail" = "Autovern"; "type.barrier.guard_rail" = "Autovern";
@@ -1482,7 +1482,7 @@
"type.amenity.luggage_locker" = "Bagasjeoppbevaring"; "type.amenity.luggage_locker" = "Bagasjeoppbevaring";
"type.amenity.ranger_station" = "Ranger Station"; "type.amenity.ranger_station" = "Ranger Station";
"type.amenity.bicycle_parking.covered" = "Overbygd sykkelparkering"; "type.amenity.bicycle_parking.covered" = "Overbygd sykkelparkering";
"type.post_office.post_partner" = "Post Partner"; "type.post_office.post_partner" = "Post i butikk";
"type.barrier.wicket_gate" = "Wicket gate"; "type.barrier.wicket_gate" = "Wicket gate";
"type.amenity.animal_shelter" = "Dyrehjem"; "type.amenity.animal_shelter" = "Dyrehjem";
"type.office.security" = "Security Guards Office"; "type.office.security" = "Security Guards Office";

View File

@@ -319,10 +319,10 @@
"report_incorrect_map_bug" = "Raportați sau remediați datele incorecte de pe hartă"; "report_incorrect_map_bug" = "Raportați sau remediați datele incorecte de pe hartă";
/* Button in the About screen */ /* Button in the About screen */
"volunteer" = "Pentru a fi voluntar"; "volunteer" = "Fii voluntar și îmbunătațește CoMaps";
/* "Social media" section header in the About screen */ /* "Social media" section header in the About screen */
"follow_us" = "Urmăriți-ne și contactați-ne"; "follow_us" = "Conectează-te cu noi";
/* Alert text */ /* Alert text */
"email_error_body" = "Clientul de e-mail nu a fost configurat. Te rugăm să-l configurezi sau să ne contactezi la %@"; "email_error_body" = "Clientul de e-mail nu a fost configurat. Te rugăm să-l configurezi sau să ne contactezi la %@";
@@ -1090,6 +1090,6 @@
"pref_mapappearance_title" = "Map Appearance"; "pref_mapappearance_title" = "Map Appearance";
"pref_maplanguage_title" = "Map Language"; "pref_maplanguage_title" = "Map Language";
"transliteration_title_disabled_summary" = "Disabled when always using the local language for the map"; "transliteration_title_disabled_summary" = "Disabled when always using the local language for the map";
"pref_maplanguage_local" = "Local Language"; "pref_maplanguage_local" = "Limbă Locală";
"hours_confirmed_time_ago" = "Confirmed %@"; "hours_confirmed_time_ago" = "Confirmed %@";
"existence_confirmed_time_ago" = "Existence confirmed %@"; "existence_confirmed_time_ago" = "Existence confirmed %@";

View File

@@ -1471,7 +1471,7 @@
"type.natural.wetland.saltmarsh" = "Mlaștină sărată"; "type.natural.wetland.saltmarsh" = "Mlaștină sărată";
"type.natural.wetland.mangrove" = "Pădure de mangrove"; "type.natural.wetland.mangrove" = "Pădure de mangrove";
"type.barrier.guard_rail" = "Barieră de protecție"; "type.barrier.guard_rail" = "Barieră de protecție";
"type.amenity.studio" = "Garsonieră"; "type.amenity.studio" = "Studio Media";
"type.natural.wetland.fen" = "Pajiște mlăștinoasă"; "type.natural.wetland.fen" = "Pajiște mlăștinoasă";
"type.natural.wetland.saltmarsh.tidal" = "Mlaștină sărată de maree"; "type.natural.wetland.saltmarsh.tidal" = "Mlaștină sărată de maree";
"type.natural.wetland.reedbed" = "Stufăriș"; "type.natural.wetland.reedbed" = "Stufăriș";

View File

@@ -377,3 +377,4 @@
"placepage_call_button" = "Klic"; "placepage_call_button" = "Klic";
"today" = "Danes"; "today" = "Danes";
"bookmark_sets" = "Seznami zaznamkov"; "bookmark_sets" = "Seznami zaznamkov";
"about_proposition_3" = "Transparentno in nedobičkonosno";

View File

@@ -152,3 +152,4 @@
"type.aeroway" = "Infrastruktura zračnega prostora"; "type.aeroway" = "Infrastruktura zračnega prostora";
"type.amenity.love_hotel" = "Hotel za zaljubljence"; "type.amenity.love_hotel" = "Hotel za zaljubljence";
"type.amenity.charging_station.motorcar.small" = "Polnilno mesto za avtomobile"; "type.amenity.charging_station.motorcar.small" = "Polnilno mesto za avtomobile";
"type.amenity.cinema" = "Kino";

View File

@@ -12,6 +12,8 @@
<string>NSStringPluralRuleType</string> <string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>d</string> <string>d</string>
<key>zero</key>
<string>Noll bokmärken</string>
<key>one</key> <key>one</key>
<string>%d bokmärke</string> <string>%d bokmärke</string>
<key>other</key> <key>other</key>

View File

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

View File

@@ -196,19 +196,31 @@ m2::PointF GetOffset(int offsetX, int offsetY)
bool IsSymbolRoadShield(ftypes::RoadShield const & shield) bool IsSymbolRoadShield(ftypes::RoadShield const & shield)
{ {
return shield.m_type == ftypes::RoadShieldType::US_Interstate || shield.m_type == ftypes::RoadShieldType::US_Highway || shield.m_type == ftypes::RoadShieldType::Italy_Autostrada; return shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Green || shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Blue || shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Red || shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Turkey || shield.m_type == ftypes::RoadShieldType::US_Interstate || shield.m_type == ftypes::RoadShieldType::US_Highway || shield.m_type == ftypes::RoadShieldType::Italy_Autostrada || shield.m_type == ftypes::RoadShieldType::Hungary_Green || shield.m_type == ftypes::RoadShieldType::Hungary_Blue;
} }
std::string GetRoadShieldSymbolName(ftypes::RoadShield const & shield, double fontScale) std::string GetRoadShieldSymbolName(ftypes::RoadShield const & shield, double fontScale)
{ {
ASSERT(IsSymbolRoadShield(shield), ()); ASSERT(IsSymbolRoadShield(shield), ());
std::string result = ""; std::string result = "";
if (shield.m_type == ftypes::RoadShieldType::US_Interstate) if (shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Green)
result = "shield-highway_hexagon_green";
else if (shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Blue)
result = "shield-highway_hexagon_blue";
else if (shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Red)
result = "shield-highway_hexagon_red";
else if (shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Turkey)
result = "shield-highway_hexagon_turkey";
else if (shield.m_type == ftypes::RoadShieldType::US_Interstate)
result = shield.m_name.size() <= 2 ? "shield-us-i-thin" : "shield-us-i-wide"; result = shield.m_name.size() <= 2 ? "shield-us-i-thin" : "shield-us-i-wide";
else if (shield.m_type == ftypes::RoadShieldType::US_Highway) else if (shield.m_type == ftypes::RoadShieldType::US_Highway)
result = shield.m_name.size() <= 2 ? "shield-us-hw-thin" : "shield-us-hw-wide"; result = shield.m_name.size() <= 2 ? "shield-us-hw-thin" : "shield-us-hw-wide";
else if (shield.m_type == ftypes::RoadShieldType::Italy_Autostrada) else if (shield.m_type == ftypes::RoadShieldType::Italy_Autostrada)
result = "shield-it-a"; result = "shield-it-a";
else if (shield.m_type == ftypes::RoadShieldType::Hungary_Green)
result = "shield-hungary-green";
else if (shield.m_type == ftypes::RoadShieldType::Hungary_Blue)
result = "shield-hungary-blue";
else else
ASSERT(false, ("This shield type doesn't support symbols:", shield.m_type)); ASSERT(false, ("This shield type doesn't support symbols:", shield.m_type));
@@ -306,10 +318,16 @@ dp::Color GetRoadShieldTextColor(dp::Color const & baseColor, ftypes::RoadShield
{RoadShieldType::Generic_Pill_Blue_Bordered, kRoadShieldWhiteTextColor}, {RoadShieldType::Generic_Pill_Blue_Bordered, kRoadShieldWhiteTextColor},
{RoadShieldType::Generic_Pill_Red_Bordered, kRoadShieldWhiteTextColor}, {RoadShieldType::Generic_Pill_Red_Bordered, kRoadShieldWhiteTextColor},
{RoadShieldType::Generic_Pill_Orange_Bordered, kRoadShieldBlackTextColor}, {RoadShieldType::Generic_Pill_Orange_Bordered, kRoadShieldBlackTextColor},
{RoadShieldType::Highway_Hexagon_Green, kRoadShieldWhiteTextColor},
{RoadShieldType::Highway_Hexagon_Blue, kRoadShieldWhiteTextColor},
{RoadShieldType::Highway_Hexagon_Red, kRoadShieldWhiteTextColor},
{RoadShieldType::Highway_Hexagon_Turkey, kRoadShieldBlackTextColor},
{RoadShieldType::US_Interstate, kRoadShieldWhiteTextColor}, {RoadShieldType::US_Interstate, kRoadShieldWhiteTextColor},
{RoadShieldType::US_Highway, kRoadShieldBlackTextColor}, {RoadShieldType::US_Highway, kRoadShieldBlackTextColor},
{RoadShieldType::UK_Highway, kRoadShieldUKYellowTextColor}, {RoadShieldType::UK_Highway, kRoadShieldUKYellowTextColor},
{RoadShieldType::Italy_Autostrada, kRoadShieldWhiteTextColor}}; {RoadShieldType::Italy_Autostrada, kRoadShieldWhiteTextColor},
{RoadShieldType::Hungary_Green, kRoadShieldWhiteTextColor},
{RoadShieldType::Hungary_Blue, kRoadShieldWhiteTextColor}};
if (auto const * cl = kColors.Find(shield.m_type); cl) if (auto const * cl = kColors.Find(shield.m_type); cl)
return df::GetColorConstant(*cl); return df::GetColorConstant(*cl);

View File

@@ -353,7 +353,7 @@ void RuleDrawer::ProcessLineStyle(FeatureType & f, Stylist const & s, TInsertSha
df::RoadClass m_roadClass; df::RoadClass m_roadClass;
}; };
static Checker const checkers[] = { static Checker const checkers[] = {
{{HighwayClass::Trunk, HighwayClass::Primary}, kRoadClass0ZoomLevel, df::RoadClass::Class0}, {{HighwayClass::Motorway, HighwayClass::Trunk, HighwayClass::Primary}, kRoadClass0ZoomLevel, df::RoadClass::Class0},
{{HighwayClass::Secondary, HighwayClass::Tertiary}, kRoadClass1ZoomLevel, df::RoadClass::Class1}, {{HighwayClass::Secondary, HighwayClass::Tertiary}, kRoadClass1ZoomLevel, df::RoadClass::Class1},
{{HighwayClass::LivingStreet, HighwayClass::Service, HighwayClass::ServiceMinor}, {{HighwayClass::LivingStreet, HighwayClass::Service, HighwayClass::ServiceMinor},
kRoadClass2ZoomLevel, kRoadClass2ZoomLevel,

View File

@@ -142,7 +142,7 @@ void Notes::CreateNote(ms::LatLon const & latLon, std::string const & text)
return; return;
} }
std::lock_guard<std::mutex> g(m_mu); std::lock_guard<std::mutex> g(m_dataAccessMutex);
auto const it = std::find_if(m_notes.begin(), m_notes.end(), [&latLon, &text](Note const & note) auto const it = std::find_if(m_notes.begin(), m_notes.end(), [&latLon, &text](Note const & note)
{ return latLon.EqualDxDy(note.m_point, kTolerance) && text == note.m_note; }); { return latLon.EqualDxDy(note.m_point, kTolerance) && text == note.m_note; });
// No need to add the same note. It works in case when saved note are not uploaded yet. // No need to add the same note. It works in case when saved note are not uploaded yet.
@@ -155,61 +155,56 @@ void Notes::CreateNote(ms::LatLon const & latLon, std::string const & text)
void Notes::Upload(osm::OsmOAuth const & auth) void Notes::Upload(osm::OsmOAuth const & auth)
{ {
// Capture self to keep it from destruction until this thread is done. std::unique_lock<std::mutex> uploadingNotesLock(m_uploadingNotesMutex, std::defer_lock);
auto const self = shared_from_this(); if (!uploadingNotesLock.try_lock()) {
// Do not run more than one uploading task at a time.
LOG(LDEBUG, ("OSM notes upload is already running"));
return;
}
std::unique_lock<std::mutex> dataAccessLock(m_dataAccessMutex);
auto const doUpload = [self, auth]() // Size of m_notes is decreased only in this method.
size_t size = m_notes.size();
osm::ServerApi06 api(auth);
while (size > 0)
{ {
std::unique_lock<std::mutex> ulock(self->m_mu); try
// Size of m_notes is decreased only in this method.
auto & notes = self->m_notes;
size_t size = notes.size();
osm::ServerApi06 api(auth);
while (size > 0)
{ {
try dataAccessLock.unlock();
{ auto const id = api.CreateNote(m_notes.front().m_point, m_notes.front().m_note);
ulock.unlock(); dataAccessLock.lock();
auto const id = api.CreateNote(notes.front().m_point, notes.front().m_note); LOG(LINFO, ("A note uploaded with id", id));
ulock.lock(); }
LOG(LINFO, ("A note uploaded with id", id)); catch (osm::ServerApi06::ServerApi06Exception const & e)
} {
catch (osm::ServerApi06::ServerApi06Exception const & e) LOG(LERROR, ("Can't upload note.", e.Msg()));
{ // Don't attempt upload for other notes as they will likely suffer from the same error.
LOG(LERROR, ("Can't upload note.", e.Msg())); return;
// We believe that next iterations will suffer from the same error.
return;
}
notes.pop_front();
--size;
++self->m_uploadedNotesCount;
Save(self->m_fileName, self->m_notes, self->m_uploadedNotesCount);
} }
};
static auto future = std::async(std::launch::async, doUpload); m_notes.pop_front();
auto const status = future.wait_for(std::chrono::milliseconds(0)); --size;
if (status == std::future_status::ready) ++m_uploadedNotesCount;
future = std::async(std::launch::async, doUpload); Save(m_fileName, m_notes, m_uploadedNotesCount);
}
} }
std::list<Note> Notes::GetNotes() const std::list<Note> Notes::GetNotes() const
{ {
std::lock_guard<std::mutex> g(m_mu); std::lock_guard<std::mutex> g(m_dataAccessMutex);
return m_notes; return m_notes;
} }
size_t Notes::NotUploadedNotesCount() const size_t Notes::NotUploadedNotesCount() const
{ {
std::lock_guard<std::mutex> g(m_mu); std::lock_guard<std::mutex> g(m_dataAccessMutex);
return m_notes.size(); return m_notes.size();
} }
size_t Notes::UploadedNotesCount() const size_t Notes::UploadedNotesCount() const
{ {
std::lock_guard<std::mutex> g(m_mu); std::lock_guard<std::mutex> g(m_dataAccessMutex);
return m_uploadedNotesCount; return m_uploadedNotesCount;
} }
} // namespace editor } // namespace editor

View File

@@ -46,7 +46,8 @@ private:
explicit Notes(std::string const & fileName); explicit Notes(std::string const & fileName);
std::string const m_fileName; std::string const m_fileName;
mutable std::mutex m_mu; mutable std::mutex m_dataAccessMutex;
mutable std::mutex m_uploadingNotesMutex;
// m_notes keeps the notes that have not been uploaded yet. // m_notes keeps the notes that have not been uploaded yet.
// Once a note has been uploaded, it is removed from m_notes. // Once a note has been uploaded, it is removed from m_notes.

View File

@@ -126,7 +126,7 @@ bool IsObsolete(editor::XMLFeature const & xml, FeatureID const & fid)
} }
} // namespace } // namespace
Editor::Editor() : m_configLoader(m_config), m_notes(editor::Notes::MakeNotes()), m_isUploadingNow(false) Editor::Editor() : m_configLoader(m_config), m_notes(editor::Notes::MakeNotes())
{ {
SetDefaultStorage(); SetDefaultStorage();
} }
@@ -576,217 +576,165 @@ void Editor::UploadChanges(string const & oauthToken, ChangesetTags tags, Finish
if (m_notes->NotUploadedNotesCount()) if (m_notes->NotUploadedNotesCount())
m_notes->Upload(OsmOAuth::ServerAuth(oauthToken)); m_notes->Upload(OsmOAuth::ServerAuth(oauthToken));
auto const features = m_features.Get(); if (!HaveMapEditsToUpload(*m_features.Get()))
if (!HaveMapEditsToUpload(*features))
{ {
LOG(LDEBUG, ("There are no local edits to upload.")); LOG(LDEBUG, ("There are no local edits to upload."));
return; return;
} }
auto upload = [this](string secret, ChangesetTags tags, FinishUploadCallback callback) std::unique_lock<std::mutex> uploadingEditsLock(m_uploadingEditsMutex, std::defer_lock);
{ if (!uploadingEditsLock.try_lock()) {
int uploadedFeaturesCount = 0, errorsCount = 0; // Do not run more than one uploading task at a time.
ChangesetWrapper changeset(secret, std::move(tags)); LOG(LDEBUG, ("OSM edits upload is already running"));
auto const features = m_features.Get(); return;
}
for (auto const & id : *features) int uploadedFeaturesCount = 0, errorsCount = 0;
ChangesetWrapper changeset(oauthToken, std::move(tags));
auto const features = m_features.Get();
for (auto const & id : *features)
{
if (!id.first.IsAlive())
continue;
for (auto const & index : id.second)
{ {
if (!id.first.IsAlive()) FeatureTypeInfo const & fti = index.second;
// Do not process already uploaded features or those failed permanently.
if (!NeedsUpload(fti.m_uploadStatus))
continue; continue;
for (auto const & index : id.second) // TODO(a): Use UploadInfo as part of FeatureTypeInfo.
UploadInfo uploadInfo = {fti.m_uploadAttemptTimestamp, fti.m_uploadStatus, fti.m_uploadError};
LOG(LDEBUG, ("Content of editJournal:\n", fti.m_object.GetJournal().JournalToString()));
// Don't use new editor for Legacy Objects
auto const & journalHistory = fti.m_object.GetJournal().GetJournalHistory();
bool useNewEditor =
journalHistory.empty() || journalHistory.front().journalEntryType != JournalEntryType::LegacyObject;
try
{ {
FeatureTypeInfo const & fti = index.second; if (useNewEditor)
// Do not process already uploaded features or those failed permanently.
if (!NeedsUpload(fti.m_uploadStatus))
continue;
// TODO(a): Use UploadInfo as part of FeatureTypeInfo.
UploadInfo uploadInfo = {fti.m_uploadAttemptTimestamp, fti.m_uploadStatus, fti.m_uploadError};
LOG(LDEBUG, ("Content of editJournal:\n", fti.m_object.GetJournal().JournalToString()));
// Don't use new editor for Legacy Objects
auto const & journalHistory = fti.m_object.GetJournal().GetJournalHistory();
bool useNewEditor =
journalHistory.empty() || journalHistory.front().journalEntryType != JournalEntryType::LegacyObject;
try
{ {
if (useNewEditor) LOG(LDEBUG, ("New Editor used\n"));
switch (fti.m_status)
{ {
LOG(LDEBUG, ("New Editor used\n")); case FeatureStatus::Untouched: CHECK(false, ("It's impossible.")); continue;
case FeatureStatus::Obsolete: continue; // Obsolete features will be deleted by OSMers.
switch (fti.m_status) case FeatureStatus::Created: // fallthrough
{ case FeatureStatus::Modified:
case FeatureStatus::Untouched: CHECK(false, ("It's impossible.")); continue;
case FeatureStatus::Obsolete: continue; // Obsolete features will be deleted by OSMers.
case FeatureStatus::Created: // fallthrough
case FeatureStatus::Modified:
{
std::list<JournalEntry> const & journal = fti.m_object.GetJournal().GetJournal();
switch (fti.m_object.GetEditingLifecycle())
{
case EditingLifecycle::CREATED:
{
// Generate XMLFeature for new object
JournalEntry const & createEntry = journal.front();
ASSERT(createEntry.journalEntryType == JournalEntryType::ObjectCreated,
("First item should have type ObjectCreated"));
ObjCreateData const & objCreateData = std::get<ObjCreateData>(createEntry.data);
XMLFeature feature =
editor::TypeToXML(objCreateData.type, objCreateData.geomType, objCreateData.mercator);
// Check if place already exists
bool mergeSameLocation = false;
try
{
XMLFeature osmFeature = changeset.GetMatchingNodeFeatureFromOSM(objCreateData.mercator);
if (objCreateData.mercator == osmFeature.GetMercatorCenter())
{
changeset.AddChangesetTag("info:merged_same_location", "yes");
feature = osmFeature;
mergeSameLocation = true;
}
else
{
changeset.AddChangesetTag("info:feature_close_by", "yes");
}
}
catch (ChangesetWrapper::OsmObjectWasDeletedException const &)
{}
catch (ChangesetWrapper::EmptyFeatureException const &)
{}
// Add tags to XMLFeature
UpdateXMLFeatureTags(feature, journal);
// Upload XMLFeature to OSM
LOG(LDEBUG, ("CREATE Feature (newEditor)", feature));
changeset.AddChangesetTag("info:new_editor", "yes");
if (!mergeSameLocation)
changeset.Create(feature);
else
changeset.Modify(feature);
break;
}
case EditingLifecycle::MODIFIED:
{
// Load existing OSM object (Throws, see catch below)
XMLFeature feature = GetMatchingFeatureFromOSM(changeset, fti.m_object);
// Update tags of XMLFeature
UpdateXMLFeatureTags(feature, journal);
// Upload XMLFeature to OSM
LOG(LDEBUG, ("MODIFIED Feature (newEditor)", feature));
changeset.AddChangesetTag("info:new_editor", "yes");
changeset.Modify(feature);
break;
}
case EditingLifecycle::IN_SYNC:
{
CHECK(false, ("Object already IN_SYNC should not be here"));
continue;
}
}
break;
}
case FeatureStatus::Deleted:
auto const originalObjectPtr = GetOriginalMapObject(fti.m_object.GetID());
if (!originalObjectPtr)
{
LOG(LERROR, ("A feature with id", fti.m_object.GetID(), "cannot be loaded."));
GetPlatform().RunTask(Platform::Thread::Gui,
[this, fid = fti.m_object.GetID()]() { RemoveFeatureIfExists(fid); });
continue;
}
changeset.Delete(GetMatchingFeatureFromOSM(changeset, *originalObjectPtr));
break;
}
}
else // Use old editor
{ {
// Todo: Remove old editor after transition period std::list<JournalEntry> const & journal = fti.m_object.GetJournal().GetJournal();
switch (fti.m_status)
{
case FeatureStatus::Untouched: CHECK(false, ("It's impossible.")); continue;
case FeatureStatus::Obsolete: continue; // Obsolete features will be deleted by OSMers.
case FeatureStatus::Created:
{
XMLFeature feature = editor::ToXML(fti.m_object, true);
if (!fti.m_street.empty())
feature.SetTagValue(kAddrStreetTag, fti.m_street);
ASSERT_EQUAL(feature.GetType(), XMLFeature::Type::Node, switch (fti.m_object.GetEditingLifecycle())
("Linear and area features creation is not supported yet.")); {
case EditingLifecycle::CREATED:
{
// Generate XMLFeature for new object
JournalEntry const & createEntry = journal.front();
ASSERT(createEntry.journalEntryType == JournalEntryType::ObjectCreated,
("First item should have type ObjectCreated"));
ObjCreateData const & objCreateData = std::get<ObjCreateData>(createEntry.data);
XMLFeature feature =
editor::TypeToXML(objCreateData.type, objCreateData.geomType, objCreateData.mercator);
// Check if place already exists
bool mergeSameLocation = false;
try try
{ {
auto const center = fti.m_object.GetMercator(); XMLFeature osmFeature = changeset.GetMatchingNodeFeatureFromOSM(objCreateData.mercator);
// Throws, see catch below. if (objCreateData.mercator == osmFeature.GetMercatorCenter())
XMLFeature osmFeature = changeset.GetMatchingNodeFeatureFromOSM(center);
// If we are here, it means that object already exists at the given point.
// To avoid nodes duplication, merge and apply changes to it instead of creating a new one.
XMLFeature const osmFeatureCopy = osmFeature;
osmFeature.ApplyPatch(feature);
// Check to avoid uploading duplicates into OSM.
if (osmFeature == osmFeatureCopy)
{ {
LOG(LWARNING, ("Local changes are equal to OSM, feature has not been uploaded.", osmFeatureCopy)); changeset.AddChangesetTag("info:merged_same_location", "yes");
// Don't delete this local change right now for user to see it in profile. feature = osmFeature;
// It will be automatically deleted by migration code on the next maps update. mergeSameLocation = true;
} }
else else
{ {
LOG(LDEBUG, ("Create case: uploading patched feature", osmFeature)); changeset.AddChangesetTag("info:feature_close_by", "yes");
changeset.AddChangesetTag("info:old_editor", "yes");
changeset.AddChangesetTag("info:features_merged", "yes");
changeset.Modify(osmFeature);
} }
} }
catch (ChangesetWrapper::OsmObjectWasDeletedException const &) catch (ChangesetWrapper::OsmObjectWasDeletedException const &)
{ {}
// Object was never created by anyone else - it's safe to create it.
changeset.AddChangesetTag("info:old_editor", "yes");
changeset.Create(feature);
}
catch (ChangesetWrapper::EmptyFeatureException const &) catch (ChangesetWrapper::EmptyFeatureException const &)
{ {}
// There is another node nearby, but it should be safe to create a new one.
changeset.AddChangesetTag("info:old_editor", "yes"); // Add tags to XMLFeature
UpdateXMLFeatureTags(feature, journal);
// Upload XMLFeature to OSM
LOG(LDEBUG, ("CREATE Feature (newEditor)", feature));
changeset.AddChangesetTag("info:new_editor", "yes");
if (!mergeSameLocation)
changeset.Create(feature); changeset.Create(feature);
} else
catch (...) changeset.Modify(feature);
{ break;
// Pass network or other errors to outside exception handler. }
throw;
} case EditingLifecycle::MODIFIED:
{
// Load existing OSM object (Throws, see catch below)
XMLFeature feature = GetMatchingFeatureFromOSM(changeset, fti.m_object);
// Update tags of XMLFeature
UpdateXMLFeatureTags(feature, journal);
// Upload XMLFeature to OSM
LOG(LDEBUG, ("MODIFIED Feature (newEditor)", feature));
changeset.AddChangesetTag("info:new_editor", "yes");
changeset.Modify(feature);
break;
}
case EditingLifecycle::IN_SYNC:
{
CHECK(false, ("Object already IN_SYNC should not be here"));
continue;
}
} }
break; break;
}
case FeatureStatus::Modified: case FeatureStatus::Deleted:
auto const originalObjectPtr = GetOriginalMapObject(fti.m_object.GetID());
if (!originalObjectPtr)
{ {
// Do not serialize feature's type to avoid breaking OSM data. LOG(LERROR, ("A feature with id", fti.m_object.GetID(), "cannot be loaded."));
// TODO: Implement correct types matching when we support modifying existing feature types. GetPlatform().RunTask(Platform::Thread::Gui,
XMLFeature feature = editor::ToXML(fti.m_object, false); [this, fid = fti.m_object.GetID()]() { RemoveFeatureIfExists(fid); });
if (!fti.m_street.empty()) continue;
feature.SetTagValue(kAddrStreetTag, fti.m_street); }
changeset.Delete(GetMatchingFeatureFromOSM(changeset, *originalObjectPtr));
break;
}
}
else // Use old editor
{
// Todo: Remove old editor after transition period
switch (fti.m_status)
{
case FeatureStatus::Untouched: CHECK(false, ("It's impossible.")); continue;
case FeatureStatus::Obsolete: continue; // Obsolete features will be deleted by OSMers.
case FeatureStatus::Created:
{
XMLFeature feature = editor::ToXML(fti.m_object, true);
if (!fti.m_street.empty())
feature.SetTagValue(kAddrStreetTag, fti.m_street);
auto const originalObjectPtr = GetOriginalMapObject(fti.m_object.GetID()); ASSERT_EQUAL(feature.GetType(), XMLFeature::Type::Node,
if (!originalObjectPtr) ("Linear and area features creation is not supported yet."));
{ try
LOG(LERROR, ("A feature with id", fti.m_object.GetID(), "cannot be loaded.")); {
GetPlatform().RunTask(Platform::Thread::Gui, auto const center = fti.m_object.GetMercator();
[this, fid = fti.m_object.GetID()]() { RemoveFeatureIfExists(fid); }); // Throws, see catch below.
continue; XMLFeature osmFeature = changeset.GetMatchingNodeFeatureFromOSM(center);
}
XMLFeature osmFeature = GetMatchingFeatureFromOSM(changeset, *originalObjectPtr); // If we are here, it means that object already exists at the given point.
// To avoid nodes duplication, merge and apply changes to it instead of creating a new one.
XMLFeature const osmFeatureCopy = osmFeature; XMLFeature const osmFeatureCopy = osmFeature;
osmFeature.ApplyPatch(feature); osmFeature.ApplyPatch(feature);
// Check to avoid uploading duplicates into OSM. // Check to avoid uploading duplicates into OSM.
@@ -798,86 +746,129 @@ void Editor::UploadChanges(string const & oauthToken, ChangesetTags tags, Finish
} }
else else
{ {
LOG(LDEBUG, ("Uploading patched feature", osmFeature)); LOG(LDEBUG, ("Create case: uploading patched feature", osmFeature));
changeset.AddChangesetTag("info:old_editor", "yes"); changeset.AddChangesetTag("info:old_editor", "yes");
changeset.AddChangesetTag("info:features_merged", "yes");
changeset.Modify(osmFeature); changeset.Modify(osmFeature);
} }
} }
break; catch (ChangesetWrapper::OsmObjectWasDeletedException const &)
{
case FeatureStatus::Deleted: // Object was never created by anyone else - it's safe to create it.
auto const originalObjectPtr = GetOriginalMapObject(fti.m_object.GetID());
if (!originalObjectPtr)
{
LOG(LERROR, ("A feature with id", fti.m_object.GetID(), "cannot be loaded."));
GetPlatform().RunTask(Platform::Thread::Gui,
[this, fid = fti.m_object.GetID()]() { RemoveFeatureIfExists(fid); });
continue;
}
changeset.AddChangesetTag("info:old_editor", "yes"); changeset.AddChangesetTag("info:old_editor", "yes");
changeset.Delete(GetMatchingFeatureFromOSM(changeset, *originalObjectPtr)); changeset.Create(feature);
break; }
catch (ChangesetWrapper::EmptyFeatureException const &)
{
// There is another node nearby, but it should be safe to create a new one.
changeset.AddChangesetTag("info:old_editor", "yes");
changeset.Create(feature);
}
catch (...)
{
// Pass network or other errors to outside exception handler.
throw;
} }
} }
uploadInfo.m_uploadStatus = kUploaded; break;
uploadInfo.m_uploadError.clear();
++uploadedFeaturesCount;
}
catch (ChangesetWrapper::OsmObjectWasDeletedException const & ex)
{
uploadInfo.m_uploadStatus = kDeletedFromOSMServer;
uploadInfo.m_uploadError = ex.Msg();
++errorsCount;
LOG(LWARNING, (ex.what()));
changeset.AddToChangesetKeyList("upload_attempt_error", kDeletedFromOSMServer);
}
catch (ChangesetWrapper::EmptyFeatureException const & ex)
{
uploadInfo.m_uploadStatus = kMatchedFeatureIsEmpty;
uploadInfo.m_uploadError = ex.Msg();
++errorsCount;
LOG(LWARNING, (ex.what()));
changeset.AddToChangesetKeyList("upload_attempt_error", kMatchedFeatureIsEmpty);
}
catch (RootException const & ex)
{
uploadInfo.m_uploadStatus = kNeedsRetry;
uploadInfo.m_uploadError = ex.Msg();
++errorsCount;
LOG(LWARNING, (ex.what()));
changeset.AddToChangesetKeyList("upload_attempt_error", ex.Msg());
}
// TODO(AlexZ): Use timestamp from the server.
uploadInfo.m_uploadAttemptTimestamp = time(nullptr);
GetPlatform().RunTask(Platform::Thread::Gui, [this, id = fti.m_object.GetID(), uploadInfo]() case FeatureStatus::Modified:
{ {
// Call Save every time we modify each feature's information. // Do not serialize feature's type to avoid breaking OSM data.
SaveUploadedInformation(id, uploadInfo); // TODO: Implement correct types matching when we support modifying existing feature types.
}); XMLFeature feature = editor::ToXML(fti.m_object, false);
if (!fti.m_street.empty())
feature.SetTagValue(kAddrStreetTag, fti.m_street);
auto const originalObjectPtr = GetOriginalMapObject(fti.m_object.GetID());
if (!originalObjectPtr)
{
LOG(LERROR, ("A feature with id", fti.m_object.GetID(), "cannot be loaded."));
GetPlatform().RunTask(Platform::Thread::Gui,
[this, fid = fti.m_object.GetID()]() { RemoveFeatureIfExists(fid); });
continue;
}
XMLFeature osmFeature = GetMatchingFeatureFromOSM(changeset, *originalObjectPtr);
XMLFeature const osmFeatureCopy = osmFeature;
osmFeature.ApplyPatch(feature);
// Check to avoid uploading duplicates into OSM.
if (osmFeature == osmFeatureCopy)
{
LOG(LWARNING, ("Local changes are equal to OSM, feature has not been uploaded.", osmFeatureCopy));
// Don't delete this local change right now for user to see it in profile.
// It will be automatically deleted by migration code on the next maps update.
}
else
{
LOG(LDEBUG, ("Uploading patched feature", osmFeature));
changeset.AddChangesetTag("info:old_editor", "yes");
changeset.Modify(osmFeature);
}
}
break;
case FeatureStatus::Deleted:
auto const originalObjectPtr = GetOriginalMapObject(fti.m_object.GetID());
if (!originalObjectPtr)
{
LOG(LERROR, ("A feature with id", fti.m_object.GetID(), "cannot be loaded."));
GetPlatform().RunTask(Platform::Thread::Gui,
[this, fid = fti.m_object.GetID()]() { RemoveFeatureIfExists(fid); });
continue;
}
changeset.AddChangesetTag("info:old_editor", "yes");
changeset.Delete(GetMatchingFeatureFromOSM(changeset, *originalObjectPtr));
break;
}
}
uploadInfo.m_uploadStatus = kUploaded;
uploadInfo.m_uploadError.clear();
++uploadedFeaturesCount;
} }
catch (ChangesetWrapper::OsmObjectWasDeletedException const & ex)
{
uploadInfo.m_uploadStatus = kDeletedFromOSMServer;
uploadInfo.m_uploadError = ex.Msg();
++errorsCount;
LOG(LWARNING, (ex.what()));
changeset.AddToChangesetKeyList("upload_attempt_error", kDeletedFromOSMServer);
}
catch (ChangesetWrapper::EmptyFeatureException const & ex)
{
uploadInfo.m_uploadStatus = kMatchedFeatureIsEmpty;
uploadInfo.m_uploadError = ex.Msg();
++errorsCount;
LOG(LWARNING, (ex.what()));
changeset.AddToChangesetKeyList("upload_attempt_error", kMatchedFeatureIsEmpty);
}
catch (RootException const & ex)
{
uploadInfo.m_uploadStatus = kNeedsRetry;
uploadInfo.m_uploadError = ex.Msg();
++errorsCount;
LOG(LWARNING, (ex.what()));
changeset.AddToChangesetKeyList("upload_attempt_error", ex.Msg());
}
// TODO(AlexZ): Use timestamp from the server.
uploadInfo.m_uploadAttemptTimestamp = time(nullptr);
GetPlatform().RunTask(Platform::Thread::Gui, [this, id = fti.m_object.GetID(), uploadInfo]()
{
// Call Save every time we modify each feature's information.
SaveUploadedInformation(id, uploadInfo);
});
} }
}
if (callback) if (callback)
{
UploadResult result = UploadResult::NothingToUpload;
if (uploadedFeaturesCount)
result = UploadResult::Success;
else if (errorsCount)
result = UploadResult::Error;
callback(result);
}
m_isUploadingNow = false;
};
// Do not run more than one uploading task at a time.
if (!m_isUploadingNow)
{ {
m_isUploadingNow = true; UploadResult result = UploadResult::NothingToUpload;
GetPlatform().RunTask(Platform::Thread::Network, [upload = std::move(upload), oauthToken, tags = std::move(tags), if (uploadedFeaturesCount)
callback = std::move(callback)]() result = UploadResult::Success;
{ upload(std::move(oauthToken), std::move(tags), std::move(callback)); }); else if (errorsCount)
result = UploadResult::Error;
callback(result);
} }
} }

View File

@@ -260,7 +260,7 @@ private:
std::unique_ptr<editor::StorageBase> m_storage; std::unique_ptr<editor::StorageBase> m_storage;
std::atomic<bool> m_isUploadingNow; std::mutex m_uploadingEditsMutex;
DECLARE_THREAD_CHECKER(MainThreadChecker); DECLARE_THREAD_CHECKER(MainThreadChecker);
}; // class Editor }; // class Editor

View File

@@ -30,8 +30,8 @@ public:
m_map[c.GetTypeByPath({"route", "ferry"})] = HighwayClass::Transported; m_map[c.GetTypeByPath({"route", "ferry"})] = HighwayClass::Transported;
m_map[c.GetTypeByPath({"route", "shuttle_train"})] = HighwayClass::Transported; m_map[c.GetTypeByPath({"route", "shuttle_train"})] = HighwayClass::Transported;
m_map[c.GetTypeByPath({"highway", "motorway"})] = HighwayClass::Trunk; m_map[c.GetTypeByPath({"highway", "motorway"})] = HighwayClass::Motorway;
m_map[c.GetTypeByPath({"highway", "motorway_link"})] = HighwayClass::Trunk; m_map[c.GetTypeByPath({"highway", "motorway_link"})] = HighwayClass::Motorway;
m_map[c.GetTypeByPath({"highway", "trunk"})] = HighwayClass::Trunk; m_map[c.GetTypeByPath({"highway", "trunk"})] = HighwayClass::Trunk;
m_map[c.GetTypeByPath({"highway", "trunk_link"})] = HighwayClass::Trunk; m_map[c.GetTypeByPath({"highway", "trunk_link"})] = HighwayClass::Trunk;
@@ -83,6 +83,7 @@ char const * HighwayClassToString(HighwayClass const cls)
{ {
case HighwayClass::Undefined: return "Undefined"; case HighwayClass::Undefined: return "Undefined";
case HighwayClass::Transported: return "Transported"; case HighwayClass::Transported: return "Transported";
case HighwayClass::Motorway: return "Motorway";
case HighwayClass::Trunk: return "Trunk"; case HighwayClass::Trunk: return "Trunk";
case HighwayClass::Primary: return "Primary"; case HighwayClass::Primary: return "Primary";
case HighwayClass::Secondary: return "Secondary"; case HighwayClass::Secondary: return "Secondary";

View File

@@ -674,6 +674,7 @@ uint64_t GetPopulationByRadius(double r);
enum class HighwayClass enum class HighwayClass
{ {
Undefined = 0, // There has not been any attempt of calculating HighwayClass. Undefined = 0, // There has not been any attempt of calculating HighwayClass.
Motorway,
Trunk, Trunk,
Primary, Primary,
Secondary, Secondary,

View File

@@ -107,7 +107,7 @@ UNIT_TEST(GetHighwayClassTest)
feature::TypesHolder types2; feature::TypesHolder types2;
types2.Add(c.GetTypeByPath({"highway", "motorway_link", "tunnel"})); types2.Add(c.GetTypeByPath({"highway", "motorway_link", "tunnel"}));
TEST_EQUAL(ftypes::GetHighwayClass(types2), ftypes::HighwayClass::Trunk, ()); TEST_EQUAL(ftypes::GetHighwayClass(types2), ftypes::HighwayClass::Motorway, ());
feature::TypesHolder types3; feature::TypesHolder types3;
types3.Add(c.GetTypeByPath({"highway", "unclassified"})); types3.Add(c.GetTypeByPath({"highway", "unclassified"}));

View File

@@ -94,7 +94,7 @@ class RoadShieldParser
public: public:
explicit RoadShieldParser(std::string const & baseRoadNumber) : m_baseRoadNumber(baseRoadNumber) {} explicit RoadShieldParser(std::string const & baseRoadNumber) : m_baseRoadNumber(baseRoadNumber) {}
virtual ~RoadShieldParser() = default; virtual ~RoadShieldParser() = default;
virtual RoadShield ParseRoadShield(std::string_view rawText) const = 0; virtual RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const = 0;
RoadShieldType FindNetworkShield(std::string network) const RoadShieldType FindNetworkShield(std::string network) const
{ {
@@ -127,18 +127,20 @@ public:
RoadShieldsSetT GetRoadShields() const RoadShieldsSetT GetRoadShields() const
{ {
RoadShieldsSetT result, defaultShields; RoadShieldsSetT result, defaultShields;
uint8_t index = 0;
strings::Tokenize(m_baseRoadNumber, ";", [&](std::string_view rawText) strings::Tokenize(m_baseRoadNumber, ";", [&](std::string_view rawText)
{ {
++index;
RoadShield shield; RoadShield shield;
auto slashPos = rawText.find('/'); auto slashPos = rawText.find('/');
if (slashPos == std::string::npos) if (slashPos == std::string::npos)
{ {
shield = ParseRoadShield(rawText); shield = ParseRoadShield(rawText, index);
} }
else else
{ {
shield = ParseRoadShield(rawText.substr(slashPos + 1)); shield = ParseRoadShield(rawText.substr(slashPos + 1), index);
// TODO: use a network-based shield type override only if a parser couldn't make it // TODO: use a network-based shield type override only if a parser couldn't make it
// more specific than country's default shield type. // more specific than country's default shield type.
// E.g. "94" is set to Generic_Orange by Estonia parser, but then // E.g. "94" is set to Generic_Orange by Estonia parser, but then
@@ -176,7 +178,7 @@ class USRoadShieldParser : public RoadShieldParser
{ {
public: public:
explicit USRoadShieldParser(std::string const & baseRoadNumber) : RoadShieldParser(baseRoadNumber) {} explicit USRoadShieldParser(std::string const & baseRoadNumber) : RoadShieldParser(baseRoadNumber) {}
RoadShield ParseRoadShield(std::string_view rawText) const override RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
{ {
std::string shieldText(rawText); std::string shieldText(rawText);
@@ -236,7 +238,7 @@ class IndiaRoadShieldParser : public RoadShieldParser
{ {
public: public:
explicit IndiaRoadShieldParser(std::string const & baseRoadNumber) : RoadShieldParser(baseRoadNumber) {} explicit IndiaRoadShieldParser(std::string const & baseRoadNumber) : RoadShieldParser(baseRoadNumber) {}
RoadShield ParseRoadShield(std::string_view rawText) const override RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
{ {
std::string shieldText(rawText); std::string shieldText(rawText);
@@ -269,7 +271,7 @@ public:
, m_type(defaultType) , m_type(defaultType)
{} {}
RoadShield ParseRoadShield(std::string_view rawText) const override RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
{ {
if (rawText.size() > kMaxRoadShieldBytesSize) if (rawText.size() > kMaxRoadShieldBytesSize)
return RoadShield(); return RoadShield();
@@ -304,7 +306,7 @@ public:
, m_defaultType(defaultType) , m_defaultType(defaultType)
{} {}
RoadShield ParseRoadShield(std::string_view rawText) const override RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
{ {
if (rawText.size() > kMaxRoadShieldBytesSize) if (rawText.size() > kMaxRoadShieldBytesSize)
return RoadShield(); return RoadShield();
@@ -329,6 +331,72 @@ private:
RoadShieldType const m_defaultType; RoadShieldType const m_defaultType;
}; };
// Matches by a list of given highway classes for the first shield.
// Falls back to matching by a list of given substrings (identical to SimpleRoadShieldParser) for all other shields.
class HighwayClassRoadShieldParser : public RoadShieldParser
{
public:
struct Entry
{
Entry() = default;
Entry(std::string_view name, HighwayClass highwayClass, RoadShieldType type, bool isRedundant = false) : m_name(name), m_highwayClass(highwayClass), m_type(type), m_isRedundant(isRedundant) {}
std::string_view m_name;
HighwayClass m_highwayClass = HighwayClass::Undefined;
RoadShieldType m_type = RoadShieldType::Default;
/* Hides a specific secondary etc. sign, if there is a primary one */
bool m_isRedundant = false;
};
using ShieldTypes = buffer_vector<Entry, 8>;
HighwayClassRoadShieldParser(std::string const & baseRoadNumber, HighwayClass highwayClass, ShieldTypes && types, RoadShieldType defaultType = RoadShieldType::Default)
: RoadShieldParser(baseRoadNumber)
, m_highwayClass(highwayClass)
, m_types(std::move(types))
, m_defaultType(defaultType)
{}
RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
{
if (rawText.size() > kMaxRoadShieldBytesSize)
return RoadShield();
RoadShieldType type = m_defaultType;
if (index == 1) {
for (auto const & p : m_types)
{
if (p.m_highwayClass == m_highwayClass)
{
return RoadShield(p.m_type, rawText);
}
}
} else {
size_t idx = std::numeric_limits<size_t>::max();
for (auto const & p : m_types)
{
auto const i = rawText.find(p.m_name);
if (i != std::string::npos && i < idx)
{
if (p.m_isRedundant) {
type = RoadShieldType::Hidden;
} else {
type = p.m_type;
}
idx = i;
}
}
}
return {type, rawText};
}
private:
HighwayClass const m_highwayClass;
ShieldTypes const m_types;
RoadShieldType const m_defaultType;
};
uint16_t constexpr kAnyHigherRoadNumber = std::numeric_limits<uint16_t>::max(); uint16_t constexpr kAnyHigherRoadNumber = std::numeric_limits<uint16_t>::max();
// Matches by a list of numeric ranges (a first matching range is used). // Matches by a list of numeric ranges (a first matching range is used).
@@ -354,7 +422,7 @@ public:
, m_types(std::move(types)) , m_types(std::move(types))
{} {}
RoadShield ParseRoadShield(std::string_view rawText) const override RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
{ {
if (rawText.size() > kMaxRoadShieldBytesSize) if (rawText.size() > kMaxRoadShieldBytesSize)
return RoadShield(); return RoadShield();
@@ -403,7 +471,7 @@ public:
, m_defaultType(defaultType) , m_defaultType(defaultType)
{} {}
RoadShield ParseRoadShield(std::string_view rawText) const override RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
{ {
uint32_t constexpr kMaxRoadShieldSymbolsSize = 4 * kMaxRoadShieldBytesSize; uint32_t constexpr kMaxRoadShieldSymbolsSize = 4 * kMaxRoadShieldBytesSize;
@@ -429,14 +497,15 @@ private:
// Implementations of "ref" parses for some countries. // Implementations of "ref" parses for some countries.
class AustriaRoadShieldParser : public SimpleRoadShieldParser class AustriaRoadShieldParser : public HighwayClassRoadShieldParser
{ {
public: public:
explicit AustriaRoadShieldParser(std::string const & baseRoadNumber) explicit AustriaRoadShieldParser(std::string const & baseRoadNumber, HighwayClass const & highwayClass)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Blue_Bordered}, : HighwayClassRoadShieldParser(baseRoadNumber, highwayClass,
{"S", RoadShieldType::Generic_Blue_Bordered}, {{"A", HighwayClass::Motorway, RoadShieldType::Generic_Blue_Bordered},
{"B", RoadShieldType::Generic_Blue}, {"S", HighwayClass::Trunk, RoadShieldType::Generic_Blue_Bordered},
{"L", RoadShieldType::Generic_Pill_White_Bordered}}) {"B", HighwayClass::Primary, RoadShieldType::Generic_Blue},
{"L", HighwayClass::Secondary, RoadShieldType::Generic_Pill_White_Bordered}})
{} {}
}; };
@@ -454,7 +523,7 @@ class GreeceRoadShieldParser : public SimpleRoadShieldParser
public: public:
explicit GreeceRoadShieldParser(std::string const & baseRoadNumber) explicit GreeceRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, : SimpleRoadShieldParser(baseRoadNumber,
{{"Α", RoadShieldType::Generic_Green}, {"Ε", RoadShieldType::Generic_Blue}}) {{"Α", RoadShieldType::Highway_Hexagon_Green}, {"Ε", RoadShieldType::Generic_Blue}})
{} {}
}; };
@@ -480,6 +549,23 @@ public:
{} {}
}; };
class TurkeyRoadShieldParser : public SimpleRoadShieldParser
{
public:
explicit TurkeyRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"O", RoadShieldType::Highway_Hexagon_Turkey},
{"D", RoadShieldType::Generic_Blue}})
{}
};
class HungaryRoadShieldParser : public SimpleRoadShieldParser
{
public:
explicit HungaryRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"M", RoadShieldType::Hungary_Blue}}, RoadShieldType::Hungary_Green)
{}
};
class LativaRoadShieldParser : public SimpleRoadShieldParser class LativaRoadShieldParser : public SimpleRoadShieldParser
{ {
public: public:
@@ -524,7 +610,7 @@ class SerbiaRoadShieldParser : public SimpleRoadShieldParser
{ {
public: public:
explicit SerbiaRoadShieldParser(std::string const & baseRoadNumber) explicit SerbiaRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Green}}) : SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Highway_Hexagon_Green}})
{} {}
}; };
@@ -540,7 +626,7 @@ class SloveniaRoadShieldParser : public SimpleRoadShieldParser
{ {
public: public:
explicit SloveniaRoadShieldParser(std::string const & baseRoadNumber) explicit SloveniaRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Green}}) : SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Highway_Hexagon_Green}})
{} {}
}; };
@@ -548,7 +634,7 @@ class SwitzerlandRoadShieldParser : public SimpleRoadShieldParser
{ {
public: public:
explicit SwitzerlandRoadShieldParser(std::string const & baseRoadNumber) explicit SwitzerlandRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Red}}) : SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Highway_Hexagon_Red}})
{} {}
}; };
@@ -556,7 +642,7 @@ class LiechtensteinRoadShieldParser : public SimpleRoadShieldParser
{ {
public: public:
explicit LiechtensteinRoadShieldParser(std::string const & baseRoadNumber) explicit LiechtensteinRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Red}}) : SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Highway_Hexagon_Red}})
{} {}
}; };
@@ -576,11 +662,16 @@ public:
{} {}
}; };
class UKRoadShieldParser : public SimpleRoadShieldParser class UKRoadShieldParser : public HighwayClassRoadShieldParser
{ {
public: public:
explicit UKRoadShieldParser(std::string const & baseRoadNumber) explicit UKRoadShieldParser(std::string const & baseRoadNumber, HighwayClass const & highwayClass)
: SimpleRoadShieldParser(baseRoadNumber, {{"M", RoadShieldType::Generic_Blue}, {"A", RoadShieldType::UK_Highway}}) : HighwayClassRoadShieldParser(baseRoadNumber, highwayClass,
{{"M", HighwayClass::Motorway, RoadShieldType::Generic_Blue, true},
{"E", HighwayClass::Motorway, RoadShieldType::Hidden},
{"A", HighwayClass::Trunk, RoadShieldType::UK_Highway, true},
{"A", HighwayClass::Primary, RoadShieldType::Generic_White_Bordered},
{"B", HighwayClass::Secondary, RoadShieldType::Generic_White_Bordered}})
{} {}
}; };
@@ -596,14 +687,17 @@ public:
{} {}
}; };
class GermanyRoadShieldParser : public SimpleRoadShieldParser class GermanyRoadShieldParser : public HighwayClassRoadShieldParser
{ {
public: public:
explicit GermanyRoadShieldParser(std::string const & baseRoadNumber) explicit GermanyRoadShieldParser(std::string const & baseRoadNumber, HighwayClass const & highwayClass)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Blue}, : HighwayClassRoadShieldParser(baseRoadNumber, highwayClass,
{"B", RoadShieldType::Generic_Orange_Bordered}, {{"A", HighwayClass::Motorway, RoadShieldType::Highway_Hexagon_Blue},
{"L", RoadShieldType::Generic_White_Bordered}, {"D", HighwayClass::Motorway, RoadShieldType::Hidden},
{"K", RoadShieldType::Generic_White_Bordered}}) {"B", HighwayClass::Trunk, RoadShieldType::Generic_Orange_Bordered},
{"B", HighwayClass::Primary, RoadShieldType::Generic_Orange_Bordered},
{"L", HighwayClass::Secondary, RoadShieldType::Generic_White_Bordered},
{"K", HighwayClass::Secondary, RoadShieldType::Generic_White_Bordered}})
{} {}
}; };
@@ -710,7 +804,7 @@ class MexicoRoadShieldParser : public RoadShieldParser
public: public:
explicit MexicoRoadShieldParser(std::string const & baseRoadNumber) : RoadShieldParser(baseRoadNumber) {} explicit MexicoRoadShieldParser(std::string const & baseRoadNumber) : RoadShieldParser(baseRoadNumber) {}
RoadShield ParseRoadShield(std::string_view rawText) const override RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
{ {
std::string shieldText(rawText); std::string shieldText(rawText);
@@ -753,6 +847,10 @@ RoadShieldsSetT GetRoadShields(FeatureType & f)
if (ref.empty()) if (ref.empty())
return {}; return {};
auto const & highwayClass = ftypes::GetHighwayClass(feature::TypesHolder(f));
if (highwayClass == HighwayClass::Undefined)
return {};
// Find out country name. // Find out country name.
std::string mwmName = f.GetID().GetMwmName(); std::string mwmName = f.GetID().GetMwmName();
ASSERT(!mwmName.empty(), (f.GetID())); ASSERT(!mwmName.empty(), (f.GetID()));
@@ -761,19 +859,19 @@ RoadShieldsSetT GetRoadShields(FeatureType & f)
if (underlinePos != std::string::npos) if (underlinePos != std::string::npos)
mwmName = mwmName.substr(0, underlinePos); mwmName = mwmName.substr(0, underlinePos);
return GetRoadShields(mwmName, ref); return GetRoadShields(mwmName, ref, highwayClass);
} }
RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const & roadNumber) RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const & roadNumber, HighwayClass const & highwayClass)
{ {
if (mwmName == "US") if (mwmName == "US")
return USRoadShieldParser(roadNumber).GetRoadShields(); return USRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "UK") if (mwmName == "UK")
return UKRoadShieldParser(roadNumber).GetRoadShields(); return UKRoadShieldParser(roadNumber, highwayClass).GetRoadShields();
if (mwmName == "India") if (mwmName == "India")
return IndiaRoadShieldParser(roadNumber).GetRoadShields(); return IndiaRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Austria") if (mwmName == "Austria")
return AustriaRoadShieldParser(roadNumber).GetRoadShields(); return AustriaRoadShieldParser(roadNumber, highwayClass).GetRoadShields();
if (mwmName == "Belgium") if (mwmName == "Belgium")
return BelgiumRoadShieldParser(roadNumber).GetRoadShields(); return BelgiumRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Greece") if (mwmName == "Greece")
@@ -782,6 +880,10 @@ RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const &
return IrelandRoadShieldParser(roadNumber).GetRoadShields(); return IrelandRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Italy") if (mwmName == "Italy")
return ItalyRoadShieldParser(roadNumber).GetRoadShields(); return ItalyRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Turkey")
return TurkeyRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Hungary")
return HungaryRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Lativa") if (mwmName == "Lativa")
return LativaRoadShieldParser(roadNumber).GetRoadShields(); return LativaRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Moldova") if (mwmName == "Moldova")
@@ -805,7 +907,7 @@ RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const &
if (mwmName == "France") if (mwmName == "France")
return FranceRoadShieldParser(roadNumber).GetRoadShields(); return FranceRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Germany") if (mwmName == "Germany")
return GermanyRoadShieldParser(roadNumber).GetRoadShields(); return GermanyRoadShieldParser(roadNumber, highwayClass).GetRoadShields();
if (mwmName == "Spain") if (mwmName == "Spain")
return SpainRoadShieldParser(roadNumber).GetRoadShields(); return SpainRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Ukraine") if (mwmName == "Ukraine")
@@ -874,10 +976,16 @@ std::string DebugPrint(RoadShieldType shieldType)
case RoadShieldType::Generic_Pill_Blue_Bordered: return "blue pill bordered"; case RoadShieldType::Generic_Pill_Blue_Bordered: return "blue pill bordered";
case RoadShieldType::Generic_Pill_Red_Bordered: return "red pill bordered"; case RoadShieldType::Generic_Pill_Red_Bordered: return "red pill bordered";
case RoadShieldType::Generic_Pill_Orange_Bordered: return "orange pill bordered"; case RoadShieldType::Generic_Pill_Orange_Bordered: return "orange pill bordered";
case RoadShieldType::Highway_Hexagon_Green: return "highway hexagon green";
case RoadShieldType::Highway_Hexagon_Blue: return "highway hexagon blue";
case RoadShieldType::Highway_Hexagon_Red: return "highway hexagon red";
case RoadShieldType::Highway_Hexagon_Turkey: return "highway hexagon turkey";
case RoadShieldType::US_Interstate: return "US interstate"; case RoadShieldType::US_Interstate: return "US interstate";
case RoadShieldType::US_Highway: return "US highway"; case RoadShieldType::US_Highway: return "US highway";
case RoadShieldType::UK_Highway: return "UK highway"; case RoadShieldType::UK_Highway: return "UK highway";
case RoadShieldType::Italy_Autostrada: return "Italy autostrada"; case RoadShieldType::Italy_Autostrada: return "Italy autostrada";
case RoadShieldType::Hungary_Green: return "hungary green";
case RoadShieldType::Hungary_Blue: return "hungary blue";
case RoadShieldType::Hidden: return "hidden"; case RoadShieldType::Hidden: return "hidden";
case RoadShieldType::Count: CHECK(false, ("RoadShieldType::Count is not to be used as a type")); case RoadShieldType::Count: CHECK(false, ("RoadShieldType::Count is not to be used as a type"));
} }

View File

@@ -1,6 +1,7 @@
#pragma once #pragma once
#include "indexer/feature.hpp" #include "indexer/feature.hpp"
#include "indexer/ftypes_matcher.hpp"
#include "geometry/rect2d.hpp" #include "geometry/rect2d.hpp"
@@ -33,10 +34,16 @@ enum class RoadShieldType
Generic_Pill_Blue_Bordered, Generic_Pill_Blue_Bordered,
Generic_Pill_Red_Bordered, Generic_Pill_Red_Bordered,
Generic_Pill_Orange_Bordered, Generic_Pill_Orange_Bordered,
Highway_Hexagon_Green,
Highway_Hexagon_Blue,
Highway_Hexagon_Red,
Highway_Hexagon_Turkey,
US_Interstate, US_Interstate,
US_Highway, US_Highway,
UK_Highway, UK_Highway,
Italy_Autostrada, Italy_Autostrada,
Hungary_Green,
Hungary_Blue,
Hidden, Hidden,
Count Count
}; };
@@ -75,7 +82,7 @@ struct RoadShield
// Use specific country road shield styles based on mwm feature belongs to. // Use specific country road shield styles based on mwm feature belongs to.
using RoadShieldsSetT = buffer_vector<RoadShield, 2>; using RoadShieldsSetT = buffer_vector<RoadShield, 2>;
RoadShieldsSetT GetRoadShields(FeatureType & f); RoadShieldsSetT GetRoadShields(FeatureType & f);
RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const & roadNumber); RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const & roadNumber, HighwayClass const & highwayClass);
// Simple parsing without specific country styles. // Simple parsing without specific country styles.
RoadShieldsSetT GetRoadShields(std::string const & rawRoadNumber); RoadShieldsSetT GetRoadShields(std::string const & rawRoadNumber);

View File

@@ -11,6 +11,7 @@
#include "base/assert.hpp" #include "base/assert.hpp"
#include "base/buffer_vector.hpp" #include "base/buffer_vector.hpp"
#include <execution>
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
@@ -117,27 +118,31 @@ public:
template <class FnT> template <class FnT>
void ForEachEnter(FnT && fn) const void ForEachEnter(FnT && fn) const
{ {
for (auto const & [key, transit] : m_transitions) std::for_each(std::execution::par_unseq, m_transitions.begin(), m_transitions.end(), [&](auto const & pair)
{ {
auto const & [key, transit] = pair;
if (transit.m_forwardIsEnter) if (transit.m_forwardIsEnter)
fn(transit.m_enterIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, true)); fn(transit.m_enterIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, true));
if (!transit.m_oneWay && !transit.m_forwardIsEnter) if (!transit.m_oneWay && !transit.m_forwardIsEnter)
fn(transit.m_enterIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, false)); fn(transit.m_enterIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, false));
} });
} }
template <class FnT> template <class FnT>
void ForEachExit(FnT && fn) const void ForEachExit(FnT && fn) const
{ {
for (auto const & [key, transit] : m_transitions) std::for_each(std::execution::par_unseq, m_transitions.begin(), m_transitions.end(), [&](auto const & pair)
{ {
auto const & [key, transit] = pair;
if (!transit.m_forwardIsEnter) if (!transit.m_forwardIsEnter)
fn(transit.m_exitIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, true)); fn(transit.m_exitIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, true));
if (!transit.m_oneWay && transit.m_forwardIsEnter) if (!transit.m_oneWay && transit.m_forwardIsEnter)
fn(transit.m_exitIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, false)); fn(transit.m_exitIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, false));
} });
} }
void GetOutgoingEdgeList(Segment const & segment, EdgeListT & edges) const void GetOutgoingEdgeList(Segment const & segment, EdgeListT & edges) const

View File

@@ -4,16 +4,14 @@
#include "routing/routing_options.hpp" #include "routing/routing_options.hpp"
#include "routing/world_graph.hpp" #include "routing/world_graph.hpp"
#include "platform/settings.hpp"
#include "base/assert.hpp" #include "base/assert.hpp"
#include "base/checked_cast.hpp" #include "base/checked_cast.hpp"
#include "base/exception.hpp"
#include "base/timer.hpp" #include "base/timer.hpp"
#include "geometry/distance_on_sphere.hpp" #include "geometry/distance_on_sphere.hpp"
#include <algorithm> #include <algorithm>
#include <execution>
#include <limits> #include <limits>
#include <utility> #include <utility>
@@ -321,7 +319,9 @@ void IndexGraph::ReconstructJointSegment(astar::VertexData<JointSegment, RouteWe
auto const & weightTimeToParent = parentVertexData.m_realDistance; auto const & weightTimeToParent = parentVertexData.m_realDistance;
auto const & parentJoint = parentVertexData.m_vertex; auto const & parentJoint = parentVertexData.m_vertex;
for (size_t i = 0; i < firstChildren.size(); ++i)
auto const range = std::ranges::views::iota(0uz, firstChildren.size());
std::for_each(std::execution::par_unseq, range.begin(), range.end(), [&, this](auto const i)
{ {
auto const & firstChild = firstChildren[i]; auto const & firstChild = firstChildren[i];
auto const lastPointId = lastPointIds[i]; auto const lastPointId = lastPointIds[i];
@@ -335,22 +335,21 @@ void IndexGraph::ReconstructJointSegment(astar::VertexData<JointSegment, RouteWe
{ return currentPointId < lastPointId ? pointId + 1 : pointId - 1; }; { return currentPointId < lastPointId ? pointId + 1 : pointId - 1; };
if (IsAccessNoForSure(firstChild.GetFeatureId(), weightTimeToParent, true /* useAccessConditional */)) if (IsAccessNoForSure(firstChild.GetFeatureId(), weightTimeToParent, true /* useAccessConditional */))
continue; return;
if (IsAccessNoForSure(parent.GetRoadPoint(isOutgoing), weightTimeToParent, true /* useAccessConditional */)) if (IsAccessNoForSure(parent.GetRoadPoint(isOutgoing), weightTimeToParent, true /* useAccessConditional */))
continue; return;
if (IsUTurn(parent, firstChild) && IsUTurnAndRestricted(parent, firstChild, isOutgoing)) if (IsUTurn(parent, firstChild) && IsUTurnAndRestricted(parent, firstChild, isOutgoing))
continue; return;
if (IsRestricted(parentJoint, parent.GetFeatureId(), firstChild.GetFeatureId(), isOutgoing, parents)) if (IsRestricted(parentJoint, parent.GetFeatureId(), firstChild.GetFeatureId(), isOutgoing, parents))
continue; return;
RouteWeight summaryWeight; RouteWeight summaryWeight;
// Check current JointSegment for bad road access between segments. // Check current JointSegment for bad road access between segments.
RoadPoint rp = firstChild.GetRoadPoint(isOutgoing); RoadPoint rp = firstChild.GetRoadPoint(isOutgoing);
uint32_t start = currentPointId; uint32_t start = currentPointId;
bool noRoadAccess = false;
do do
{ {
// This is optimization: we calculate accesses of road points before calculating weight of // This is optimization: we calculate accesses of road points before calculating weight of
@@ -360,19 +359,13 @@ void IndexGraph::ReconstructJointSegment(astar::VertexData<JointSegment, RouteWe
// until this |rp|. But we assume that segments have small length and inaccuracy will not // until this |rp|. But we assume that segments have small length and inaccuracy will not
// affect user. // affect user.
if (IsAccessNoForSure(rp, weightTimeToParent, true /* useAccessConditional */)) if (IsAccessNoForSure(rp, weightTimeToParent, true /* useAccessConditional */))
{ return;
noRoadAccess = true;
break;
}
start = increment(start); start = increment(start);
rp.SetPointId(start); rp.SetPointId(start);
} }
while (start != lastPointId); while (start != lastPointId);
if (noRoadAccess)
continue;
bool forward = currentPointId < lastPointId; bool forward = currentPointId < lastPointId;
Segment current = firstChild; Segment current = firstChild;
Segment prev = parent; Segment prev = parent;
@@ -396,7 +389,7 @@ void IndexGraph::ReconstructJointSegment(astar::VertexData<JointSegment, RouteWe
jointEdges.emplace_back(isOutgoing ? JointSegment(firstChild, prev) : JointSegment(prev, firstChild), jointEdges.emplace_back(isOutgoing ? JointSegment(firstChild, prev) : JointSegment(prev, firstChild),
summaryWeight); summaryWeight);
} });
} }
void IndexGraph::GetNeighboringEdge(astar::VertexData<Segment, RouteWeight> const & fromVertexData, Segment const & to, void IndexGraph::GetNeighboringEdge(astar::VertexData<Segment, RouteWeight> const & fromVertexData, Segment const & to,

View File

@@ -18,8 +18,6 @@
#include "indexer/feature_meta.hpp" #include "indexer/feature_meta.hpp"
#include "geometry/point2d.hpp"
#include <memory> #include <memory>
#include <optional> #include <optional>
#include <unordered_map> #include <unordered_map>

View File

@@ -13,6 +13,7 @@
#include "3party/skarupke/bytell_hash_map.hpp" // needed despite of IDE warning #include "3party/skarupke/bytell_hash_map.hpp" // needed despite of IDE warning
#include <algorithm> #include <algorithm>
#include <execution>
#include <map> #include <map>
#include <optional> #include <optional>
#include <queue> #include <queue>
@@ -474,7 +475,8 @@ void IndexGraphStarterJoints<Graph>::GetEdgeList(astar::VertexData<Vertex, Weigh
CHECK(it != m_savedWeight.cend(), ("Can not find weight for:", vertex)); CHECK(it != m_savedWeight.cend(), ("Can not find weight for:", vertex));
Weight const weight = it->second; Weight const weight = it->second;
for (size_t i = 0; i < edges.size(); ++i) auto const range = std::ranges::views::iota(0uz, edges.size());
std::for_each(std::execution::par_unseq, range.begin(), range.end(), [&, this](auto const i)
{ {
// Saving weight of current edges for returning in the next iterations. // Saving weight of current edges for returning in the next iterations.
auto & w = edges[i].GetWeight(); auto & w = edges[i].GetWeight();
@@ -490,7 +492,7 @@ void IndexGraphStarterJoints<Graph>::GetEdgeList(astar::VertexData<Vertex, Weigh
// |parentWeights[]|. So the weight of an ith edge is a cached "weight of parent JointSegment" + // |parentWeights[]|. So the weight of an ith edge is a cached "weight of parent JointSegment" +
// "parentWeight[i]". // "parentWeight[i]".
w = weight + parentWeights[i]; w = weight + parentWeights[i];
} });
// Delete useless weight of parent JointSegment. // Delete useless weight of parent JointSegment.
m_savedWeight.erase(vertex); m_savedWeight.erase(vertex);
@@ -498,8 +500,9 @@ void IndexGraphStarterJoints<Graph>::GetEdgeList(astar::VertexData<Vertex, Weigh
else else
{ {
// This needs for correct weights calculation of FakeJointSegments during forward A* search. // This needs for correct weights calculation of FakeJointSegments during forward A* search.
for (size_t i = firstFakeId; i < edges.size(); ++i) auto const range = std::ranges::views::iota(firstFakeId, edges.size());
edges[i].GetWeight() += parentWeights[i]; std::for_each(std::execution::par_unseq, range.begin(), range.end(),
[&edges, &parentWeights](auto const i) { edges[i].GetWeight() += parentWeights[i]; });
} }
auto const vertexMwmId = vertex.GetMwmId(); auto const vertexMwmId = vertex.GetMwmId();
@@ -510,12 +513,12 @@ void IndexGraphStarterJoints<Graph>::GetEdgeList(astar::VertexData<Vertex, Weigh
/// a weight of v1->v2 transition moving backward (v2 ingoing). This is impossible in current (m_savedWeight) /// a weight of v1->v2 transition moving backward (v2 ingoing). This is impossible in current (m_savedWeight)
/// logic, so I moved Cross-MWM penalty into separate block here after _all_ weights calculations. /// logic, so I moved Cross-MWM penalty into separate block here after _all_ weights calculations.
for (auto & e : edges) std::for_each(std::execution::par_unseq, edges.begin(), edges.end(), [&, this](auto & e)
{ {
auto const targetMwmId = e.GetTarget().GetMwmId(); auto const targetMwmId = e.GetTarget().GetMwmId();
if (targetMwmId != kFakeNumMwmId && vertexMwmId != targetMwmId) if (targetMwmId != kFakeNumMwmId && vertexMwmId != targetMwmId)
e.GetWeight() += m_graph.GetCrossBorderPenalty(vertexMwmId, targetMwmId); e.GetWeight() += m_graph.GetCrossBorderPenalty(vertexMwmId, targetMwmId);
} });
} }
} }

View File

@@ -14,7 +14,7 @@ using namespace ftypes;
bool IsHighway(HighwayClass hwClass, bool isLink) bool IsHighway(HighwayClass hwClass, bool isLink)
{ {
return (hwClass == HighwayClass::Trunk || hwClass == HighwayClass::Primary) && !isLink; return (hwClass == HighwayClass::Motorway || hwClass == HighwayClass::Trunk || hwClass == HighwayClass::Primary) && !isLink;
} }
bool IsSmallRoad(HighwayClass hwClass) bool IsSmallRoad(HighwayClass hwClass)
@@ -102,6 +102,7 @@ double CalcEstimatedTimeToPass(double const distanceMeters, HighwayClass const h
double speedKmph = 0; double speedKmph = 0;
switch (highwayClass) switch (highwayClass)
{ {
case HighwayClass::Motorway: speedKmph = 100.0; break;
case HighwayClass::Trunk: speedKmph = 100.0; break; case HighwayClass::Trunk: speedKmph = 100.0; break;
case HighwayClass::Primary: speedKmph = 70.0; break; case HighwayClass::Primary: speedKmph = 70.0; break;
case HighwayClass::Secondary: speedKmph = 70.0; break; case HighwayClass::Secondary: speedKmph = 70.0; break;

View File

@@ -6,7 +6,7 @@
#define MWM_GEOLOCATION_SERVER "" #define MWM_GEOLOCATION_SERVER ""
#define DIFF_LIST_URL "" #define DIFF_LIST_URL ""
#define METASERVER_URL "https://cdn-us-1.comaps.app/servers" #define METASERVER_URL "https://cdn-us-1.comaps.app/servers"
#define DEFAULT_URLS_JSON "[ \"https://cdn-us-2.comaps.tech/\", \"https://comaps.firewall-gateway.de/\", \"https://cdn-fi-1.comaps.app/\", \"https://comaps-cdn.s3.cloud.ru/\" ]" #define DEFAULT_URLS_JSON "[ \"https://cdn-us-2.comaps.tech/\", \"https://comaps.firewall-gateway.de/\", \"https://cdn-fi-1.comaps.app/\", \"https://comaps-cdn.s3-website.cloud.ru/\" ]"
#define DEFAULT_CONNECTION_CHECK_IP "151.101.195.52" // For now the IP of comaps.app (Fastly CDN) #define DEFAULT_CONNECTION_CHECK_IP "151.101.195.52" // For now the IP of comaps.app (Fastly CDN)
#define TRAFFIC_DATA_BASE_URL "" #define TRAFFIC_DATA_BASE_URL ""
#define USER_BINDING_PKCS12 "" #define USER_BINDING_PKCS12 ""

View File

@@ -21,6 +21,7 @@ openlr::FunctionalRoadClass HighwayClassToFunctionalRoadClass(ftypes::HighwayCla
{ {
switch (hwClass) switch (hwClass)
{ {
case ftypes::HighwayClass::Motorway: return openlr::FunctionalRoadClass::FRC0;
case ftypes::HighwayClass::Trunk: return openlr::FunctionalRoadClass::FRC0; case ftypes::HighwayClass::Trunk: return openlr::FunctionalRoadClass::FRC0;
case ftypes::HighwayClass::Primary: return openlr::FunctionalRoadClass::FRC1; case ftypes::HighwayClass::Primary: return openlr::FunctionalRoadClass::FRC1;
case ftypes::HighwayClass::Secondary: return openlr::FunctionalRoadClass::FRC2; case ftypes::HighwayClass::Secondary: return openlr::FunctionalRoadClass::FRC2;
@@ -48,11 +49,10 @@ optional<Score> GetFrcScore(Graph::Edge const & e, FunctionalRoadClass functiona
switch (functionalRoadClass) switch (functionalRoadClass)
{ {
case FunctionalRoadClass::FRC0: case FunctionalRoadClass::FRC0:
// Note. HighwayClass::Trunk means motorway, motorway_link, trunk or trunk_link. return hwClass == HighwayClass::Motorway || hwClass == HighwayClass::Trunk ? optional<Score>(kMaxScoreForFrc) : nullopt;
return hwClass == HighwayClass::Trunk ? optional<Score>(kMaxScoreForFrc) : nullopt;
case FunctionalRoadClass::FRC1: case FunctionalRoadClass::FRC1:
return (hwClass == HighwayClass::Trunk || hwClass == HighwayClass::Primary) ? optional<Score>(kMaxScoreForFrc) return (HighwayClass::Motorway || hwClass == HighwayClass::Trunk || hwClass == HighwayClass::Primary) ? optional<Score>(kMaxScoreForFrc)
: nullopt; : nullopt;
case FunctionalRoadClass::FRC2: case FunctionalRoadClass::FRC2:

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