add osmose converter

This commit is contained in:
Tykayn 2023-10-07 22:51:54 +02:00 committed by tykayn
parent c3a27d42b6
commit 87159cee39
16 changed files with 158 additions and 2667 deletions

View File

@ -4,6 +4,7 @@
import * as fs from 'fs'
import mappingConfigIRVE from './mappings/converters/configIRVE'
import mappingConfigIRVEFromOsmose from './mappings/converters/configIRVE_osmose'
import mappingConfigIRVE_simple from './mappings/converters/mappingConfigIRVE_simple'
import mappingTest from './mappings/converters/configTest'
import mapping_engine from './mappings/engine'
@ -20,11 +21,10 @@ let use_mapping_engine = true
let mini_arguments: any = minimist(process.argv.slice(2))
// let sourceFilePathGeoJson = './etalab_data/small.json'
// let sourceFilePathGeoJson = './output/my_converted_data_set_filtered_zipcode_91.json'
// let sourceFilePathGeoJson = './output/my_converted_data_set_filtered_zipcode_91_small.json'
let output_supplement = 'phones_france';
let sourceFilePathGeoJson = './data_other/'+output_supplement+'.json'
let sourceFilePathGeoJson = './data_other/' + output_supplement + '.json'
// wip filter
let filterOnBoundingBox = true
filterOnBoundingBox = false
@ -47,6 +47,10 @@ if (mini_arguments['department']) {
filterDepartment = mini_arguments['department']
enable_filter_on_department = true
}
let osmoseFormat = false;
if (mini_arguments['osmose']) {
osmoseFormat = mini_arguments['osmose']
}
if (mini_arguments['source']) {
sourceFilePathGeoJson = mini_arguments['source']
}
@ -57,12 +61,18 @@ let Mapping_engine: any;
let outname = 'my_data_set_'
if (mini_arguments['outname']) {
output_supplement = mini_arguments['outname'];
outname = mini_arguments['outname'];
}
if (mini_arguments['testingConfig']) {
console.log('testing')
Mapping_engine = new mapping_engine(mappingTest)
} else {
}
else if(osmoseFormat) {
console.log(' *********** we use osmose converter *********')
Mapping_engine = new mapping_engine(mappingConfigIRVEFromOsmose)
}
else {
Mapping_engine = new mapping_engine(mappingConfigIRVE)
}
@ -102,7 +112,7 @@ let output_folder = 'output';
*/
function writeFile(fileName: string, fileContent: any) {
let write_path = `./${output_folder}/${fileName}`
debugLog('write file ', outname+fileName, write_path)
debugLog('write file ', outname + fileName, write_path)
console.log('write file, write_path', fileName, write_path)
@ -235,10 +245,10 @@ function convertDataForIRVE(sourceFilePath: string, mapping: any, pointCounterMa
if (converted_geo_json.features.length) {
if(output_supplement){
output_supplement = '_'+output_supplement;
if (output_supplement) {
output_supplement = '_' + output_supplement;
}
let fileNameToWrite = 'my_converted_data_set' + filteredName +output_supplement+ '.json'
let fileNameToWrite = 'my_converted_data_set' + filteredName + output_supplement + '.json'
console.log('features: ', converted_geo_json.features.length)
debugLog('convert : write file ', fileNameToWrite)

View File

@ -5,11 +5,12 @@ get_files:
echo "fichiers récupérés"
irve:
# update the open data sources, convert them to osm file
wget https://osmose.openstreetmap.fr/api/0.3/issues.geojson?full=true&status=open&item=8410&limit=20000 -O ./etalab_data/irve_bornes_recharge/osmose-item-irve-8411-intégrables.json
wget https://www.data.gouv.fr/fr/datasets/r/7eee8f09-5d1b-4f48-a304-5e99e8da1e26 -O ./etalab_data/irve_bornes_recharge/latest.json
ts-node convert_to_osm_tags.ts --engine=true --source="etalab_data/irve_bornes_recharge/latest.json" --outname="_irve-latest-etalab_"
geojson2osm "output/converted__irve-latest-etalab_.json" > "osm_output/bornes-irve-filetered_latest.osm"
# wget https://osmose.openstreetmap.fr/api/0.3/issues.geojson?full=true&status=open&item=8410&limit=20000 -O ./etalab_data/irve_bornes_recharge/osmose-item-irve-8411-intégrables.json
# wget https://www.data.gouv.fr/fr/datasets/r/7eee8f09-5d1b-4f48-a304-5e99e8da1e26 -O ./etalab_data/irve_bornes_recharge/latest.json
ts-node convert_to_osm_tags.ts --engine=true --source="etalab_data/irve_bornes_recharge/latest.json" --outname="_irve-latest-etalab"
geojson2osm "output/converted__irve-latest-etalab.json" > "osm_output/bornes-irve-filetered_latest.osm"
echo "you can open the irve converted osm file in JOSM : osm_output/bornes-irve-filetered_latest.osm "
osmose_irve:
ts-node convert_to_osm_tags.ts --engine=true --source="etalab_data/irve_bornes_recharge/osmose-item-irve-8411-intégrables.json" --outname="_irve-latest-osmose_"
geojson2osm "output/converted__irve-latest-etalab_.json" > "osm_output/bornes-irve-filetered_latest.osm"
ts-node convert_to_osm_tags.ts --osmose=true --engine=true --source="etalab_data/irve_bornes_recharge/osmose-item-irve-8411-intégrables.json" --outname="_irve-latest-osmose"
geojson2osm "etalab_data/irve_bornes_recharge/osmose-item-irve-8411-intégrables.json" > "osm_output/osmose-item-irve-8411-intégrables.osm"
geojson2osm "output/my_converted_data_set__irve-latest-osmose.json" > "osm_output/my_converted_data_set__irve-latest-osmose.osm"

View File

@ -22,12 +22,12 @@ const MappingIRVE: MappingConfigType = {
enable_coordinates_filter: false,
enable_properties_filter: true,
// add only geojson points who are found having this regex in the zipcode properties
properties: {
consolidated_code_postal: '^[76|27]'
},
bounding_box: [
{}
]
// properties: {
// consolidated_code_postal: '^[76|27]'
// },
// bounding_box: [
// {}
// ]
},
add_not_mapped_tags_too: false,
tags: {
@ -114,7 +114,7 @@ const MappingIRVE: MappingConfigType = {
convert_to_boolean_value: true,
},
accessibilite_pmr: {
// key_converted: "wheelchair",
key_converted: "wheelchair",
// conditional_values: {
// "Accessibilité inconnue": {
// // value_converted: "",
@ -137,31 +137,23 @@ const MappingIRVE: MappingConfigType = {
value_converted: "yes"
}
},
station_deux_roues: {
remove_original_key: true,
conditional_values: {
// ajout de trois tags si la valeur est yes
"yes": {
tags_to_add: [
{bicycle: "yes"},
{scooter: "yes"},
{motorcar: "no"},
]
}
}
},
// station_deux_roues: {
// remove_original_key: true,
// conditional_values: {
// // ajout de trois tags si la valeur est yes
// "yes": {
// tags_to_add: [
// {bicycle: "yes"},
// {scooter: "yes"},
// {motorcar: "no"},
// ]
// }
// }
// },
puissance_nominale: {
key_converted: 'socket:max:output',
socket_output_find_correspondances: true,
// transform_function: (original_value:string) => {
//
// },
}
// TODO gestion des puissances de bornes
// avec une fonction de transformation des valeurs
// parmi le domaine du jeu de données
// nécessite une clé conditionnelle à la valeur true d'autres clés converties.
// c'est compliquay.
},
}

View File

@ -0,0 +1,96 @@
/**
* plan de conversion des clés du jeu de données vers les tags OSM
* détail dans le tableau
* https://wiki.openstreetmap.org/wiki/France/data.gouv.fr/Bornes_de_Recharge_pour_V%C3%A9hicules_%C3%89lectriques
*/
import MappingConfigType from "../mapping-config.type";
const MappingIRVEOsmose: MappingConfigType = {
config_name: "IRVE config for Osmose IRVE items",
config_author: "tykayn <contact@cipherbliss.com>",
default_properties_of_point: {
'amenity': 'charging_station'
},
source: {
geojson_path: "etalab_data/all.json",
url: 'https://osmose.openstreetmap.fr/api/0.3/issues.geojson?full=true&status=open&item=8410&limit=20000'
},
/**
* select only certain points from the source
*/
filters: {
enable_coordinates_filter: false,
enable_properties_filter: true,
// add only geojson points who are found having this regex in the zipcode properties
// properties: {
// consolidated_code_postal: '^[76|27]'
// },
// bounding_box: [
// {}
// ]
},
add_not_mapped_tags_too: false,
tags: {
// ******* nombres
// ******* textes
amenity: 'amenity', // conserver le tag de base
capacity: 'capacity', // conserver le tag de base
'owner:ref:FR:SIREN': 'owner:ref:FR:SIREN',
operator: 'operator',
// telephone_operateur: {
// key_converted: 'operator:phone',
// convert_to_phone: true, // conversion en format international si possible
// },
'operator:phone': {
key_converted: 'operator:phone',
convert_to_phone: true, // conversion en format international si possible
},
'phone': {
key_converted: 'phone',
convert_to_phone: true, // conversion en format international si possible
},
'operator:email': 'operator:email', // ici, on souhaite convertir la clé contact_operateur=bidule en email=bidule
'ref:EU:EVSE': 'ref:EU:EVSE',
ref: 'ref',
/**
* l'info de gratuité a été mal renseignée par les opérateurs, ils mettent TRÈS souvent que c'est gratuit alors que ce n'est pas vrai.
*/
fee: 'fee',
'authentication': 'authentication',
'authentication:none': 'authentication:none',
// gratuit: {
// key_converted: 'fee',
// convert_to_boolean_value: true,
// invert_boolean_value: true,
// },
// paiement_acte:
// {
// key_converted: 'authentication:none',
// convert_to_boolean_value: true, // convertit en yes ou no
// },
reservation: 'reservation' ,
note: 'note',
fixme: 'fixme',
name: 'name',
network: 'network',
// ******* dates
start_date: 'start_date',
// ******** champs booléens
'socket:type2_cable':'socket:type2_cable' ,
'socket:typee': 'socket:typee',
'socket:type2': 'socket:type2',
'socket:type2_combo': 'socket:type2_combo',
'socket:chademo': 'socket:chademo',
// ******** champs plus complexes
opening_hours: 'opening_hours', // déjà au bon format
'payment:credit_cards': 'payment:credit_cards',
wheelchair: "wheelchair",
bicycle: "bicycle",
scooter: "scooter",
motorcar: "motorcar",
'socket:max:output': 'socket:max:output'
},
}
export default MappingIRVE;

View File

@ -269,8 +269,11 @@ export default class {
}
// gestion des puissances de bornes
// avec une fonction de transformation des valeurs
// parmi le domaine du jeu de données
// nécessite une clé conditionnelle à la valeur true d'autres clés converties.
if (configObject.socket_output_find_correspondances) {
// this.current_geojson_point
// trouver à quel socket ça correspond
// si y'a plusieurs sockets, utiliser socket:max:output
let we_use_max_output = false;
@ -317,7 +320,7 @@ export default class {
// debug land
if (has_prise_type_combo_ccs) {
newProperties['socket:type_2_combo:output'] = out;
// console.log('socket:type_2_combo:output', out, originalValue)
this.stats.power_output++
}
if (we_use_max_output) {
@ -325,6 +328,7 @@ export default class {
} else {
if (has_prise_type_2 && prise_type_e) {
newProperties['socket:type_2:output'] = out;
this.stats.power_output++
console.log('2 prises, attribuer la plus haute valeur à la type 2', out)
}
@ -332,17 +336,25 @@ export default class {
if (has_prise_type_2) {
newProperties['socket:type_2:output'] = out;
// console.log('socket:type_2:output', out)
newProperties['socket:type_2'] = 1;
this.stats.power_output++
}
if (has_prise_type_combo_ccs) {
newProperties['socket:type2_combo:output'] = out;
// console.log('socket:type_2_combo:output', out)
newProperties['socket:type2_combo'] = 1;
this.stats.power_output++
}
if (prise_type_chademo) {
newProperties['socket:chademo:output'] = out;
newProperties['socket:chademo'] = 1;
this.stats.power_output++
}
if (prise_type_e) {
newProperties['socket:typee:output'] = out;
newProperties['socket:typee'] = 1;
this.stats.power_output++
}
} else {
console.log('no sockets', this.current_geojson_point.properties.ref)

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<osm version="0.6" generator="geojsontoosm"><node id="-1" lat="48.61478749999999" lon="2.1082129"><tag k="uuid" v="515d6fc7-bbd2-816d-436b-ede80201b4b3"/><tag k="item" v="8040"/><tag k="class" v="31"/><tag k="source_id" v="425090"/><tag k="elems" v="[object Object]"/><tag k="subtitle" v="arrêt IdFM de Launay-Maréchaux"/><tag k="country" v="france_ile_de_france_essonne"/><tag k="analyser" v="Merge_IdFM_Bus"/><tag k="title" v="Arrêt de bus from IdFM not integrated"/><tag k="level" v="3"/><tag k="timestamp" v="2023-08-10T02:16:52+00:00"/><tag k="menu" v="transport en commun"/><tag k="dat" v="-1"/></node><node id="-2" lat="48.61621830000001" lon="2.1277116000000005"><tag k="uuid" v="389a288b-749d-cc61-e735-18e4e3779791"/><tag k="item" v="8040"/><tag k="class" v="31"/><tag k="source_id" v="425090"/><tag k="elems" v="[object Object]"/><tag k="subtitle" v="arrêt IdFM de Gare autoroutière"/><tag k="country" v="france_ile_de_france_essonne"/><tag k="analyser" v="Merge_IdFM_Bus"/><tag k="title" v="Arrêt de bus from IdFM not integrated"/><tag k="level" v="3"/><tag k="timestamp" v="2023-08-10T02:16:52+00:00"/><tag k="menu" v="transport en commun"/><tag k="dat" v="-1"/></node><node id="-3" lat="48.61623530000001" lon="2.1275757000000004"><tag k="uuid" v="798a6cf4-bafd-471f-b616-1f143e0f1baf"/><tag k="item" v="8040"/><tag k="class" v="31"/><tag k="source_id" v="425090"/><tag k="elems" v="[object Object]"/><tag k="subtitle" v="arrêt IdFM de Gare autoroutière"/><tag k="country" v="france_ile_de_france_essonne"/><tag k="analyser" v="Merge_IdFM_Bus"/><tag k="title" v="Arrêt de bus from IdFM not integrated"/><tag k="level" v="3"/><tag k="timestamp" v="2023-08-10T02:16:52+00:00"/><tag k="menu" v="transport en commun"/><tag k="dat" v="-1"/></node></osm>

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<osm version="0.6" generator="geojsontoosm"><node id="-1" lat="48.6579437" lon="2.2700457999999997"><tag k="amenity" v="charging_station"/></node></osm>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,304 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' generator='JOSM'>
<node id='-25362' action='modify' visible='true' lat='44.8588889' lon='-0.5843334'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='1c513398-b37a-aee2-8051-f8be4f0d9fbd' />
</node>
<node id='-25363' action='modify' visible='true' lat='44.8549445' lon='-0.6001111'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='c6601fa2-e950-f969-13c0-bc671c79385d' />
</node>
<node id='-25364' action='modify' visible='true' lat='47.448894' lon='-0.5628872'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='a31ce43d-02c7-65af-fb18-6620b14c7886' />
</node>
<node id='-25365' action='modify' visible='true' lat='44.8661389' lon='-0.5607778'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='d188d9a4-f9bf-347b-fcea-e7ab2fafa775' />
</node>
<node id='-25366' action='modify' visible='true' lat='45.6929897' lon='4.7867915'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Rue Edouard Millaud - Vers la Maison Ricard' />
<tag k='ref' v='a5d761e2-9e14-825b-80f8-084787cdcc08' />
</node>
<node id='-25367' action='modify' visible='true' lat='45.6986067' lon='4.794956'>
<tag k='amenity' v='toilets' />
<tag k='description' v='45 Avenue Georges Clemenceau - Parc Villa Chapuis' />
<tag k='ref' v='ee76c558-d108-89a6-c79e-7feb16542c1f' />
</node>
<node id='-25368' action='modify' visible='true' lat='47.4808048' lon='-0.5641256'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='1e99edc0-eafb-ce16-e296-12ca3969fee2' />
</node>
<node id='-25369' action='modify' visible='true' lat='47.2434042' lon='-1.5693466'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='f832ae68-1a1a-4e49-4738-c601c7230815' />
</node>
<node id='-25370' action='modify' visible='true' lat='47.1693483' lon='-1.6200606'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='d6e4691d-a99d-3fa6-fb14-d702aff165fd' />
</node>
<node id='-25371' action='modify' visible='true' lat='47.2618953' lon='-1.5346044'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='83cebc90-64c4-27f7-fc16-dc91e4087191' />
</node>
<node id='-25372' action='modify' visible='true' lat='47.2177147' lon='-1.5624878'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='2a39782e-11eb-d6dc-8d86-7bb10e29bc5b' />
</node>
<node id='-25373' action='modify' visible='true' lat='47.1845762' lon='-1.5477551'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='4b07e006-530c-6170-ed45-e403f70eeefe' />
</node>
<node id='-25374' action='modify' visible='true' lat='47.1375981' lon='-1.722317'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='4fc8f6b4-c20c-e131-8b0c-67fdc5cd01bb' />
</node>
<node id='-25375' action='modify' visible='true' lat='45.7562399' lon='4.8171942'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Rue Des Macchabées' />
<tag k='ref' v='f6169a77-30e6-d011-4986-a86da09e0fe5' />
</node>
<node id='-25376' action='modify' visible='true' lat='44.8736389' lon='-0.5459167'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='9026fd4d-339a-3f7a-0b04-08ea4a256373' />
</node>
<node id='-25377' action='modify' visible='true' lat='43.6202834' lon='1.435289'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='e4b8451c-6c3d-f9e1-49f5-55712e4b1747' />
</node>
<node id='-25378' action='modify' visible='true' lat='43.5781322' lon='1.4408387'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='fb09f3ec-79f8-2ae5-ae49-121f407f0eed' />
</node>
<node id='-25379' action='modify' visible='true' lat='43.5919366' lon='1.4449299'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='ef2c65ea-4f16-89ea-0847-8f54b4acfe71' />
</node>
<node id='-25380' action='modify' visible='true' lat='43.6105256' lon='1.4398834'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='5bab5a87-6ad6-e8bd-8fb1-2cbd03f483d3' />
</node>
<node id='-25381' action='modify' visible='true' lat='45.7754463' lon='4.8531544'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Allée Du Parc Aux Daims - Parc aux daims - Opens: 06:30 to 22:30 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='97fd53cf-2343-d76d-690f-7c4f3810d1f4' />
</node>
<node id='-25382' action='modify' visible='true' lat='43.6108007' lon='3.8764752'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='ac6f6541-718e-d59d-6606-6c07dee92296' />
</node>
<node id='-25383' action='modify' visible='true' lat='47.1915185' lon='-1.5695263'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='3c5288ad-22e4-20cc-9aaf-815e32b53493' />
</node>
<node id='-25384' action='modify' visible='true' lat='47.1769998' lon='-1.5930762'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='c82970ee-00dc-7780-1fa1-7cef2527b612' />
</node>
<node id='-25385' action='modify' visible='true' lat='47.1763905' lon='-1.6241981'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='a595814f-560a-b16d-9001-4650f5459573' />
</node>
<node id='-25386' action='modify' visible='true' lat='47.2228205' lon='-1.5277523'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='9f35ed29-c2f8-d0cf-5368-5532ba47002a' />
</node>
<node id='-25387' action='modify' visible='true' lat='47.2424384' lon='-1.5670145'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='8f678147-05eb-7656-a9b4-37411ab788a1' />
</node>
<node id='-25388' action='modify' visible='true' lat='47.1857527' lon='-1.7260937'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='a1240c09-b471-cc5e-6043-c18ecacb4071' />
</node>
<node id='-25389' action='modify' visible='true' lat='47.1709208' lon='-1.5108851'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='1d03e486-314f-395b-29a5-6116ab39f6fd' />
</node>
<node id='-25390' action='modify' visible='true' lat='47.4598889' lon='-0.5208869'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='28bb6923-d46b-b6ad-f99c-de0f6b5fe531' />
</node>
<node id='-25391' action='modify' visible='true' lat='47.4514122' lon='-0.5379183'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='94c28bf6-8ce8-5671-bdf6-b97b61815470' />
</node>
<node id='-25392' action='modify' visible='true' lat='45.7813219' lon='4.8506404'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Allée Du Lac - Roseraie - Opens: 06:30 to 22:30 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='7aacfcea-a039-e92b-5840-34e9a2fd2ac6' />
</node>
<node id='-25393' action='modify' visible='true' lat='45.8778336' lon='4.8408109'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Place Du 8 Mai' />
<tag k='ref' v='071d4f7f-44c5-63e6-d88c-818a01d0f74c' />
</node>
<node id='-25394' action='modify' visible='true' lat='45.683623' lon='4.7891905'>
<tag k='amenity' v='toilets' />
<tag k='description' v='80 Route De Vourles - Dans les vestiaires' />
<tag k='ref' v='c040a346-7e72-5ab3-6359-a69f9bd6e652' />
</node>
<node id='-25395' action='modify' visible='true' lat='45.7037785' lon='4.8723682'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Rue Danielle Casanova - Entre square gabriel péri et rue danielle casanova' />
<tag k='ref' v='29e31c67-3b9f-c032-0cef-2160d76557b0' />
</node>
<node id='-25396' action='modify' visible='true' lat='45.7771205' lon='4.7948299'>
<tag k='amenity' v='toilets' />
<tag k='description' v='249 Boulevard De La Duchère - ouest' />
<tag k='ref' v='9f5243ee-df9b-3c09-c215-77f80f0f4693' />
</node>
<node id='-25397' action='modify' visible='true' lat='45.7786941' lon='4.8520741'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Allée Achille Lignon - côté Parc Tête d&apos;Or - Opens: 05:00 to 22:00 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='118beacd-6f0c-681d-f79f-e923bf4ed6b1' />
</node>
<node id='-25398' action='modify' visible='true' lat='45.7615321' lon='4.8748475'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Jardin Des Tout Petits Adolphe Lafont' />
<tag k='ref' v='57e04e41-d750-59e4-be00-4a236fcf8b3a' />
</node>
<node id='-25399' action='modify' visible='true' lat='43.579335' lon='1.483536'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='7e062930-2580-8a57-3961-491a189d653e' />
</node>
<node id='-25400' action='modify' visible='true' lat='45.7671536' lon='4.833732'>
<tag k='amenity' v='toilets' />
<tag k='description' v='20 Place Des Terreaux - dans cour intérieure - Opens: 10:00 to 18:00 (Monday, Tuesday, Wednesday, Thursday) | 10:30 to 18:00 (Friday) | 10:00 to 18:00 (Saturday, Sunday)' />
<tag k='ref' v='a7c71b8f-97dc-e061-583c-aba8c691e664' />
</node>
<node id='-25401' action='modify' visible='true' lat='45.8051889' lon='4.7985096'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Rue Du Commandant Israël - A côté du cimetière' />
<tag k='ref' v='a0918ad5-4f46-9866-2846-b9a5629f7199' />
</node>
<node id='-25402' action='modify' visible='true' lat='45.7942536' lon='4.7894149'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Rue De La Mairie - à côté de la place de la Liberté' />
<tag k='ref' v='7b3062e4-b690-f795-afe9-37f5f33f8179' />
</node>
<node id='-25403' action='modify' visible='true' lat='45.742916' lon='4.8150086'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Place De La Capitainerie - Opens: 05:00 to 22:00 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='9a85035d-120b-82ef-96de-09246a0c175d' />
</node>
<node id='-25404' action='modify' visible='true' lat='45.7786066' lon='4.8585524'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Allée Du Chemin De Fer - Chalet des gardes - Opens: 06:30 to 22:30 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='8cd4672b-bd84-9c23-42ee-a012bb807906' />
</node>
<node id='-25405' action='modify' visible='true' lat='45.7556361' lon='4.7897136'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Rue Joliot Curie' />
<tag k='ref' v='105b87f0-6321-65ce-1f1f-2996b8cac793' />
</node>
<node id='-25406' action='modify' visible='true' lat='45.8759325' lon='4.8383769'>
<tag k='amenity' v='toilets' />
<tag k='description' v='2811 Quai Pasteur - Vers pont de neuville' />
<tag k='ref' v='77c3b427-6a4a-74c4-2aa3-c1ca5c375b6c' />
</node>
<node id='-25407' action='modify' visible='true' lat='45.7780764' lon='4.8233359'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Rue Henri Gorjus - Opens: 08:00 to 22:00 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='67fb5b67-4eb2-19ba-30a8-3ba15334b096' />
</node>
<node id='-25408' action='modify' visible='true' lat='45.757464' lon='4.8907961'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Face Au 31 Avenue Général Leclerc - Opens: 06:00 to 22:00 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='d9f9a023-ac2d-446c-2c98-e0049d11d79f' />
</node>
<node id='-25409' action='modify' visible='true' lat='45.8023983' lon='4.8517047'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Avenue Louis Dufour - Cimetière' />
<tag k='ref' v='af0884b3-1ae0-e485-6c10-17a8e9645a0f' />
</node>
<node id='-25410' action='modify' visible='true' lat='45.7535099' lon='4.849836'>
<tag k='amenity' v='toilets' />
<tag k='description' v='7 Place Aristide Briand - en face - Opens: 06:00 to 22:00 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='6a9b1744-0d7e-470e-a54e-291c1a8edbc0' />
</node>
<node id='-25411' action='modify' visible='true' lat='45.7461219' lon='4.8509877'>
<tag k='amenity' v='toilets' />
<tag k='description' v='2 Ruelle Du Grand Casernement - doûves - Opens: 06:30 to 22:30 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='66ed7ab3-fdd3-624f-e35b-ac87dd1b81fd' />
</node>
<node id='-25412' action='modify' visible='true' lat='45.6840537' lon='4.785712'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Allée De Léquinoxe' />
<tag k='ref' v='33df5687-b901-0700-4a3a-859d68bb896d' />
</node>
<node id='-25413' action='modify' visible='true' lat='44.8271944' lon='-0.5579723'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='ebcb4e86-b1b5-88fe-0066-c824563ed9fc' />
</node>
<node id='-25414' action='modify' visible='true' lat='43.6517002' lon='1.4382583'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='2032afd0-7fe3-6325-9dab-c5119415906d' />
</node>
<node id='-25415' action='modify' visible='true' lat='43.6084695' lon='3.8795856'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='60e5db64-4974-e268-6b93-2cdf4f5a7485' />
</node>
<node id='-25416' action='modify' visible='true' lat='43.6285099' lon='3.817422'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='75d377f5-ee2a-bb16-a626-e7a541f76808' />
</node>
<node id='-25417' action='modify' visible='true' lat='47.4594562' lon='-0.5369829'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='745b6237-6c33-54ba-1c71-8d021225def3' />
</node>
<node id='-25418' action='modify' visible='true' lat='47.4746977' lon='-0.585873'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='9fc09c55-d958-3c1a-b9b0-3cb58ab5901f' />
</node>
<node id='-25419' action='modify' visible='true' lat='47.4728871' lon='-0.5545613'>
<tag k='amenity' v='toilets' />
<tag k='ref' v='a01ad7a4-46ba-814a-5875-ce37ca639519' />
</node>
<node id='-25420' action='modify' visible='true' lat='45.6898564' lon='4.7867978'>
<tag k='amenity' v='toilets' />
<tag k='description' v='179 Avenue De Gadagne - Dans les vestiaires' />
<tag k='ref' v='c7eed8a6-71fe-5843-ea73-8039e932eb47' />
</node>
<node id='-25421' action='modify' visible='true' lat='45.787886' lon='4.9181461'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Avenue Du 8 Mai 1945 - Opens: 09:00 to 18:00 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) | 09:00 to 20:00 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) | 09:00 to 20:00 (, , , , , , , , , , , , , , , , , , , , , , , ) | 09:00 to 18:00 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='19369769-d365-bfe6-3c49-38f0a52ca419' />
</node>
<node id='-25422' action='modify' visible='true' lat='45.6983773' lon='4.8135358'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Chemin Charmet' />
<tag k='ref' v='9f1022e1-e09b-a8f0-dd46-16122d0359ff' />
</node>
<node id='-25423' action='modify' visible='true' lat='45.797594' lon='4.779185'>
<tag k='amenity' v='toilets' />
<tag k='description' v='12 Chemin Du Coulouvrier' />
<tag k='ref' v='56f83393-7a61-fa76-11b7-6b5768a75a62' />
</node>
<node id='-25424' action='modify' visible='true' lat='45.780005' lon='4.8580574'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Allée Des Ébats - Pelouse des ébats - Opens: 06:30 to 22:30 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='d26e73c3-f033-0b04-3fc4-9ba016964e16' />
</node>
<node id='-25425' action='modify' visible='true' lat='45.7260336' lon='4.8250354'>
<tag k='amenity' v='toilets' />
<tag k='description' v='3 Allée Pierre De Coubertin - vers locomotive - Opens: 06:30 to 22:30 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='680a7b9f-9495-9614-2ba4-eea51852c925' />
</node>
<node id='-25426' action='modify' visible='true' lat='45.6492752' lon='4.794444'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Place De La Mairie' />
<tag k='ref' v='05aeb2ce-5bb7-5cd3-cf96-765a19ef94e2' />
</node>
<node id='-25427' action='modify' visible='true' lat='45.7767311' lon='4.8161598'>
<tag k='amenity' v='toilets' />
<tag k='description' v='Rue Chazière - Opens: 08:00 to 22:00 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='6c753e31-4eb1-9330-324a-16a4f52b9461' />
</node>
<node id='-25428' action='modify' visible='true' lat='45.7886563' lon='4.8012736'>
<tag k='amenity' v='toilets' />
<tag k='description' v='40 Boulevard De Balmont - Marché de la Duchère - Opens: 05:00 to 22:00 (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)' />
<tag k='ref' v='f26e3f48-5069-694d-32f8-d3f8677d001f' />
</node>
</osm>