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
• Informationen zu Steckdosen an EV-Ladestationen
• Symbole für Sportzentren, Veranstaltungsorte, Massagesalons, Gästehäuser und einige stillgelegte Unternehmen
• Verbesserungen bei der Suche
• Behebung eines Absturzes bei der Suche
• Verbesserte Sprachführung während der Navigation (via OM)
• Verbesserte Sprachführung während der Navigation
Weitere Änderungen finden in unseren Codeberg-Versionshinweisen!

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -27,7 +27,7 @@
<!-- A dialog title, that warns a user that Precise Location is disabled and suggests to turn it on -->
<string name="limited_accuracy">精度有限</string>
<!-- A dialog text, that warns a user that Precise Location is disabled and suggests to turn it on -->
<string name="precise_location_is_disabled_long_text">为确保准确导航,请在设置中启用确切位置</string>
<string name="precise_location_is_disabled_long_text">为确保导航准确,请在设置中启用 \"精确定位\"</string>
<!-- View and button titles for accessibility -->
<string name="zoom_to_country">在地图上显示</string>
<!-- Message to display at the center of the screen when the country download has failed -->

View File

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

View File

@@ -975,7 +975,7 @@
<string name="type.shop.books">Bokhandel</string>
<string name="type.shop.butcher">Slakter</string>
<string name="type.shop.cannabis">Cannabisbutikk</string>
<string name="type.shop.car">Bil butikk</string>
<string name="type.shop.car">Bilforhandler</string>
<string name="type.shop.car_parts">Bildeler</string>
<string name="type.shop.car_repair">Bilverksted</string>
<string name="type.shop.car_repair.tyres">Dekkreparasjon</string>
@@ -1353,4 +1353,14 @@
<string name="type.railway.narrow_gauge.bridge">Smalsporet jernbanebru</string>
<string name="type.railway.narrow_gauge.tunnel">Smalsporet jernbanetunnel</string>
<string name="type.leisure.slipway">Slipp</string>
<string name="type.post_office.post_partner">Post i butikk</string>
<string name="type.amenity.pub">Pub</string>
<string name="type.historic.monument">Monument</string>
<string name="type.man_made.crane">Kran</string>
<string name="type.military.bunker">Bunker</string>
<string name="type.railway.construction">Jernbanebygging</string>
<string name="type.railway.funicular.bridge">Kabelbanebru</string>
<string name="type.railway.funicular.tunnel">Kabelbanetunnel</string>
<string name="type.military">Militært</string>
<string name="type.landuse.education">Utdanningsinstitusjon</string>
</resources>

View File

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

View File

@@ -153,4 +153,5 @@
<string name="type.leisure.amusement_arcade">Arkadne igre</string>
<string name="type.amenity.charging_station.motorcar.small">Polnilno mesto za avtomobile</string>
<string name="type.amenity.childcare">Vrtec</string>
<string name="type.amenity.cinema">Kino</string>
</resources>

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -258,6 +258,10 @@
<include field="outdoor_seating" />
<include field="website_menu" />
</type>
<type id="amenity-boat_rental">
<include group="poi_internet" />
<include field="operator" />
</type>
<type id="amenity-bicycle_rental">
<include field="website" />
<include field="opening_hours" />
@@ -385,6 +389,34 @@
<type id="amenity-pharmacy" group="shop">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-buddhist" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-christian" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-hindu" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-jewish" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-muslim" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-shinto" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="amenity-place_of_worship-taoist" can_add="no">
<include group="poi_internet" />
</type>
<type id="amenity-place_of_worship">
<include group="poi_internet" />
</type>
@@ -1058,6 +1090,9 @@
<type id="shop-tea" group="shop">
<include group="poi_internet" />
</type>
<type id="shop-telecommunication" group="shop">
<include group="poi_internet" />
</type>
<type id="shop-trade" group="shop">
<include group="poi_internet" />
</type>
@@ -1105,6 +1140,25 @@
<include group="poi_internet" />
<include field="self_service" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="tourism-information-office" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="tourism-information-visitor_centre" can_add="no">
<include group="poi_internet" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="tourism-information-board" can_add="no">
<include field="name" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="tourism-information-map" can_add="no">
<include field="name" />
</type>
<!-- Can not be added because it is a complex type -->
<type id="tourism-information-guidepost" can_add="no">
</type>
<type id="tourism-information">
<include group="poi" />
</type>
@@ -1126,6 +1180,7 @@
<type id="amenity-bench" />
<type id="amenity-compressed_air" />
<type id="amenity-bbq" />
<type id="leisure-slipway" />
<type id="amenity-shelter">
<include field="name" />
</type>
@@ -1197,6 +1252,9 @@
<type id="amenity-social_facility">
<include group="poi_internet" />
</type>
<type id="amenity-payment_centre">
<include group="poi_internet" />
</type>
<type id="amenity-payment_terminal">
<include field="operator" />
<include field="level" />
@@ -1226,6 +1284,9 @@
<type id="amenity-money_transfer">
<include group="poi_internet" />
</type>
<type id="amenity-mobile_money_agent">
<include group="poi_internet" />
</type>
<type id="amenity-vehicle_inspection">
<include group="poi_internet" />
</type>
@@ -1288,6 +1349,9 @@
<include group="poi" />
<include field="operator" />
</type>
<type id="leisure-indoor_play">
<include group="poi_internet" />
</type>
<type id="leisure-fitness_centre">
<include group="poi_internet" />
</type>
@@ -1456,19 +1520,6 @@
<tag k="service" v="tyres" />
<include group="poi_internet" />
</type>
<type id="tourism-information-office">
<tag k="tourism" v="information" />
<tag k="information" v="board" />
<include group="poi_internet" />
</type>
<type id="tourism-information-board">
<tag k="tourism" v="information" />
<tag k="information" v="board" />
</type>
<type id="tourism-information-map">
<tag k="tourism" v="information" />
<tag k="information" v="board" />
</type>
<type id="leisure-sports_centre-climbing">
<tag k="leisure" v="sports_centre" />
<tag k="sport" v="climbing" />

View File

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

View File

@@ -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 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>
<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>

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 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>
<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>

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=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],
{fill-opacity: 0.07; fill-color: @indigenous_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? */

View File

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

View File

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

View File

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

View File

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

View File

@@ -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 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>
<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>

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 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>
<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>

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-guardhouse # area z14- (also has icon z16-, caption(optional) z18-)
building-has_parts # area z14- (also has caption z17-)
building-train_station # area z14- (also has caption z17-)
building-train_station # area z14- (also has icon z17-, caption(optional) z17-)
=== 130
piste:type-connection # line z15-

View File

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

View File

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

View File

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

View File

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

View File

@@ -591,5 +591,5 @@
"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_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";

View File

@@ -662,7 +662,7 @@
"type.landuse.religious" = "Religiøst område";
"type.landuse.commercial" = "Næringsområde";
"type.landuse.construction" = "Byggeplass";
"type.landuse.education" = "Educational Facility";
"type.landuse.education" = "Utdanningsinstitusjon";
"type.landuse.farmland" = "Jordbruksområde";
"type.landuse.farmyard" = "Bondegård";
"type.landuse.field" = "Field";
@@ -760,7 +760,7 @@
"type.man_made.water_well.drinking_water_no" = "Brønn";
"type.man_made.windmill" = "Vindmølle";
"type.man_made.works" = "Industrial Works";
"type.military" = "Military";
"type.military" = "Militært";
"type.military.bunker" = "Bunker";
"type.mountain_pass" = "Fjellpass";
"type.natural" = "Natur";
@@ -892,12 +892,12 @@
"type.railway.abandoned" = "Nedlagt jernbane";
"type.railway.abandoned.bridge" = "Nedlagt jernbanebru";
"type.railway.abandoned.tunnel" = "Nedlagt jernbanetunnel";
"type.railway.construction" = "Railway Construction";
"type.railway.construction" = "Jernbanebygging";
"type.railway.crossing" = "Jernbaneovergang";
"type.railway.disused" = "Ubenyttet jernbane";
"type.railway.funicular" = "Kabelbane";
"type.railway.funicular.bridge" = "Funicular Bridge";
"type.railway.funicular.tunnel" = "Funicular Tunnel";
"type.railway.funicular.bridge" = "Kabelbanebru";
"type.railway.funicular.tunnel" = "Kabelbanetunnel";
"type.railway.halt" = "Togstasjon";
"type.railway.level_crossing" = "Planovergang";
"type.railway.light_rail" = "Light Rail";
@@ -1198,7 +1198,7 @@
"type.shop.books" = "Bokhandel";
"type.shop.butcher" = "Slakter";
"type.shop.cannabis" = "Cannabisbutikk";
"type.shop.car" = "Bil butikk";
"type.shop.car" = "Bilforhandler";
"type.shop.car_parts" = "Bildeler";
"type.shop.car_repair" = "Bilverksted";
"type.shop.car_repair.tyres" = "Dekkreparasjon";
@@ -1467,7 +1467,7 @@
"type.sport.diving" = "High Diving";
"type.highway.ladder" = "Stige";
"type.natural.wetland.swamp" = "Sumpskog";
"type.man_made.crane" = "Crane";
"type.man_made.crane" = "Kran";
"type.natural.wetland.saltmarsh" = "Salt Marsh";
"type.natural.wetland.mangrove" = "Mangrove";
"type.barrier.guard_rail" = "Autovern";
@@ -1482,7 +1482,7 @@
"type.amenity.luggage_locker" = "Bagasjeoppbevaring";
"type.amenity.ranger_station" = "Ranger Station";
"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.amenity.animal_shelter" = "Dyrehjem";
"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ă";
/* 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 */
"follow_us" = "Urmăriți-ne și contactați-ne";
"follow_us" = "Conectează-te cu noi";
/* Alert text */
"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_maplanguage_title" = "Map Language";
"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 %@";
"existence_confirmed_time_ago" = "Existence confirmed %@";

View File

@@ -1471,7 +1471,7 @@
"type.natural.wetland.saltmarsh" = "Mlaștină sărată";
"type.natural.wetland.mangrove" = "Pădure de mangrove";
"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.saltmarsh.tidal" = "Mlaștină sărată de maree";
"type.natural.wetland.reedbed" = "Stufăriș";

View File

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

View File

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

View File

@@ -12,6 +12,8 @@
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>Noll bokmärken</string>
<key>one</key>
<string>%d bokmärke</string>
<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)
{
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)
{
ASSERT(IsSymbolRoadShield(shield), ());
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";
else if (shield.m_type == ftypes::RoadShieldType::US_Highway)
result = shield.m_name.size() <= 2 ? "shield-us-hw-thin" : "shield-us-hw-wide";
else if (shield.m_type == ftypes::RoadShieldType::Italy_Autostrada)
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
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_Red_Bordered, kRoadShieldWhiteTextColor},
{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_Highway, kRoadShieldBlackTextColor},
{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)
return df::GetColorConstant(*cl);

View File

@@ -353,7 +353,7 @@ void RuleDrawer::ProcessLineStyle(FeatureType & f, Stylist const & s, TInsertSha
df::RoadClass m_roadClass;
};
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::LivingStreet, HighwayClass::Service, HighwayClass::ServiceMinor},
kRoadClass2ZoomLevel,

View File

@@ -142,7 +142,7 @@ void Notes::CreateNote(ms::LatLon const & latLon, std::string const & text)
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)
{ 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.
@@ -155,61 +155,56 @@ void Notes::CreateNote(ms::LatLon const & latLon, std::string const & text)
void Notes::Upload(osm::OsmOAuth const & auth)
{
// Capture self to keep it from destruction until this thread is done.
auto const self = shared_from_this();
std::unique_lock<std::mutex> uploadingNotesLock(m_uploadingNotesMutex, std::defer_lock);
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);
// 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
{
try
{
ulock.unlock();
auto const id = api.CreateNote(notes.front().m_point, notes.front().m_note);
ulock.lock();
LOG(LINFO, ("A note uploaded with id", id));
}
catch (osm::ServerApi06::ServerApi06Exception const & e)
{
LOG(LERROR, ("Can't upload note.", e.Msg()));
// 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);
dataAccessLock.unlock();
auto const id = api.CreateNote(m_notes.front().m_point, m_notes.front().m_note);
dataAccessLock.lock();
LOG(LINFO, ("A note uploaded with id", id));
}
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.
return;
}
};
static auto future = std::async(std::launch::async, doUpload);
auto const status = future.wait_for(std::chrono::milliseconds(0));
if (status == std::future_status::ready)
future = std::async(std::launch::async, doUpload);
m_notes.pop_front();
--size;
++m_uploadedNotesCount;
Save(m_fileName, m_notes, m_uploadedNotesCount);
}
}
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;
}
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();
}
size_t Notes::UploadedNotesCount() const
{
std::lock_guard<std::mutex> g(m_mu);
std::lock_guard<std::mutex> g(m_dataAccessMutex);
return m_uploadedNotesCount;
}
} // namespace editor

View File

@@ -46,7 +46,8 @@ private:
explicit Notes(std::string const & 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.
// 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
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();
}
@@ -576,217 +576,165 @@ void Editor::UploadChanges(string const & oauthToken, ChangesetTags tags, Finish
if (m_notes->NotUploadedNotesCount())
m_notes->Upload(OsmOAuth::ServerAuth(oauthToken));
auto const features = m_features.Get();
if (!HaveMapEditsToUpload(*features))
if (!HaveMapEditsToUpload(*m_features.Get()))
{
LOG(LDEBUG, ("There are no local edits to upload."));
return;
}
auto upload = [this](string secret, ChangesetTags tags, FinishUploadCallback callback)
{
int uploadedFeaturesCount = 0, errorsCount = 0;
ChangesetWrapper changeset(secret, std::move(tags));
auto const features = m_features.Get();
std::unique_lock<std::mutex> uploadingEditsLock(m_uploadingEditsMutex, std::defer_lock);
if (!uploadingEditsLock.try_lock()) {
// Do not run more than one uploading task at a time.
LOG(LDEBUG, ("OSM edits upload is already running"));
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;
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;
// 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)
{
if (useNewEditor)
LOG(LDEBUG, ("New Editor used\n"));
switch (fti.m_status)
{
LOG(LDEBUG, ("New Editor used\n"));
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: // 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
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:
{
// 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);
std::list<JournalEntry> const & journal = fti.m_object.GetJournal().GetJournal();
ASSERT_EQUAL(feature.GetType(), XMLFeature::Type::Node,
("Linear and area features creation is not supported yet."));
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
{
auto const center = fti.m_object.GetMercator();
// Throws, see catch below.
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)
XMLFeature osmFeature = changeset.GetMatchingNodeFeatureFromOSM(objCreateData.mercator);
if (objCreateData.mercator == osmFeature.GetMercatorCenter())
{
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.
changeset.AddChangesetTag("info:merged_same_location", "yes");
feature = osmFeature;
mergeSameLocation = true;
}
else
{
LOG(LDEBUG, ("Create case: uploading patched feature", osmFeature));
changeset.AddChangesetTag("info:old_editor", "yes");
changeset.AddChangesetTag("info:features_merged", "yes");
changeset.Modify(osmFeature);
changeset.AddChangesetTag("info:feature_close_by", "yes");
}
}
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 &)
{
// 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);
}
catch (...)
{
// Pass network or other errors to outside exception handler.
throw;
}
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::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.
// 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);
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
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());
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;
}
ASSERT_EQUAL(feature.GetType(), XMLFeature::Type::Node,
("Linear and area features creation is not supported yet."));
try
{
auto const center = fti.m_object.GetMercator();
// Throws, see catch below.
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;
osmFeature.ApplyPatch(feature);
// Check to avoid uploading duplicates into OSM.
@@ -798,86 +746,129 @@ void Editor::UploadChanges(string const & oauthToken, ChangesetTags tags, Finish
}
else
{
LOG(LDEBUG, ("Uploading patched feature", osmFeature));
LOG(LDEBUG, ("Create case: uploading patched feature", osmFeature));
changeset.AddChangesetTag("info:old_editor", "yes");
changeset.AddChangesetTag("info:features_merged", "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;
}
catch (ChangesetWrapper::OsmObjectWasDeletedException const &)
{
// Object was never created by anyone else - it's safe to create it.
changeset.AddChangesetTag("info:old_editor", "yes");
changeset.Delete(GetMatchingFeatureFromOSM(changeset, *originalObjectPtr));
break;
changeset.Create(feature);
}
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;
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);
break;
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);
});
case FeatureStatus::Modified:
{
// Do not serialize feature's type to avoid breaking OSM data.
// 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)
{
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)
if (callback)
{
m_isUploadingNow = true;
GetPlatform().RunTask(Platform::Thread::Network, [upload = std::move(upload), oauthToken, tags = std::move(tags),
callback = std::move(callback)]()
{ upload(std::move(oauthToken), std::move(tags), std::move(callback)); });
UploadResult result = UploadResult::NothingToUpload;
if (uploadedFeaturesCount)
result = UploadResult::Success;
else if (errorsCount)
result = UploadResult::Error;
callback(result);
}
}

View File

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

View File

@@ -30,8 +30,8 @@ public:
m_map[c.GetTypeByPath({"route", "ferry"})] = 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_link"})] = HighwayClass::Trunk;
m_map[c.GetTypeByPath({"highway", "motorway"})] = HighwayClass::Motorway;
m_map[c.GetTypeByPath({"highway", "motorway_link"})] = HighwayClass::Motorway;
m_map[c.GetTypeByPath({"highway", "trunk"})] = 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::Transported: return "Transported";
case HighwayClass::Motorway: return "Motorway";
case HighwayClass::Trunk: return "Trunk";
case HighwayClass::Primary: return "Primary";
case HighwayClass::Secondary: return "Secondary";

View File

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

View File

@@ -107,7 +107,7 @@ UNIT_TEST(GetHighwayClassTest)
feature::TypesHolder types2;
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;
types3.Add(c.GetTypeByPath({"highway", "unclassified"}));

View File

@@ -94,7 +94,7 @@ class RoadShieldParser
public:
explicit RoadShieldParser(std::string const & baseRoadNumber) : m_baseRoadNumber(baseRoadNumber) {}
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
{
@@ -127,18 +127,20 @@ public:
RoadShieldsSetT GetRoadShields() const
{
RoadShieldsSetT result, defaultShields;
uint8_t index = 0;
strings::Tokenize(m_baseRoadNumber, ";", [&](std::string_view rawText)
{
++index;
RoadShield shield;
auto slashPos = rawText.find('/');
if (slashPos == std::string::npos)
{
shield = ParseRoadShield(rawText);
shield = ParseRoadShield(rawText, index);
}
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
// more specific than country's default shield type.
// E.g. "94" is set to Generic_Orange by Estonia parser, but then
@@ -176,7 +178,7 @@ class USRoadShieldParser : public RoadShieldParser
{
public:
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);
@@ -236,7 +238,7 @@ class IndiaRoadShieldParser : public RoadShieldParser
{
public:
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);
@@ -269,7 +271,7 @@ public:
, 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)
return RoadShield();
@@ -304,7 +306,7 @@ public:
, 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)
return RoadShield();
@@ -329,6 +331,72 @@ private:
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();
// Matches by a list of numeric ranges (a first matching range is used).
@@ -354,7 +422,7 @@ public:
, 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)
return RoadShield();
@@ -403,7 +471,7 @@ public:
, 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;
@@ -429,14 +497,15 @@ private:
// Implementations of "ref" parses for some countries.
class AustriaRoadShieldParser : public SimpleRoadShieldParser
class AustriaRoadShieldParser : public HighwayClassRoadShieldParser
{
public:
explicit AustriaRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Blue_Bordered},
{"S", RoadShieldType::Generic_Blue_Bordered},
{"B", RoadShieldType::Generic_Blue},
{"L", RoadShieldType::Generic_Pill_White_Bordered}})
explicit AustriaRoadShieldParser(std::string const & baseRoadNumber, HighwayClass const & highwayClass)
: HighwayClassRoadShieldParser(baseRoadNumber, highwayClass,
{{"A", HighwayClass::Motorway, RoadShieldType::Generic_Blue_Bordered},
{"S", HighwayClass::Trunk, RoadShieldType::Generic_Blue_Bordered},
{"B", HighwayClass::Primary, RoadShieldType::Generic_Blue},
{"L", HighwayClass::Secondary, RoadShieldType::Generic_Pill_White_Bordered}})
{}
};
@@ -454,7 +523,7 @@ class GreeceRoadShieldParser : public SimpleRoadShieldParser
public:
explicit GreeceRoadShieldParser(std::string const & 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
{
public:
@@ -524,7 +610,7 @@ class SerbiaRoadShieldParser : public SimpleRoadShieldParser
{
public:
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:
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:
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:
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:
explicit UKRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"M", RoadShieldType::Generic_Blue}, {"A", RoadShieldType::UK_Highway}})
explicit UKRoadShieldParser(std::string const & baseRoadNumber, HighwayClass const & highwayClass)
: 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:
explicit GermanyRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Blue},
{"B", RoadShieldType::Generic_Orange_Bordered},
{"L", RoadShieldType::Generic_White_Bordered},
{"K", RoadShieldType::Generic_White_Bordered}})
explicit GermanyRoadShieldParser(std::string const & baseRoadNumber, HighwayClass const & highwayClass)
: HighwayClassRoadShieldParser(baseRoadNumber, highwayClass,
{{"A", HighwayClass::Motorway, RoadShieldType::Highway_Hexagon_Blue},
{"D", HighwayClass::Motorway, RoadShieldType::Hidden},
{"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:
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);
@@ -753,6 +847,10 @@ RoadShieldsSetT GetRoadShields(FeatureType & f)
if (ref.empty())
return {};
auto const & highwayClass = ftypes::GetHighwayClass(feature::TypesHolder(f));
if (highwayClass == HighwayClass::Undefined)
return {};
// Find out country name.
std::string mwmName = f.GetID().GetMwmName();
ASSERT(!mwmName.empty(), (f.GetID()));
@@ -761,19 +859,19 @@ RoadShieldsSetT GetRoadShields(FeatureType & f)
if (underlinePos != std::string::npos)
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")
return USRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "UK")
return UKRoadShieldParser(roadNumber).GetRoadShields();
return UKRoadShieldParser(roadNumber, highwayClass).GetRoadShields();
if (mwmName == "India")
return IndiaRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Austria")
return AustriaRoadShieldParser(roadNumber).GetRoadShields();
return AustriaRoadShieldParser(roadNumber, highwayClass).GetRoadShields();
if (mwmName == "Belgium")
return BelgiumRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Greece")
@@ -782,6 +880,10 @@ RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const &
return IrelandRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Italy")
return ItalyRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Turkey")
return TurkeyRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Hungary")
return HungaryRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Lativa")
return LativaRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Moldova")
@@ -805,7 +907,7 @@ RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const &
if (mwmName == "France")
return FranceRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Germany")
return GermanyRoadShieldParser(roadNumber).GetRoadShields();
return GermanyRoadShieldParser(roadNumber, highwayClass).GetRoadShields();
if (mwmName == "Spain")
return SpainRoadShieldParser(roadNumber).GetRoadShields();
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_Red_Bordered: return "red 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_Highway: return "US highway";
case RoadShieldType::UK_Highway: return "UK highway";
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::Count: CHECK(false, ("RoadShieldType::Count is not to be used as a type"));
}

View File

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

View File

@@ -11,6 +11,7 @@
#include "base/assert.hpp"
#include "base/buffer_vector.hpp"
#include <execution>
#include <string>
#include <unordered_map>
#include <vector>
@@ -117,27 +118,31 @@ public:
template <class FnT>
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)
fn(transit.m_enterIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, true));
if (!transit.m_oneWay && !transit.m_forwardIsEnter)
fn(transit.m_enterIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, false));
}
});
}
template <class FnT>
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)
fn(transit.m_exitIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, true));
if (!transit.m_oneWay && transit.m_forwardIsEnter)
fn(transit.m_exitIdx, Segment(m_mwmId, key.m_featureId, key.m_segmentIdx, false));
}
});
}
void GetOutgoingEdgeList(Segment const & segment, EdgeListT & edges) const

View File

@@ -4,16 +4,14 @@
#include "routing/routing_options.hpp"
#include "routing/world_graph.hpp"
#include "platform/settings.hpp"
#include "base/assert.hpp"
#include "base/checked_cast.hpp"
#include "base/exception.hpp"
#include "base/timer.hpp"
#include "geometry/distance_on_sphere.hpp"
#include <algorithm>
#include <execution>
#include <limits>
#include <utility>
@@ -321,7 +319,9 @@ void IndexGraph::ReconstructJointSegment(astar::VertexData<JointSegment, RouteWe
auto const & weightTimeToParent = parentVertexData.m_realDistance;
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 lastPointId = lastPointIds[i];
@@ -335,22 +335,21 @@ void IndexGraph::ReconstructJointSegment(astar::VertexData<JointSegment, RouteWe
{ return currentPointId < lastPointId ? pointId + 1 : pointId - 1; };
if (IsAccessNoForSure(firstChild.GetFeatureId(), weightTimeToParent, true /* useAccessConditional */))
continue;
return;
if (IsAccessNoForSure(parent.GetRoadPoint(isOutgoing), weightTimeToParent, true /* useAccessConditional */))
continue;
return;
if (IsUTurn(parent, firstChild) && IsUTurnAndRestricted(parent, firstChild, isOutgoing))
continue;
return;
if (IsRestricted(parentJoint, parent.GetFeatureId(), firstChild.GetFeatureId(), isOutgoing, parents))
continue;
return;
RouteWeight summaryWeight;
// Check current JointSegment for bad road access between segments.
RoadPoint rp = firstChild.GetRoadPoint(isOutgoing);
uint32_t start = currentPointId;
bool noRoadAccess = false;
do
{
// 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
// affect user.
if (IsAccessNoForSure(rp, weightTimeToParent, true /* useAccessConditional */))
{
noRoadAccess = true;
break;
}
return;
start = increment(start);
rp.SetPointId(start);
}
while (start != lastPointId);
if (noRoadAccess)
continue;
bool forward = currentPointId < lastPointId;
Segment current = firstChild;
Segment prev = parent;
@@ -396,7 +389,7 @@ void IndexGraph::ReconstructJointSegment(astar::VertexData<JointSegment, RouteWe
jointEdges.emplace_back(isOutgoing ? JointSegment(firstChild, prev) : JointSegment(prev, firstChild),
summaryWeight);
}
});
}
void IndexGraph::GetNeighboringEdge(astar::VertexData<Segment, RouteWeight> const & fromVertexData, Segment const & to,

View File

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

View File

@@ -13,6 +13,7 @@
#include "3party/skarupke/bytell_hash_map.hpp" // needed despite of IDE warning
#include <algorithm>
#include <execution>
#include <map>
#include <optional>
#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));
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.
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" +
// "parentWeight[i]".
w = weight + parentWeights[i];
}
});
// Delete useless weight of parent JointSegment.
m_savedWeight.erase(vertex);
@@ -498,8 +500,9 @@ void IndexGraphStarterJoints<Graph>::GetEdgeList(astar::VertexData<Vertex, Weigh
else
{
// This needs for correct weights calculation of FakeJointSegments during forward A* search.
for (size_t i = firstFakeId; i < edges.size(); ++i)
edges[i].GetWeight() += parentWeights[i];
auto const range = std::ranges::views::iota(firstFakeId, edges.size());
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();
@@ -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)
/// 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();
if (targetMwmId != kFakeNumMwmId && vertexMwmId != targetMwmId)
e.GetWeight() += m_graph.GetCrossBorderPenalty(vertexMwmId, targetMwmId);
}
});
}
}

View File

@@ -14,7 +14,7 @@ using namespace ftypes;
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)
@@ -102,6 +102,7 @@ double CalcEstimatedTimeToPass(double const distanceMeters, HighwayClass const h
double speedKmph = 0;
switch (highwayClass)
{
case HighwayClass::Motorway: speedKmph = 100.0; break;
case HighwayClass::Trunk: speedKmph = 100.0; break;
case HighwayClass::Primary: speedKmph = 70.0; break;
case HighwayClass::Secondary: speedKmph = 70.0; break;

View File

@@ -6,7 +6,7 @@
#define MWM_GEOLOCATION_SERVER ""
#define DIFF_LIST_URL ""
#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 TRAFFIC_DATA_BASE_URL ""
#define USER_BINDING_PKCS12 ""

View File

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

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