forked from osm-fr/osmose-backend
-
Notifications
You must be signed in to change notification settings - Fork 0
/
analyser_merge_public_transport_FR_zou_06.py
111 lines (101 loc) · 6.14 KB
/
analyser_merge_public_transport_FR_zou_06.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env python
#-*- coding: utf-8 -*-
###########################################################################
## ##
## Copyrights Théo Peltier 2022 ##
## ##
## This program is free software: you can redistribute it and/or modify ##
## it under the terms of the GNU General Public License as published by ##
## the Free Software Foundation, either version 3 of the License, or ##
## (at your option) any later version. ##
## ##
## This program is distributed in the hope that it will be useful, ##
## but WITHOUT ANY WARRANTY; without even the implied warranty of ##
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ##
## GNU General Public License for more details. ##
## ##
## You should have received a copy of the GNU General Public License ##
## along with this program. If not, see <http://www.gnu.org/licenses/>. ##
## ##
###########################################################################
import re
from modules.OsmoseTranslation import T_
from .Analyser_Merge import Analyser_Merge_Point, GTFS, Load_XY, Conflate, Select, Mapping, Source
class Analyser_Merge_Public_Transport_FR_zou_06(Analyser_Merge_Point):
CITY_NAME_EXTRACT_REGEX = r"^(?P<stop>.*(?<!R|A)) (?:(?:- [R|A] )?)- (?P<city>[[A-Z]+(?:[ -\/.][A-Z]*)*)$"
def __init__(self, config, logger = None):
Analyser_Merge_Point.__init__(self, config, logger)
place = "Zou 06"
self.def_class_missing_official(item = 8040, id = 131, level = 3, tags = ['merge', 'public transport', 'fix:survey', 'fix:picture'],
title = T_('{0} stop not integrated', place))
self.def_class_possible_merge(item = 8041, id = 133, level = 3, tags = ['merge', 'public transport', 'fix:chair'],
title = T_('{0} stop, integration suggestion', place))
self.def_class_update_official(item = 8042, id = 134, level = 3, tags = ['merge', 'public transport', 'fix:chair'],
title = T_('{0} stop update', place))
self.init(
"https://trouver.datasud.fr/dataset/lignes-autocars-interurbains-regionsud/resource/db4be056-c7e8-4efb-8299-4b8c6235defe",
"Export quotidien au format GTFS sur du réseau des lignes d'autocars interurbains de la Région Sud Provence-Alpes-Côte d'Azur dans les Alpes-Maritimes (06)",
GTFS(Source(attribution = "Région Sud - DataSud", millesime = "10/2022",
fileUrl = "https://trouver.datasud.fr/dataset/44187c20-e037-4733-950a-b4463d314b90/resource/286809c3-eac2-400f-8e5f-edc0690b9f8c/download/gtfs_06.zip")),
Load_XY("stop_lon", "stop_lat"),
Conflate(
select = Select(
types = ["nodes", "ways"],
tags = [{"highway": "bus_stop", "public_transport": "platform"},{"highway": "bus_stop", "public_transport": False}, {"highway":"platform"}]),
osmRef = "ref:FR:ZOU_06",
conflationDistance = 50,
mapping = Mapping(
static1 = {
"highway": "bus_stop",
"public_transport": "platform",
"bus": "yes"},
static2 = {"source": self.source},
mapping1 = {
"ref:FR:ZOU_06": lambda res: res["stop_id"].split(':')[-1],
# If stop_code is defined, the platform belongs to the Lignes d'Azur network,
# else it belongs generally to the ZOU (Région Sud) network, which some old
# Lignes d'Azur / TAM lines have been transferred to (lines 100 and 200 for example)
# If stop_name contains an upper case name, it's the station city name
"name": lambda res: self.extract_name(res['stop_name'])[0],
"addr:city": lambda res: self.extract_name(res['stop_name'])[1],
},
text = lambda tags, fields: T_(f"{place} stop of {fields['stop_name']}")) ))
def extract_name(self, stop_name):
match = re.match(self.CITY_NAME_EXTRACT_REGEX, stop_name)
if match:
return match.group("stop") if not match.group("stop").isupper() else match.group("stop").title(), self.replace(match.group("city"))
return (stop_name.title(), None)
def replace(self, string):
if string in self.replacement:
return self.replacement[string]
return string.title()
replacement = {
'AURIBEAU/SIAGNE': 'Auribeau-sur-Siagne',
'BEAULIEU / MER': 'Beaulieu-sur-Mer',
'BEZAUDUN/ ALPES': 'Bezaudun-les-Alpes',
'CAP D AIL': "Cap d'Ail",
'CHATNEUF-GRASSE': 'Châteauneuf-Grasse',
'COLLE SUR LOUP': 'La Colle-sur-Loup',
'EZE': 'Èze',
'GREOLIERES': 'Gréolières',
'LE BAR SUR LOUP': 'Le Bar-sur-Loup',
'L ESCARENE': "L'Escarène",
'REVEST LES ROCH': 'Revest-les-Roches',
'ROQUEBRUNE CAP': 'Roquebrune-Cap-Martin',
'ROQUEFT-LS-PINS': 'Roquefort-les-Pins',
'ROQUETTE/SIAGNE': "La Roquette-sur-Siagne",
'ROQUETTE/VAR': 'La Roquette-sur-Var',
'S.LAURENT-D-VAR': 'Saint-Laurent-du-Var',
'ST BENOIT': 'Saint-Benoît',
'ST-MARTIN-D.VAR': 'Saint-Martin-du-Var',
'ST-MT-ENTRAUNES': "Saint-Martin-d'Entraunes",
'ST PAUL DE VENC': 'Saint-Paul-de-Vence',
'TOUET-ESCARENE': "Touët-de-l'Escarène",
'TOUET SUR VAR': 'Touët-sur-Var',
'TOURETTE DU CHT': 'Tourette-du-Château',
'TOURRETTES/LOUP': 'Tourrettes-sur-Loup',
'VILLARS SUR VAR': 'Villars-sur-Var',
'VILLEFRANCH/MER': 'Villefranche-sur-Mer',
'VILLENEUVE-LBT': 'Villeneuve-Loubet',
'VLNVE-ENTRAUNES': "Villeneuve-d'Entraunes"
}