Compare commits
9 Commits
yannikblos
...
x7z4w-grap
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c8ff9c22e | ||
|
|
8799c5613e | ||
|
|
4a91c55ece | ||
|
|
268ad19089 | ||
|
|
325f62d8cb | ||
|
|
443d24b8d0 | ||
|
|
c0e492247e | ||
|
|
e71550e78b | ||
|
|
b3991555b5 |
31
android/app/src/fdroid/play/listings/sl/full-description.txt
Normal 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!
|
||||
1
android/app/src/fdroid/play/listings/sv-SE/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Comaps- Vandra, Cykla, Kör Offline, Privat
|
||||
1
android/app/src/google/play/listings/sv-SE/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Comaps- Navigera Privat
|
||||
@@ -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>
|
||||
|
||||
3
android/app/src/main/res/values-ta/strings.xml
Normal file
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
3
android/sdk/src/main/res/values-ta/strings.xml
Normal file
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
{
|
||||
"World": {
|
||||
"languages": ["int_name", "en", "default"]
|
||||
},
|
||||
"WorldCoasts": {
|
||||
"languages": ["int_name", "en", "default"]
|
||||
},
|
||||
"Abkhazia": {
|
||||
"languages": ["ab", "ru"]
|
||||
},
|
||||
|
||||
@@ -389,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>
|
||||
@@ -1112,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>
|
||||
@@ -1473,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" />
|
||||
|
||||
@@ -1 +1,14 @@
|
||||
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#294c88" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 973 B |
@@ -1 +1,14 @@
|
||||
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#294c88" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 965 B |
@@ -1 +1,14 @@
|
||||
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#136c30" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 992 B |
@@ -1 +1,14 @@
|
||||
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#136c30" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 984 B |
@@ -1 +1,14 @@
|
||||
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f1a17" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 992 B |
@@ -1 +1,14 @@
|
||||
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f1a17" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 984 B |
@@ -1 +1,14 @@
|
||||
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#212121" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f5a17" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 920 B After Width: | Height: | Size: 992 B |
@@ -1 +1,14 @@
|
||||
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#212121" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f5a17" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 920 B After Width: | Height: | Size: 984 B |
@@ -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 |
14
data/styles/default/dark/symbols/shield-hungary-blue.svg
Normal 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 |
@@ -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 |
14
data/styles/default/dark/symbols/shield-hungary-green.svg
Normal 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 |
@@ -104,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]
|
||||
|
||||
@@ -1 +1,14 @@
|
||||
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#1a5ec1" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 973 B |
@@ -1 +1,14 @@
|
||||
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#1a5ec1" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 965 B |
@@ -1 +1,14 @@
|
||||
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#309302" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 992 B |
@@ -1 +1,14 @@
|
||||
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#309302" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 981 B |
@@ -1 +1,14 @@
|
||||
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#e63534" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 992 B |
@@ -1 +1,14 @@
|
||||
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#e63534" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 981 B |
@@ -1 +1,14 @@
|
||||
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#c97600" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 905 B After Width: | Height: | Size: 985 B |
@@ -1 +1,14 @@
|
||||
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#c97600" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>
|
||||
<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>
|
||||
|
||||
|
Before Width: | Height: | Size: 905 B After Width: | Height: | Size: 977 B |
@@ -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 |
14
data/styles/default/light/symbols/shield-hungary-blue.svg
Normal 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 |
@@ -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 |
14
data/styles/default/light/symbols/shield-hungary-green.svg
Normal 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 |
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 %@";
|
||||
|
||||
@@ -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ș";
|
||||
|
||||
@@ -377,3 +377,4 @@
|
||||
"placepage_call_button" = "Klic";
|
||||
"today" = "Danes";
|
||||
"bookmark_sets" = "Seznami zaznamkov";
|
||||
"about_proposition_3" = "Transparentno in nedobičkonosno";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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>
|
||||
|
||||
1
iphone/metadata/sv/subtitle.txt
Normal file
@@ -0,0 +1 @@
|
||||
Navigera Privat
|
||||
@@ -196,7 +196,7 @@ m2::PointF GetOffset(int offsetX, int offsetY)
|
||||
|
||||
bool IsSymbolRoadShield(ftypes::RoadShield const & shield)
|
||||
{
|
||||
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;
|
||||
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)
|
||||
@@ -217,6 +217,10 @@ std::string GetRoadShieldSymbolName(ftypes::RoadShield const & shield, double fo
|
||||
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));
|
||||
|
||||
@@ -321,7 +325,9 @@ dp::Color GetRoadShieldTextColor(dp::Color const & baseColor, ftypes::RoadShield
|
||||
{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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -558,6 +558,14 @@ public:
|
||||
{}
|
||||
};
|
||||
|
||||
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:
|
||||
@@ -874,6 +882,8 @@ RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const &
|
||||
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")
|
||||
@@ -974,6 +984,8 @@ std::string DebugPrint(RoadShieldType shieldType)
|
||||
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"));
|
||||
}
|
||||
|
||||
@@ -42,6 +42,8 @@ enum class RoadShieldType
|
||||
US_Highway,
|
||||
UK_Highway,
|
||||
Italy_Autostrada,
|
||||
Hungary_Green,
|
||||
Hungary_Blue,
|
||||
Hidden,
|
||||
Count
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
|
||||
#include "indexer/feature_meta.hpp"
|
||||
|
||||
#include "geometry/point2d.hpp"
|
||||
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <unordered_map>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ SKIP_MAP_DOWNLOAD="${SKIP_MAP_DOWNLOAD:-}"
|
||||
SKIP_GENERATE_SYMBOLS="${SKIP_GENERATE_SYMBOLS:-}"
|
||||
SKIP_GENERATE_DRULES="${SKIP_GENERATE_DRULES:-}"
|
||||
|
||||
CMAKE_CONFIG="${CMAKE_CONFIG:-} -U SKIP_QT_GUI -U GENERATOR_TOOL -U USE_PCH -U CMAKE_EXPORT_COMPILE_COMMANDS -U NJOBS -U SKIP_TESTS"
|
||||
|
||||
OPT_DEBUG=
|
||||
OPT_RELEASE=
|
||||
OPT_RELEASEDEBUGINFO=
|
||||
@@ -63,7 +65,6 @@ done
|
||||
|
||||
OPT_TARGET=${@:$OPTIND}
|
||||
|
||||
CMAKE_CONFIG="${CMAKE_CONFIG:-} -U SKIP_QT_GUI -U GENERATOR_TOOL"
|
||||
if [ "$OPT_TARGET" != "desktop" -a -z "$OPT_DESIGNER" -a -z "$OPT_STANDALONE"]; then
|
||||
CMAKE_CONFIG="${CMAKE_CONFIG:-} -DSKIP_QT_GUI=ON"
|
||||
fi
|
||||
|
||||