WIP: [styles] Add London Overground icon #7784

Draft
charlie2clarke wants to merge 4 commits from charlie2clarke/overground-icon into master
138 changed files with 11128 additions and 9488 deletions

3
.gitmodules vendored
View file

@ -59,6 +59,3 @@
[submodule "3party/harfbuzz/harfbuzz"]
path = 3party/harfbuzz/harfbuzz
url = https://github.com/harfbuzz/harfbuzz.git
[submodule "3party/utfcpp"]
path = 3party/utfcpp
url = https://github.com/nemtrif/utfcpp.git

View file

@ -1714,6 +1714,7 @@
<string name="type.railway.station.light_rail.london">DLR Station</string>
<string name="type.railway.station.light_rail.porto">Porto Metro</string>
<string name="type.railway.station.monorail">Monorail Station</string>
<string name="type.railway.station.overground.london">Overground Station</string>
<string name="type.railway.station.subway">Subway Station</string>
<string name="type.railway.station.subway.adana">Subway Station</string>
<string name="type.railway.station.subway.algiers">Subway Station</string>

View file

@ -957,6 +957,9 @@ world +
porto -
{}
monorail -
overground +
london -
{}
subway +
adana -
algiers -

Binary file not shown.

View file

@ -81005,6 +81005,228 @@ cont {
}
}
}
cont {
name: "railway-station-overground-london"
element {
scale: 12
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 9
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
secondary {
height: 8
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 13
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 10
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
secondary {
height: 9
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 14
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 11
color: 2236962
stroke_color: 1308622847
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 2236962
stroke_color: 1308622847
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 15
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 12
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 16
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
secondary {
height: 11
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 17
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 18
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 19
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 20
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
}
cont {
name: "railway-station-subway"
element {

Binary file not shown.

View file

@ -76767,6 +76767,228 @@ cont {
}
}
}
cont {
name: "railway-station-overground-london"
element {
scale: 12
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 9
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
secondary {
height: 8
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 13
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 10
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
secondary {
height: 9
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 14
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 11
color: 2236962
stroke_color: 1308622847
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 2236962
stroke_color: 1308622847
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 15
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 12
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 16
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
secondary {
height: 11
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 17
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 18
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 19
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 20
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
}
cont {
name: "railway-station-subway"
element {

Binary file not shown.

View file

@ -76982,6 +76982,228 @@ cont {
}
}
}
cont {
name: "railway-station-overground-london"
element {
scale: 12
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 9
color: 8947848
stroke_color: 1711670784
offset_y: 1
is_optional: true
}
secondary {
height: 8
color: 8947848
stroke_color: 1711670784
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 13
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 10
color: 8947848
stroke_color: 1711670784
offset_y: 1
is_optional: true
}
secondary {
height: 9
color: 8947848
stroke_color: 1711670784
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 14
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 11
color: 8947848
stroke_color: 1292240384
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 8947848
stroke_color: 1292240384
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 15
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 12
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 16
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
secondary {
height: 11
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 17
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 18
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 19
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 20
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -3750
}
}
}
cont {
name: "railway-station-subway"
element {

Binary file not shown.

View file

@ -82098,6 +82098,228 @@ cont {
}
}
}
cont {
name: "railway-station-overground-london"
element {
scale: 12
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 9
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
secondary {
height: 8
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 13
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 10
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
secondary {
height: 9
color: 2236962
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 14
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 11
color: 2236962
stroke_color: 1308622847
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 2236962
stroke_color: 1308622847
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 15
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 12
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 16
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
secondary {
height: 11
color: 2236962
stroke_color: 872415231
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 17
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 18
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 19
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 20
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 2236962
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -3750
}
}
}
cont {
name: "railway-station-subway"
element {

Binary file not shown.

View file

@ -82313,6 +82313,228 @@ cont {
}
}
}
cont {
name: "railway-station-overground-london"
element {
scale: 12
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 9
color: 8947848
stroke_color: 1711670784
offset_y: 1
is_optional: true
}
secondary {
height: 8
color: 8947848
stroke_color: 1711670784
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 13
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 10
color: 8947848
stroke_color: 1711670784
offset_y: 1
is_optional: true
}
secondary {
height: 9
color: 8947848
stroke_color: 1711670784
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 14
symbol {
name: "london-overground-s"
priority: 6250
min_distance: 1
}
caption {
primary {
height: 11
color: 8947848
stroke_color: 1292240384
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 8947848
stroke_color: 1292240384
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 15
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 12
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 16
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
secondary {
height: 11
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 17
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 18
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 19
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -3750
}
}
element {
scale: 20
symbol {
name: "london-overground-m"
priority: 6250
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -3750
}
}
}
cont {
name: "railway-station-subway"
element {

Binary file not shown.

View file

@ -49520,6 +49520,211 @@ cont {
}
}
}
cont {
name: "railway-station-overground-london"
element {
scale: 12
symbol {
name: "london-overground-s"
priority: 2900
min_distance: 1
}
}
element {
scale: 13
symbol {
name: "london-overground-s"
priority: 2900
min_distance: 1
}
caption {
primary {
height: 11
color: 3355443
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
secondary {
height: 9
color: 3355443
stroke_color: 1728053247
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 14
symbol {
name: "london-overground-s"
priority: 2900
min_distance: 1
}
caption {
primary {
height: 12
color: 3355443
stroke_color: 1308622847
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 3355443
stroke_color: 1308622847
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 15
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 12
color: 3355443
stroke_color: 872415231
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 3355443
stroke_color: 872415231
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 16
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 13
color: 3355443
stroke_color: 872415231
offset_y: 1
is_optional: true
}
secondary {
height: 11
color: 3355443
stroke_color: 872415231
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 17
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 14
color: 3355443
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 3355443
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 18
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 14
color: 3355443
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 3355443
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 19
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 14
color: 3355443
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 3355443
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 20
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 14
color: 3355443
stroke_color: 452984831
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 3355443
stroke_color: 452984831
offset_y: 1
is_optional: true
}
priority: -7100
}
}
}
cont {
name: "railway-station-subway"
element {

Binary file not shown.

View file

@ -50060,6 +50060,211 @@ cont {
}
}
}
cont {
name: "railway-station-overground-london"
element {
scale: 12
symbol {
name: "london-overground-s"
priority: 2900
min_distance: 1
}
}
element {
scale: 13
symbol {
name: "london-overground-s"
priority: 2900
min_distance: 1
}
caption {
primary {
height: 11
color: 8947848
stroke_color: 1711670784
offset_y: 1
is_optional: true
}
secondary {
height: 9
color: 8947848
stroke_color: 1711670784
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 14
symbol {
name: "london-overground-s"
priority: 2900
min_distance: 1
}
caption {
primary {
height: 12
color: 8947848
stroke_color: 1292240384
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 8947848
stroke_color: 1292240384
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 15
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 12
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
secondary {
height: 10
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 16
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 13
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
secondary {
height: 11
color: 8947848
stroke_color: 856032768
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 17
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 14
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 18
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 14
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 19
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 14
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -7100
}
}
element {
scale: 20
symbol {
name: "london-overground-m"
priority: 2900
}
caption {
primary {
height: 14
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
secondary {
height: 12
color: 8947848
stroke_color: 436602368
offset_y: 1
is_optional: true
}
priority: -7100
}
}
}
cont {
name: "railway-station-subway"
element {

View file

@ -1683,3 +1683,4 @@ railway|station|subway|singapore;[railway=station][transport=subway][city=singap
railway|subway_entrance|singapore;[railway=subway_entrance][city=singapore];;name;int_name;1595;
railway|station|subway|boston;[railway=station][transport=subway][city=boston],[railway=station][station=subway][city=boston];;name;int_name;1596;
railway|subway_entrance|boston;[railway=subway_entrance][city=boston];;name;int_name;1597;
railway|station|overground|london;[railway=station][operator=London Overground];;name;int_name;1598;
vng commented 2024-04-04 03:17:47 +00:00 (Migrated from github.com)
Review

Well, if it works good (probably should add one test in osm_tyoe_test.cpp) I'm ok with that.

@RedAuburn Can we trust operator=London Overground ?

Well, if it works good (probably should add one test in osm_tyoe_test.cpp) I'm ok with that. @RedAuburn Can we trust operator=London Overground ?
Review

hmmm... looks like it's going to be a bit more complicated :/

railway=station+operator=London Overground only finds 62 stations.

This query finds all 113 stations the Overground serves:

[out:json][timeout:25];
{{geocodeArea:United Kingdom}}->.searchArea;
// OR
(
  // should match =London Underground;London Overground
  nwr["railway"="station"]["network"~"London Overground"](area.searchArea);
  nwr["railway"="station"]["operator"~"London Overground"](area.searchArea);
);
// print results
out geom;

need to search for all nodes where either network=* or operator=* contains London Overground (non-case sensitive). And not just an exact string match as POI can have things like network=London Underground;London Overground

hmmm... looks like it's going to be a bit more complicated :/ `railway=station`+`operator=London Overground` only finds 62 stations. This query finds all 113 stations the Overground serves: ``` [out:json][timeout:25]; {{geocodeArea:United Kingdom}}->.searchArea; // OR ( // should match =London Underground;London Overground nwr["railway"="station"]["network"~"London Overground"](area.searchArea); nwr["railway"="station"]["operator"~"London Overground"](area.searchArea); ); // print results out geom; ``` need to search for all nodes where _either_ `network=*` or `operator=*` _contains_ `London Overground` (non-case sensitive). And not just an exact string match as POI can have things like `network=London Underground;London Overground`
Review

railway|station|overground|london;[railway=station][operator=London Overground],[railway=station][network=London Overground]; :)

but IDK how do we treat case and multiple values might need a special processing...

`railway|station|overground|london;[railway=station][operator=London Overground],[railway=station][network=London Overground];` :) but IDK how do we treat case and multiple values might need a special processing...
charlie2clarke commented 2024-04-04 14:07:39 +00:00 (Migrated from github.com)
Review

Would adding another wildcard to signify case insensitivity not be ok? I'd like to help make the changes for how this might be parsed, but I'm having trouble working out how to build and run the generator code by itself (and not driven by tools/python/map_generator) to allow me to debug it.

Would adding another wildcard to signify case insensitivity not be ok? I'd like to help make the changes for how this might be parsed, but I'm having trouble working out how to build and run the generator code by itself (and not driven by tools/python/map_generator) to allow me to debug it.
Review

IMO all OSM tags matching should be case-insensitive (maybe its the case already?)

IMO all OSM tags matching should be case-insensitive (maybe its the case already?)
Review

but IDK how do we treat case and multiple values might need a special processing...

@vng do you know if the generator can handle case & multiple values?

> but IDK how do we treat case and multiple values might need a special processing... @vng do you know if the generator can handle case & multiple values?
vng commented 2024-04-06 14:36:03 +00:00 (Migrated from github.com)
Review

If have doubts, better make tests like in osm_type_test.cpp

If have doubts, better make tests like in osm_type_test.cpp

Can't render this file because it contains an unexpected character in line 7 and column 16.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 815 KiB

After

Width:  |  Height:  |  Size: 818 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 KiB

After

Width:  |  Height:  |  Size: 823 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 KiB

After

Width:  |  Height:  |  Size: 386 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 386 KiB

After

Width:  |  Height:  |  Size: 388 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 228 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 KiB

After

Width:  |  Height:  |  Size: 230 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 530 KiB

After

Width:  |  Height:  |  Size: 531 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 536 KiB

After

Width:  |  Height:  |  Size: 537 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 854 KiB

After

Width:  |  Height:  |  Size: 856 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 863 KiB

After

Width:  |  Height:  |  Size: 864 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 1 MiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 1 MiB

File diff suppressed because it is too large Load diff

View file

@ -22607,6 +22607,9 @@
zh-Hans = 单轨车站
zh-Hant = 單軌車站
[type.railway.station.overground.london]
en = Overground Station
[type.railway.station.subway]
en = Subway Station
en-GB = Metro Station

View file

@ -391,6 +391,10 @@ node|z15-[railway=station][transport=subway][city=london] {icon-image: subway-lo
node|z16-[railway=subway_entrance][city=london] {icon-image: subway_entrance-london-s.svg;}
node|z18-[railway=subway_entrance][city=london] {icon-image: subway_entrance-london-m.svg;}
/* London Overground Station */
node|z12-14[railway=station][operator=London Overground] {icon-image: london-overground-s.svg;icon-min-distance: 1;}
node|z15-[railway=station][operator=London Overground] {icon-image: london-overground-m.svg;}
/* Los Angeles Subway Station */
node|z12-[railway=station][transport=subway][city=la] {icon-image: subway-losangeles-s.svg;}
node|z15-[railway=station][transport=subway][city=la] {icon-image: subway-losangeles-m.svg;}

View file

@ -139,6 +139,7 @@ railway-station-light_rail # icon z13- (also has captio
railway-station-light_rail-london # icon z13- (also has caption(optional) z14-)
railway-station-light_rail-porto # icon z13- (also has caption(optional) z14-)
railway-station-monorail # icon z12- (also has caption(optional) z12-)
railway-station-overground-london # icon z12- (also has caption(optional) z12-)
railway-station-subway # icon z13- (also has caption(optional) z14-)
railway-station-subway-adana # icon z12- (also has caption(optional) z14-)
railway-station-subway-algiers # icon z12- (also has caption(optional) z14-)
@ -1291,6 +1292,7 @@ leisure-swimming_pool-private # icon z17- (also has captio
# railway-station-light_rail-london # caption(optional) z14- (also has icon z13-)
# railway-station-light_rail-porto # caption(optional) z14- (also has icon z13-)
# railway-station-monorail # caption(optional) z12- (also has icon z12-)
# railway-station-overground-london # caption(optional) z12- (also has icon z12-)
# railway-station-subway # caption(optional) z14- (also has icon z13-)
# railway-station-subway-adana # caption(optional) z14- (also has icon z12-)
# railway-station-subway-algiers # caption(optional) z14- (also has icon z12-)

View file

@ -0,0 +1,7 @@
<svg viewBox="0 0 23 17" width="17" height="13" xmlns="http://www.w3.org/2000/svg">
<g>
<path d="m3.7517 5h-3.7517v7h3.7517c1.334 2.9485 4.3016 5 7.7483 5 3.4467 0 6.4143-2.0515 7.7483-5h3.7517v-7h-3.7517c-1.334-2.9485-4.3016-5-7.7483-5-3.4467 0-6.4143 2.0515-7.7483 5z" fill="#FFF" opacity=".6"/>
<path d="m11.5 16c-4.1421 0-7.5-3.3579-7.5-7.5 0-4.1421 3.3579-7.5 7.5-7.5 4.1421 0 7.5 3.3579 7.5 7.5 0 4.1421-3.3579 7.5-7.5 7.5zm0-3c2.4853 0 4.5-2.0147 4.5-4.5 0-2.4853-2.0147-4.5-4.5-4.5-2.4853 0-4.5 2.0147-4.5 4.5 0 2.4853 2.0147 4.5 4.5 4.5z" fill="#ee7623"/>
<rect x="1" y="6" width="21" height="5" fill="#000F9F"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 642 B

View file

@ -0,0 +1,7 @@
<svg viewBox="0 0 17 13" width="13" height="10" xmlns="http://www.w3.org/2000/svg">
<g>
<path d="m2.4982 4c0.97956-2.349 3.2979-4 6.0018-4 2.704 0 5.0223 1.651 6.0018 4h2.4982v5h-2.4982c-0.97956 2.349-3.2979 4-6.0018 4-2.7039 0-5.0223-1.651-6.0018-4h-2.4982v-5h2.4982z" fill="#FFF" opacity=".6"/>
<path d="m8.5 12c-3.0376 0-5.5-2.4624-5.5-5.5s2.4624-5.5 5.5-5.5c3.0376 0 5.5 2.4624 5.5 5.5s-2.4624 5.5-5.5 5.5zm0-2c1.933 0 3.5-1.567 3.5-3.5s-1.567-3.5-3.5-3.5c-1.933 0-3.5 1.567-3.5 3.5s1.567 3.5 3.5 3.5z" fill="#ee7623"/>
<rect x="1" y="5" width="15" height="3" fill="#000F9F"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 601 B

View file

@ -0,0 +1,7 @@
<svg viewBox="0 0 23 17" width="17" height="13" xmlns="http://www.w3.org/2000/svg">
<g>
<path d="m3.7517 5h-3.7517v7h3.7517c1.334 2.9485 4.3016 5 7.7483 5 3.4467 0 6.4143-2.0515 7.7483-5h3.7517v-7h-3.7517c-1.334-2.9485-4.3016-5-7.7483-5-3.4467 0-6.4143 2.0515-7.7483 5z" fill="#FFF" opacity=".6"/>
<path d="m11.5 16c-4.1421 0-7.5-3.3579-7.5-7.5 0-4.1421 3.3579-7.5 7.5-7.5 4.1421 0 7.5 3.3579 7.5 7.5 0 4.1421-3.3579 7.5-7.5 7.5zm0-3c2.4853 0 4.5-2.0147 4.5-4.5 0-2.4853-2.0147-4.5-4.5-4.5-2.4853 0-4.5 2.0147-4.5 4.5 0 2.4853 2.0147 4.5 4.5 4.5z" fill="#ee7623"/>
<rect x="1" y="6" width="21" height="5" fill="#000F9F"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 642 B

View file

@ -0,0 +1,7 @@
<svg viewBox="0 0 17 13" width="13" height="10" xmlns="http://www.w3.org/2000/svg">
<g>
<path d="m2.4982 4c0.97956-2.349 3.2979-4 6.0018-4 2.704 0 5.0223 1.651 6.0018 4h2.4982v5h-2.4982c-0.97956 2.349-3.2979 4-6.0018 4-2.7039 0-5.0223-1.651-6.0018-4h-2.4982v-5h2.4982z" fill="#FFF" opacity=".6"/>
<path d="m8.5 12c-3.0376 0-5.5-2.4624-5.5-5.5s2.4624-5.5 5.5-5.5c3.0376 0 5.5 2.4624 5.5 5.5s-2.4624 5.5-5.5 5.5zm0-2c1.933 0 3.5-1.567 3.5-3.5s-1.567-3.5-3.5-3.5c-1.933 0-3.5 1.567-3.5 3.5s1.567 3.5 3.5 3.5z" fill="#ee7623"/>
<rect x="1" y="5" width="15" height="3" fill="#000F9F"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 601 B

View file

@ -139,6 +139,7 @@ railway-station-light_rail # icon z13- (also has captio
railway-station-light_rail-london # icon z13- (also has caption(optional) z14-)
railway-station-light_rail-porto # icon z13- (also has caption(optional) z14-)
railway-station-monorail # icon z12- (also has caption(optional) z12-)
railway-station-overground-london # icon z12- (also has caption(optional) z12-)
railway-station-subway # icon z13- (also has caption(optional) z14-)
railway-station-subway-adana # icon z12- (also has caption(optional) z14-)
railway-station-subway-algiers # icon z12- (also has caption(optional) z14-)
@ -1291,6 +1292,7 @@ leisure-swimming_pool-private # icon z17- (also has captio
# railway-station-light_rail-london # caption(optional) z14- (also has icon z13-)
# railway-station-light_rail-porto # caption(optional) z14- (also has icon z13-)
# railway-station-monorail # caption(optional) z12- (also has icon z12-)
# railway-station-overground-london # caption(optional) z12- (also has icon z12-)
# railway-station-subway # caption(optional) z14- (also has icon z13-)
# railway-station-subway-adana # caption(optional) z14- (also has icon z12-)
# railway-station-subway-algiers # caption(optional) z14- (also has icon z12-)

View file

@ -199,6 +199,7 @@ railway-station-light_rail # icon z13- (also has captio
railway-station-light_rail-london # icon z13- (also has caption(optional) z15-)
railway-station-light_rail-porto # icon z13- (also has caption(optional) z15-)
railway-station-monorail # icon z12- (also has caption(optional) z13-)
railway-station-overground-london # icon z12- (also has caption(optional) z13-)
=== 2900
barrier-toll_booth # icon z12- (also has caption(optional) z14-)
@ -767,6 +768,7 @@ entrance-main # icon z18- (also has captio
# railway-station-light_rail-london # caption(optional) z15- (also has icon z13-)
# railway-station-light_rail-porto # caption(optional) z15- (also has icon z13-)
# railway-station-monorail # caption(optional) z13- (also has icon z12-)
# railway-station-overground-london # caption(optional) z13- (also has icon z12-)
# === -7100
# barrier-toll_booth # caption(optional) z14- (also has icon z12-)

View file

@ -1595,3 +1595,4 @@ amenity|recycling|container
*railway|subway_entrance|singapore
*railway|station|subway|boston
*railway|subway_entrance|boston
*railway|station|overground|london

View file

@ -957,6 +957,9 @@ world 000000000000000000000 +
porto 000000000000011111111 -
{}
monorail 000000000000111111111 -
overground 000000000000000000000 +
london 000000000000111111111 -
{}
subway 000000000000011111111 +
adana 000000000000111111111 -
algiers 000000000000111111111 -

View file

@ -250,10 +250,10 @@ public:
Lit,
NoFoot,
YesFoot,
NoSidewalk, // no dedicated sidewalk, doesn't mean that foot is not allowed, just lower weight
NoSidewalk, // no dedicated sidewalk, doesn't mean that foot is not allowed, just lower weight
NoBicycle,
YesBicycle,
NoCycleway, // no dedicated cycleway, doesn't mean that bicycle is not allowed, just lower weight
NoCycleway, // no dedicated cycleway, doesn't mean that bicycle is not allowed, just lower weight
BicycleBidir,
SurfacePavedGood,
SurfacePavedBad,
@ -281,37 +281,37 @@ public:
Classificator const & c = classif();
static std::map<Type, std::vector<string>> const kTypeToName = {
{Entrance, {"entrance"}},
{Highway, {"highway"}},
{Address, {"building", "address"}},
{OneWay, {"hwtag", "oneway"}},
{Private, {"hwtag", "private"}},
{Lit, {"hwtag", "lit"}},
{NoFoot, {"hwtag", "nofoot"}},
{YesFoot, {"hwtag", "yesfoot"}},
{NoSidewalk, {"hwtag", "nosidewalk"}},
{NoBicycle, {"hwtag", "nobicycle"}},
{YesBicycle, {"hwtag", "yesbicycle"}},
{NoCycleway, {"hwtag", "nocycleway"}},
{BicycleBidir, {"hwtag", "bidir_bicycle"}},
{SurfacePavedGood, {"psurface", "paved_good"}},
{SurfacePavedBad, {"psurface", "paved_bad"}},
{Entrance, {"entrance"}},
{Highway, {"highway"}},
{Address, {"building", "address"}},
{OneWay, {"hwtag", "oneway"}},
{Private, {"hwtag", "private"}},
{Lit, {"hwtag", "lit"}},
{NoFoot, {"hwtag", "nofoot"}},
{YesFoot, {"hwtag", "yesfoot"}},
{NoSidewalk, {"hwtag", "nosidewalk"}},
{NoBicycle, {"hwtag", "nobicycle"}},
{YesBicycle, {"hwtag", "yesbicycle"}},
{NoCycleway, {"hwtag", "nocycleway"}},
{BicycleBidir, {"hwtag", "bidir_bicycle"}},
{SurfacePavedGood, {"psurface", "paved_good"}},
{SurfacePavedBad, {"psurface", "paved_bad"}},
{SurfaceUnpavedGood, {"psurface", "unpaved_good"}},
{SurfaceUnpavedBad, {"psurface", "unpaved_bad"}},
{HasParts, {"building", "has_parts"}},
{NoCar, {"hwtag", "nocar"}},
{YesCar, {"hwtag", "yescar"}},
{InternetAny, {"internet_access"}},
{Wlan, {"internet_access", "wlan"}},
{RailwayStation, {"railway", "station"}},
{SubwayStation, {"railway", "station", "subway"}},
{WheelchairAny, {"wheelchair"}},
{WheelchairYes, {"wheelchair", "yes"}},
{BarrierGate, {"barrier", "gate"}},
{Toll, {"hwtag", "toll"}},
{BicycleOnedir, {"hwtag", "onedir_bicycle"}},
{Ferry, {"route", "ferry"}},
{ShuttleTrain, {"route", "shuttle_train"}},
{SurfaceUnpavedBad, {"psurface", "unpaved_bad"}},
{HasParts, {"building", "has_parts"}},
{NoCar, {"hwtag", "nocar"}},
{YesCar, {"hwtag", "yescar"}},
{InternetAny, {"internet_access"}},
{Wlan, {"internet_access", "wlan"}},
{RailwayStation, {"railway", "station"}},
{SubwayStation, {"railway", "station", "subway"}},
{WheelchairAny, {"wheelchair"}},
{WheelchairYes, {"wheelchair", "yes"}},
{BarrierGate, {"barrier", "gate"}},
{Toll, {"hwtag", "toll"}},
{BicycleOnedir, {"hwtag", "onedir_bicycle"}},
{Ferry, {"route", "ferry"}},
{ShuttleTrain, {"route", "shuttle_train"}},
};
m_types.resize(static_cast<size_t>(Count));
@ -319,10 +319,7 @@ public:
m_types[static_cast<size_t>(kv.first)] = c.GetTypeByPath(kv.second);
}
uint32_t Get(CachedTypes::Type t) const
{
return m_types[static_cast<size_t>(t)];
}
uint32_t Get(CachedTypes::Type t) const { return m_types[static_cast<size_t>(t)]; }
bool IsHighway(uint32_t t) const
{
@ -336,10 +333,7 @@ public:
return t == Get(Ferry) || t == Get(ShuttleTrain);
}
bool IsRailwayStation(uint32_t t) const
{
return t == Get(RailwayStation);
}
bool IsRailwayStation(uint32_t t) const { return t == Get(RailwayStation); }
bool IsSubwayStation(uint32_t t) const
{
@ -436,72 +430,72 @@ string MatchCity(ms::LatLon const & ll)
// Draw boundary around metro with http://bboxfinder.com (set to Lon/Lat)
// City name should be equal with railway-station-subway-CITY classifier types.
static std::map<string, m2::RectD> const cities = {
{"adana", {35.216442,36.934693,35.425525,37.065481}},
{"adana", {35.216442, 36.934693, 35.425525, 37.065481}},
{"algiers", {2.949538, 36.676777, 3.256914, 36.826518}},
{"almaty", {76.7223358154, 43.1480920701, 77.123336792, 43.4299852362}},
{"amsterdam", {4.65682983398, 52.232846171, 5.10040283203, 52.4886341706}},
{"ankara", {32.4733, 39.723, 33.0499, 40.086}},
{"athens", {23.518075, 37.849188, 23.993853, 38.129109}},
{"baku", {49.7315,40.319728,49.978006,40.453619}},
{"baku", {49.7315, 40.319728, 49.978006, 40.453619}},
{"bangkok", {100.159606934, 13.4363737155, 100.909423828, 14.3069694978}},
{"barcelona", {1.94458007812, 41.2489025224, 2.29614257812, 41.5414776668}},
{"beijing", {115.894775391, 39.588757277, 117.026367187, 40.2795256688}},
{"berlin", {13.0352783203, 52.3051199211, 13.7933349609, 52.6963610783}},
{"boston", {-71.2676239014, 42.2117365893, -70.8879089355, 42.521711682}},
{"bengalore", {77.393079,12.807501,77.806439,13.17014}},
{"bilbao", {-3.129730,43.202673,-2.859879,43.420011}},
{"bengalore", {77.393079, 12.807501, 77.806439, 13.17014}},
{"bilbao", {-3.129730, 43.202673, -2.859879, 43.420011}},
{"brasilia", {-48.334467, -16.036627, -47.358264, -15.50321}},
{"brescia", {10.128068,45.478792,10.312432,45.595665}},
{"brescia", {10.128068, 45.478792, 10.312432, 45.595665}},
{"brussels", {4.2448425293, 50.761653413, 4.52499389648, 50.9497757762}},
{"bucharest", {25.905198, 44.304636, 26.29032, 44.588137}},
{"budapest", {18.7509155273, 47.3034470439, 19.423828125, 47.7023684666}},
{"buenos_aires", {-58.9910888672, -35.1221551064, -57.8045654297, -34.2685661867}},
{"bursa", {28.771425,40.151234,29.297395,40.315832}},
{"bursa", {28.771425, 40.151234, 29.297395, 40.315832}},
{"cairo", {30.3232, 29.6163, 31.9891, 30.6445}},
{"caracas", {-67.109144,10.317298,-66.754835,10.551623}},
{"catania", {14.94978,37.443756,15.126343,37.540221}},
{"changchun", {124.6144,43.6274,125.9163,44.1578}},
{"chengdu", {103.6074,30.3755,104.4863,31.0462}},
{"caracas", {-67.109144, 10.317298, -66.754835, 10.551623}},
{"catania", {14.94978, 37.443756, 15.126343, 37.540221}},
{"changchun", {124.6144, 43.6274, 125.9163, 44.1578}},
{"chengdu", {103.6074, 30.3755, 104.4863, 31.0462}},
{"chicago", {-88.3163452148, 41.3541338721, -87.1270751953, 42.2691794924}},
{"chongqing", {105.9873,29.1071,107.0255,30.0102}},
{"dalian", {121.284679,38.752352,121.90678,39.167744}},
{"chongqing", {105.9873, 29.1071, 107.0255, 30.0102}},
{"dalian", {121.284679, 38.752352, 121.90678, 39.167744}},
{"delhi", {76.8026733398, 28.3914003758, 77.5511169434, 28.9240352884}},
{"dnepro", {34.7937011719, 48.339820521, 35.2798461914, 48.6056737841}},
{"dubai", {55.01953125, 24.9337667594, 55.637512207, 25.6068559937}},
{"ekb", {60.3588867188, 56.6622647682, 61.0180664062, 57.0287738515}},
{"frankfurt", {8.36334228516, 49.937079757, 8.92364501953, 50.2296379179}},
{"fukuoka", {130.285484,33.544873,130.51757,33.70268}},
{"glasgow", {-4.542417,55.753178,-3.943662,55.982611}},
{"fukuoka", {130.285484, 33.544873, 130.51757, 33.70268}},
{"glasgow", {-4.542417, 55.753178, -3.943662, 55.982611}},
{"guangzhou", {112.560424805, 22.4313401564, 113.766174316, 23.5967112789}},
{"hamburg", {9.75860595703, 53.39151869, 10.2584838867, 53.6820686709}},
{"helsinki", {24.3237304688, 59.9989861206, 25.48828125, 60.44638186}},
{"hiroshima", {132.256736,34.312824,132.621345,34.55182}},
{"hiroshima", {132.256736, 34.312824, 132.621345, 34.55182}},
{"hongkong", {114.039459229, 22.1848617608, 114.305877686, 22.3983322415}},
{"isfahan", {51.472344,32.504644,51.865369,32.820396}},
{"isfahan", {51.472344, 32.504644, 51.865369, 32.820396}},
{"istanbul", {28.4155, 40.7172, 29.7304, 41.4335}},
{"izmir", {26.953591,38.262044,27.318199,38.543469}},
{"izmir", {26.953591, 38.262044, 27.318199, 38.543469}},
{"kazan", {48.8067626953, 55.6372985742, 49.39453125, 55.9153515154}},
{"kharkiv", {36.078138, 49.854027, 36.51107, 50.141277}},
{"kiev", {30.1354980469, 50.2050332649, 31.025390625, 50.6599083609}},
{"kobe", {135.066888,34.617728,135.32232,34.776364}},
{"kolkata", {88.240623,22.450324,88.458955,22.632536}},
{"kobe", {135.066888, 34.617728, 135.32232, 34.776364}},
{"kolkata", {88.240623, 22.450324, 88.458955, 22.632536}},
{"koln", {6.7943572998, 50.8445380881, 7.12669372559, 51.0810964366}},
{"kunming", {102.0983,24.3319,103.5969,25.7119}},
{"kunming", {102.0983, 24.3319, 103.5969, 25.7119}},
{"kyoto", {135.619598, 34.874916, 135.878442, 35.113709}},
{"lausanne", {6.583868,46.504301,6.720813,46.602578}},
{"lille", {2.789132,50.441626,3.329113,50.794609}},
{"lausanne", {6.583868, 46.504301, 6.720813, 46.602578}},
{"lille", {2.789132, 50.441626, 3.329113, 50.794609}},
{"lima", {-77.2750854492, -12.3279274859, -76.7999267578, -11.7988014362}},
{"lisboa", {-9.42626953125, 38.548165423, -8.876953125, 38.9166815364}},
{"london", {-0.4833984375, 51.3031452592, 0.2197265625, 51.6929902115}},
{"la", {-118.944112, 32.806553, -117.644787, 34.822766}},
{"lyon", {4.5741, 45.5842, 5.1603, 45.9393}},
{"madrid", {-4.00451660156, 40.1536868578, -3.32885742188, 40.6222917831}},
{"malaga", {-5.611777,36.310352,-3.765967,37.282445}},
{"manila", {120.936229,14.550825,121.026167,14.639547}},
{"maracaibo", {-71.812942,10.570632,-71.581199,10.758897}},
{"mashhad", {59.302159,36.13267,59.83225,36.530945}},
{"malaga", {-5.611777, 36.310352, -3.765967, 37.282445}},
{"manila", {120.936229, 14.550825, 121.026167, 14.639547}},
{"maracaibo", {-71.812942, 10.570632, -71.581199, 10.758897}},
{"mashhad", {59.302159, 36.13267, 59.83225, 36.530945}},
{"mecca", {39.663307, 21.274985, 40.056236, 21.564195}},
{"medellin", {-75.719423,6.162617,-75.473408,6.376421}},
{"medellin", {-75.719423, 6.162617, -75.473408, 6.376421}},
{"mexico", {-99.3630981445, 19.2541083164, -98.879699707, 19.5960192403}},
{"milan", {9.02252197266, 45.341528405, 9.35760498047, 45.5813674681}},
{"minsk", {27.2845458984, 53.777934972, 27.8393554688, 54.0271334441}},
@ -509,42 +503,42 @@ string MatchCity(ms::LatLon const & ll)
{"moscow", {36.9964599609, 55.3962717136, 38.1884765625, 56.1118730004}},
{"mumbai", {72.7514648437, 18.8803004445, 72.9862976074, 19.2878132403}},
{"munchen", {11.3433837891, 47.9981928195, 11.7965698242, 48.2730267576}},
{"nagoya", {136.791969,35.025951,137.060899,35.260229}},
{"nagoya", {136.791969, 35.025951, 137.060899, 35.260229}},
{"newyork", {-74.4104003906, 40.4134960497, -73.4600830078, 41.1869224229}},
{"nnov", {43.6431884766, 56.1608472541, 44.208984375, 56.4245355509}},
{"novosibirsk", {82.4578857422, 54.8513152597, 83.2983398438, 55.2540770671}},
{"osaka", {134.813232422, 34.1981730963, 136.076660156, 35.119908571}},
{"oslo", {10.3875732422, 59.7812868211, 10.9286499023, 60.0401604652}},
{"palma", {2.556669,39.503227,2.841284,39.670445}},
{"palma", {2.556669, 39.503227, 2.841284, 39.670445}},
{"panama", {-79.633827, 8.880788, -79.367367, 9.149179}},
{"paris", {2.09014892578, 48.6637569323, 2.70538330078, 49.0414689141}},
{"philadelphia", {-75.276761, 39.865446, -74.964493, 40.137768}},
{"porto", {-8.758979,41.095783,-8.540001,41.378495}},
{"porto", {-8.758979, 41.095783, -8.540001, 41.378495}},
{"pyongyang", {125.48888, 38.780932, 126.12748, 39.298738}},
{"rennes", {-2.28897,47.934093,-1.283944,48.379636}},
{"rennes", {-2.28897, 47.934093, -1.283944, 48.379636}},
{"rio", {-43.4873199463, -23.0348745407, -43.1405639648, -22.7134898498}},
{"roma", {12.3348999023, 41.7672146942, 12.6397705078, 42.0105298189}},
{"rotterdam", {3.940749, 51.842118, 4.601808, 52.004528}},
{"samara", {50.001145, 53.070867, 50.434992, 53.339216}},
{"santiago", {-71.015625, -33.8133843291, -70.3372192383, -33.1789392606}},
{"santo_domingo", {-70.029669,18.390645,-69.831571,18.573966}},
{"santo_domingo", {-70.029669, 18.390645, -69.831571, 18.573966}},
{"saopaulo", {-46.9418334961, -23.8356009866, -46.2963867187, -23.3422558351}},
{"sapporo", {141.160343,42.945651,141.577136,43.243986}},
{"sendai", {140.469472,38.050849,141.260304,38.454699}},
{"sapporo", {141.160343, 42.945651, 141.577136, 43.243986}},
{"sendai", {140.469472, 38.050849, 141.260304, 38.454699}},
{"seoul", {126.540527344, 37.3352243593, 127.23815918, 37.6838203267}},
{"sf", {-122.72277832, 37.1690715771, -121.651611328, 38.0307856938}},
{"shanghai", {119.849853516, 30.5291450367, 122.102050781, 32.1523618947}},
{"shenzhen", {113.790893555, 22.459263801, 114.348449707, 22.9280416657}},
{"shiraz", {52.382254,29.498738,52.667513,29.840346}},
{"shiraz", {52.382254, 29.498738, 52.667513, 29.840346}},
{"singapore", {103.624420166, 1.21389843409, 104.019927979, 1.45278619819}},
{"sofia", {23.195085, 42.574041, 23.503569, 42.835375}},
{"spb", {29.70703125, 59.5231755354, 31.3110351562, 60.2725145948}},
{"stockholm", {17.5726318359, 59.1336814082, 18.3966064453, 59.5565918857}},
{"stuttgart", {9.0877532959, 48.7471343254, 9.29306030273, 48.8755544436}},
{"sydney", {150.42755127, -34.3615762875, 151.424560547, -33.4543597895}},
{"tabriz", {46.18432,38.015584,46.4126,38.15366}},
{"tabriz", {46.18432, 38.015584, 46.4126, 38.15366}},
{"taipei", {121.368713379, 24.9312761454, 121.716156006, 25.1608229799}},
{"taoyuan", {110.8471,28.4085,111.6109,29.4019}},
{"taoyuan", {110.8471, 28.4085, 111.6109, 29.4019}},
{"tashkent", {69.12171, 41.163421, 69.476967, 41.398638}},
{"tbilisi", {44.596922, 41.619315, 45.019694, 41.843421}},
{"tehran", {50.6575, 35.353216, 52.007904, 35.974672}},
@ -554,7 +548,7 @@ string MatchCity(ms::LatLon const & ll)
{"vienna", {16.0894775391, 48.0633965378, 16.6387939453, 48.3525987075}},
{"warszawa", {20.7202148438, 52.0322181041, 21.3024902344, 52.4091212523}},
{"washington", {-77.4920654297, 38.5954071994, -76.6735839844, 39.2216149801}},
{"wuhan", {113.6925,29.972,115.0769,31.3622}},
{"wuhan", {113.6925, 29.972, 115.0769, 31.3622}},
{"yerevan", {44.359899, 40.065411, 44.645352, 40.26398}},
{"yokohama", {139.464781, 35.312501, 139.776935, 35.592738}},
};
@ -572,7 +566,7 @@ string DetermineSurface(OsmElement * p)
{
string surface;
string smoothness;
double surfaceGrade = 2; // default is "normal"
double surfaceGrade = 2; // default is "normal"
string highway;
string trackGrade;
@ -596,38 +590,31 @@ string DetermineSurface(OsmElement * p)
return {};
// According to https://wiki.openstreetmap.org/wiki/Key:surface
static base::StringIL pavedSurfaces = {
"asphalt", "cobblestone", "chipseal", "concrete",
"metal", "paved", "paving_stones", "sett", "unhewn_cobblestone", "wood"
};
static base::StringIL pavedSurfaces = {"asphalt", "cobblestone", "chipseal", "concrete", "metal",
"paved", "paving_stones", "sett", "unhewn_cobblestone", "wood"};
static base::StringIL badSurfaces = {
"cobblestone", "dirt", "earth", "grass", "gravel", "ground", "metal", "mud", "rock", "unpaved",
"pebblestone", "sand", "sett", "snow", "stepping_stones", "unhewn_cobblestone", "wood", "woodchips"
};
"cobblestone", "dirt", "earth", "grass", "gravel", "ground", "metal", "mud",
"rock", "unpaved", "pebblestone", "sand", "sett", "snow", "stepping_stones", "unhewn_cobblestone",
"wood", "woodchips"};
static base::StringIL veryBadSurfaces = {
"dirt", "earth", "grass", "ground", "mud", "rock", "sand", "snow",
"stepping_stones", "woodchips"
};
static base::StringIL veryBadSurfaces = {"dirt", "earth", "grass", "ground", "mud",
"rock", "sand", "snow", "stepping_stones", "woodchips"};
static base::StringIL veryBadSmoothness = {
"very_bad", "horrible", "very_horrible", "impassable",
"robust_wheels", "high_clearance", "off_road_wheels", "rough"
};
static base::StringIL veryBadSmoothness = {"very_bad", "horrible", "very_horrible", "impassable",
"robust_wheels", "high_clearance", "off_road_wheels", "rough"};
static base::StringIL midSmoothness = {
"unknown", "intermediate"
};
static base::StringIL midSmoothness = {"unknown", "intermediate"};
auto const Has = [](base::StringIL const & il, string const & v)
{
bool res = false;
strings::Tokenize(v, ";:/", [&il, &res](std::string_view sv)
{
if (!res)
res = base::IsExist(il, sv);
});
strings::Tokenize(v, ";:/",
[&il, &res](std::string_view sv)
{
if (!res)
res = base::IsExist(il, sv);
});
return res;
};
@ -762,13 +749,14 @@ void PreprocessElement(OsmElement * p, CalculateOriginFnT const & calcOrg)
p->AddTag("psurface", DetermineSurface(p));
p->UpdateTag("attraction", [](string & value)
{
// "specified" is a special value which means we have the "attraction" tag,
// but its value is not "animal".
if (!value.empty() && value != "animal")
value = "specified";
});
p->UpdateTag("attraction",
[](string & value)
{
// "specified" is a special value which means we have the "attraction" tag,
// but its value is not "animal".
if (!value.empty() && value != "animal")
value = "specified";
});
string const kCuisineKey = "cuisine";
auto cuisines = p->GetTag(kCuisineKey);
@ -868,26 +856,27 @@ void PreprocessElement(OsmElement * p, CalculateOriginFnT const & calcOrg)
static CountriesLoader s_countriesChecker;
auto const dePlace = p->GetTag("de:place");
p->UpdateTag("place", [&](string & value)
{
// 1. Replace a value of 'place' with a value of 'de:place' because most people regard
// places names as 'de:place' defines it.
if (!dePlace.empty())
value = dePlace;
p->UpdateTag("place",
[&](string & value)
{
// 1. Replace a value of 'place' with a value of 'de:place' because most people regard
// places names as 'de:place' defines it.
if (!dePlace.empty())
value = dePlace;
// 2. Check valid capital. We support only place-city-capital-2 (not town, village, etc).
if (isCapital && !value.empty())
value = "city";
// 2. Check valid capital. We support only place-city-capital-2 (not town, village, etc).
if (isCapital && !value.empty())
value = "city";
// 3. Replace 'province' with 'state'.
if (value != "province")
return;
// 3. Replace 'province' with 'state'.
if (value != "province")
return;
CHECK(calcOrg, ());
auto const org = calcOrg(p);
if (org && s_countriesChecker.IsTransformToState(*org))
value = "state";
});
CHECK(calcOrg, ());
auto const org = calcOrg(p);
if (org && s_countriesChecker.IsTransformToState(*org))
value = "state";
});
if (isCapital)
p->UpdateTag("capital", [&](string & value) { value = "2"; });
@ -899,10 +888,8 @@ bool IsCarDesignatedHighway(uint32_t type)
{
case ftypes::IsWayChecker::Motorway:
case ftypes::IsWayChecker::Regular:
case ftypes::IsWayChecker::Minors:
return true;
default:
return false;
case ftypes::IsWayChecker::Minors: return true;
default: return false;
}
}
@ -920,10 +907,7 @@ void PostprocessElement(OsmElement * p, FeatureBuilderParams & params)
{
static CachedTypes const types;
auto const AddParam = [&params](ftype::CachedTypes::Type type)
{
params.AddType(types.Get(type));
};
auto const AddParam = [&params](ftype::CachedTypes::Type type) { params.AddType(types.Get(type)); };
if (!params.house.IsEmpty())
{
@ -934,8 +918,7 @@ void PostprocessElement(OsmElement * p, FeatureBuilderParams & params)
{
/// @todo Make a function like HaveAddressLikeType ?
ftype::TruncValue(t, 1);
if (t != types.Get(CachedTypes::WheelchairAny) &&
t != types.Get(CachedTypes::InternetAny))
if (t != types.Get(CachedTypes::WheelchairAny) && t != types.Get(CachedTypes::InternetAny))
{
hasSuitableType = true;
break;
@ -959,14 +942,13 @@ void PostprocessElement(OsmElement * p, FeatureBuilderParams & params)
}
}
}
exit:;
exit:;
}
}
// Process yes/no tags.
TagProcessor(p).ApplyRules({
{"wheelchair", "designated",
[&AddParam] { AddParam(CachedTypes::WheelchairYes); }},
{"wheelchair", "designated", [&AddParam] { AddParam(CachedTypes::WheelchairYes); }},
{"wifi", "~", [&AddParam] { AddParam(CachedTypes::Wlan); }},
});
@ -982,8 +964,20 @@ void PostprocessElement(OsmElement * p, FeatureBuilderParams & params)
// Foot attr is stronger than Sidewalk,
// Bicycle attr is stronger than Cycleway,
// MotorCar attr is stronger than MotorVehicle.
struct Flags { enum Type { Foot = 0, Sidewalk, Bicycle, Cycleway, MotorCar, MotorVehicle, Count }; };
int flags[Flags::Count] = {0}; // 1 for Yes, -1 for No, 0 for Undefined
struct Flags
{
enum Type
{
Foot = 0,
Sidewalk,
Bicycle,
Cycleway,
MotorCar,
MotorVehicle,
Count
};
};
int flags[Flags::Count] = {0}; // 1 for Yes, -1 for No, 0 for Undefined
for (uint32_t const vType : vTypes)
{
@ -996,15 +990,16 @@ void PostprocessElement(OsmElement * p, FeatureBuilderParams & params)
{"oneway", "yes", [&addOneway] { addOneway = true; }},
{"oneway", "1", [&addOneway] { addOneway = true; }},
{"oneway", "-1",
[&addOneway, &params] {
[&addOneway, &params]
{
addOneway = true;
params.SetReversedGeometry(true);
}},
{"oneway", "!", [&noOneway] { noOneway = true; }},
// Unlike "roundabout", "circular" is not assumed to force oneway=yes
// (https://wiki.openstreetmap.org/wiki/Tag:junction%3Dcircular), but!
// There are a lot of junction=circular without oneway tag, which is a mapping error (run overpass under England).
// And most of this junctions are assumed to be oneway.
// Unlike "roundabout", "circular" is not assumed to force oneway=yes
// (https://wiki.openstreetmap.org/wiki/Tag:junction%3Dcircular), but!
// There are a lot of junction=circular without oneway tag, which is a mapping error (run overpass under
// England). And most of this junctions are assumed to be oneway.
{"junction", "circular", [&addOneway] { addOneway = true; }},
{"junction", "roundabout", [&addOneway] { addOneway = true; }},
@ -1055,9 +1050,8 @@ void PostprocessElement(OsmElement * p, FeatureBuilderParams & params)
if (addOneway && !noOneway)
params.AddType(types.Get(CachedTypes::OneWay));
auto const ApplyFlag = [&flags, &AddParam](Flags::Type f, CachedTypes::Type yes,
CachedTypes::Type no0, CachedTypes::Type no1,
bool isDesignated)
auto const ApplyFlag = [&flags, &AddParam](Flags::Type f, CachedTypes::Type yes, CachedTypes::Type no0,
CachedTypes::Type no1, bool isDesignated)
{
if (flags[f] == 1 && !isDesignated)
AddParam(yes);
@ -1089,10 +1083,12 @@ void PostprocessElement(OsmElement * p, FeatureBuilderParams & params)
{"foot", "~", [&AddParam] { AddParam(CachedTypes::YesFoot); }},
{"ferry", "footway", [&AddParam] { AddParam(CachedTypes::YesFoot); }},
{"ferry", "pedestrian", [&AddParam] { AddParam(CachedTypes::YesFoot); }},
{"ferry", "path", [&params] {
{"ferry", "path",
[&params]
{
params.AddType(types.Get(CachedTypes::YesFoot));
params.AddType(types.Get(CachedTypes::YesBicycle));
}},
}},
{"bicycle", "!", [&AddParam] { AddParam(CachedTypes::NoBicycle); }},
{"bicycle", "~", [&AddParam] { AddParam(CachedTypes::YesBicycle); }},
@ -1125,16 +1121,15 @@ void PostprocessElement(OsmElement * p, FeatureBuilderParams & params)
{
TagProcessor(p).ApplyRules({
{"network", "London Underground", [&params] { params.SetRwSubwayType("london"); }},
{"operator", "London Overground", [&params] { params.SetRwSubwayType("london"); }},
{"network", "New York City Subway", [&params] { params.SetRwSubwayType("newyork"); }},
{"network", "Московский метрополитен", [&params] { params.SetRwSubwayType("moscow"); }},
{"network", "Петербургский метрополитен", [&params] { params.SetRwSubwayType("spb"); }},
{"network", "Verkehrsverbund Berlin-Brandenburg",
[&params] { params.SetRwSubwayType("berlin"); }},
{"network", "Verkehrsverbund Berlin-Brandenburg", [&params] { params.SetRwSubwayType("berlin"); }},
{"network", "Минский метрополитен", [&params] { params.SetRwSubwayType("minsk"); }},
{"network", "Київський метрополітен", [&params] { params.SetRwSubwayType("kiev"); }},
{"operator", "КП «Київський метрополітен»",
[&params] { params.SetRwSubwayType("kiev"); }},
{"operator", "КП «Київський метрополітен»", [&params] { params.SetRwSubwayType("kiev"); }},
{"network", "RATP", [&params] { params.SetRwSubwayType("paris"); }},
{"network", "Metro de Barcelona", [&params] { params.SetRwSubwayType("barcelona"); }},
@ -1161,8 +1156,8 @@ void PostprocessElement(OsmElement * p, FeatureBuilderParams & params)
}
} // namespace
void GetNameAndType(OsmElement * p, FeatureBuilderParams & params,
TypesFilterFnT const & filterType, CalculateOriginFnT const & calcOrg)
void GetNameAndType(OsmElement * p, FeatureBuilderParams & params, TypesFilterFnT const & filterType,
CalculateOriginFnT const & calcOrg)
{
// At this point, some preprocessing could've been done to the tags already
// in TranslatorInterface::Preprocess(), e.g. converting tags according to replaced_tags.txt.
@ -1179,89 +1174,60 @@ void GetNameAndType(OsmElement * p, FeatureBuilderParams & params,
std::string houseName, houseNumber, conscriptionHN, streetHN, addrPostcode;
std::string addrCity, addrSuburb;
feature::AddressData addr;
TagProcessor(p).ApplyRules<void(string &, string &)>(
{
{"addr:housenumber", "*", [&houseNumber](string & k, string & v)
{
houseNumber = std::move(v);
}},
{"addr:conscriptionnumber", "*", [&conscriptionHN](string & k, string & v)
{
conscriptionHN = std::move(v);
}},
{"addr:provisionalnumber", "*", [&conscriptionHN](string & k, string & v)
{
conscriptionHN = std::move(v);
}},
{"addr:streetnumber", "*", [&streetHN](string & k, string & v)
{
streetHN = std::move(v);
}},
{"contact:housenumber", "*", [&houseNumber](string & k, string & v)
{
if (houseNumber.empty())
houseNumber = std::move(v);
}},
{"addr:housename", "*", [&houseName](string & k, string & v)
{
houseName = std::move(v);
}},
{"addr:street", "*", [&addr](string & k, string & v)
{
addr.Set(feature::AddressData::Type::Street, std::move(v));
}},
{"contact:street", "*", [&addr](string & k, string & v)
{
addr.SetIfAbsent(feature::AddressData::Type::Street, std::move(v));
}},
{"addr:place", "*", [&addr](string & k, string & v)
{
addr.Set(feature::AddressData::Type::Place, std::move(v));
}},
{"addr:city", "*", [&addrCity](string & k, string & v)
TagProcessor(p).ApplyRules<void(string &, string &)>({
{"addr:housenumber", "*", [&houseNumber](string & k, string & v) { houseNumber = std::move(v); }},
{"addr:conscriptionnumber", "*", [&conscriptionHN](string & k, string & v) { conscriptionHN = std::move(v); }},
{"addr:provisionalnumber", "*", [&conscriptionHN](string & k, string & v) { conscriptionHN = std::move(v); }},
{"addr:streetnumber", "*", [&streetHN](string & k, string & v) { streetHN = std::move(v); }},
{"contact:housenumber", "*",
[&houseNumber](string & k, string & v)
{
addrCity = std::move(v);
}},
{"addr:suburb", "*", [&addrSuburb](string & k, string & v)
{
addrSuburb = std::move(v);
}},
{"addr:postcode", "*", [&addrPostcode](string & k, string & v)
{
addrPostcode = std::move(v);
}},
{"postal_code", "*", [&addrPostcode](string & k, string & v)
{
addrPostcode = std::move(v);
}},
{"contact:postcode", "*", [&addrPostcode](string & k, string & v)
{
if (addrPostcode.empty())
addrPostcode = std::move(v);
}},
{"population", "*", [&params](string & k, string & v)
{
// Get population rank.
uint64_t const population = generator::osm_element::GetPopulation(v);
if (population != 0)
params.rank = feature::PopulationToRank(population);
}},
{"ref", "*", [&params](string & k, string & v)
{
// Get reference; its used for selected types only, see FeatureBuilder::PreSerialize().
params.ref = std::move(v);
}},
{"layer", "*", [&params](string & k, string & v)
{
// Get layer.
if (params.layer == feature::LAYER_EMPTY)
{
// atoi error value (0) should match empty layer constant.
static_assert(feature::LAYER_EMPTY == 0);
params.layer = atoi(v.c_str());
params.layer = base::Clamp(params.layer, int8_t(feature::LAYER_LOW), int8_t(feature::LAYER_HIGH));
}
}},
if (houseNumber.empty())
houseNumber = std::move(v);
}},
{"addr:housename", "*", [&houseName](string & k, string & v) { houseName = std::move(v); }},
{"addr:street", "*",
[&addr](string & k, string & v) { addr.Set(feature::AddressData::Type::Street, std::move(v)); }},
{"contact:street", "*",
[&addr](string & k, string & v) { addr.SetIfAbsent(feature::AddressData::Type::Street, std::move(v)); }},
{"addr:place", "*",
[&addr](string & k, string & v) { addr.Set(feature::AddressData::Type::Place, std::move(v)); }},
{"addr:city", "*", [&addrCity](string & k, string & v) { addrCity = std::move(v); }},
{"addr:suburb", "*", [&addrSuburb](string & k, string & v) { addrSuburb = std::move(v); }},
{"addr:postcode", "*", [&addrPostcode](string & k, string & v) { addrPostcode = std::move(v); }},
{"postal_code", "*", [&addrPostcode](string & k, string & v) { addrPostcode = std::move(v); }},
{"contact:postcode", "*",
[&addrPostcode](string & k, string & v)
{
if (addrPostcode.empty())
addrPostcode = std::move(v);
}},
{"population", "*",
[&params](string & k, string & v)
{
// Get population rank.
uint64_t const population = generator::osm_element::GetPopulation(v);
if (population != 0)
params.rank = feature::PopulationToRank(population);
}},
{"ref", "*",
[&params](string & k, string & v)
{
// Get reference; its used for selected types only, see FeatureBuilder::PreSerialize().
params.ref = std::move(v);
}},
{"layer", "*",
[&params](string & k, string & v)
{
// Get layer.
if (params.layer == feature::LAYER_EMPTY)
{
// atoi error value (0) should match empty layer constant.
static_assert(feature::LAYER_EMPTY == 0);
params.layer = atoi(v.c_str());
params.layer = base::Clamp(params.layer, int8_t(feature::LAYER_LOW), int8_t(feature::LAYER_HIGH));
}
}},
});
// OSM consistency check with house numbers.
@ -1275,7 +1241,8 @@ void GetNameAndType(OsmElement * p, FeatureBuilderParams & params,
auto i = houseNumber.find('/');
if (i == std::string::npos)
{
LOG(LWARNING, (kHNLogTag, "Override housenumber for:", DebugPrintID(*p), houseNumber, conscriptionHN, streetHN));
LOG(LWARNING,
(kHNLogTag, "Override housenumber for:", DebugPrintID(*p), houseNumber, conscriptionHN, streetHN));
houseNumber = conscriptionHN + "/" + streetHN;
}
}
@ -1301,6 +1268,7 @@ void GetNameAndType(OsmElement * p, FeatureBuilderParams & params,
class CityBBox
{
std::vector<m2::RectD> m_rects;
public:
CityBBox()
{
@ -1335,17 +1303,14 @@ void GetNameAndType(OsmElement * p, FeatureBuilderParams & params,
params.SetHouseNumberAndHouseName(std::move(houseNumber), std::move(houseName));
// Fetch piste:name and piste:ref if there are no other name/ref values.
TagProcessor(p).ApplyRules<void(string &, string &)>(
{
{"piste:ref", "*", [&params](string & k, string & v)
{
if (params.ref.empty())
params.ref = std::move(v);
}},
{"piste:name", "*", [&params](string & k, string & v)
{
params.SetDefaultNameIfEmpty(std::move(v));
}},
TagProcessor(p).ApplyRules<void(string &, string &)>({
{"piste:ref", "*",
[&params](string & k, string & v)
{
if (params.ref.empty())
params.ref = std::move(v);
}},
{"piste:name", "*", [&params](string & k, string & v) { params.SetDefaultNameIfEmpty(std::move(v)); }},
});
// Stage4: Match tags to classificator feature types via mapcss-mapping.csv.

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "محطة قطار";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "محطة مترو";
"type.railway.station.subway.adana" = "محطة مترو";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: ar -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Dəmiryolu stansiyası";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Metro";
"type.railway.station.subway.adana" = "Metro";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: az -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Train Station";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Subway Station";
"type.railway.station.subway.adana" = "Subway Station";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: be -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Train Station";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Subway Station";
"type.railway.station.subway.adana" = "Subway Station";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: bg -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Train Station";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Subway Station";
"type.railway.station.subway.adana" = "Subway Station";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: ca -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Železniční stanice";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Metro";
"type.railway.station.subway.adana" = "Metro";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: cs -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Togstation";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Metro";
"type.railway.station.subway.adana" = "Metro";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: da -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Bahnhof";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "U-Bahn-Station";
"type.railway.station.subway.adana" = "U-Bahn-Station";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: de -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Σιδηροδρομικός σταθμός";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Μετρό";
"type.railway.station.subway.adana" = "Μετρό";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: el -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Train Station";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Metro Station";
"type.railway.station.subway.adana" = "Metro Station";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: en-GB -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Monorail Station";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Subway Station";
"type.railway.station.subway.adana" = "Subway Station";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: en -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Estación de tren";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Metro";
"type.railway.station.subway.adana" = "Metro";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: es-MX -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Estación de tren";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Metro";
"type.railway.station.subway.adana" = "Metro";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: es -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Raudtee jaam";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Metroo";
"type.railway.station.subway.adana" = "Metroo";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: et -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Tren geltokian";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Metroa";
"type.railway.station.subway.adana" = "Metroa";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: eu -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "ایستگاه قطار";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "حمل و نقل";
"type.railway.station.subway.adana" = "حمل و نقل";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: fa -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Rautatieasema";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Metro";
"type.railway.station.subway.adana" = "Metro";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: fi -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Gare ferroviaire";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Station de métro";
"type.railway.station.subway.adana" = "Station de métro";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: fr -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Train Station";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Subway Station";
"type.railway.station.subway.adana" = "Subway Station";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: he -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "रेलवे स्टेशन";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Subway Station";
"type.railway.station.subway.adana" = "Subway Station";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: hi -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Vasútállomás";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Metrómegálló";
"type.railway.station.subway.adana" = "Metrómegálló";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: hu -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Rel kereta api";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Stasiun bawah tanah";
"type.railway.station.subway.adana" = "Stasiun bawah tanah";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: id -->
<plist version="1.0">
<dict>

View file

@ -2960,6 +2960,8 @@
"type.railway.station.monorail" = "Stazione ferroviaria";
"type.railway.station.overground.london" = "Overground Station";
"type.railway.station.subway" = "Stazione della metrò";
"type.railway.station.subway.adana" = "Stazione della metrò";

View file

@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
* Apple Stringsdict File
* Generated by Twine
* Generated by Twine 1.1.2
* Language: it -->
<plist version="1.0">
<dict>

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