script cherchant toutes les propriétés possibles
This commit is contained in:
parent
fe53b56b9e
commit
1754735309
26
docs/deviner_les_correspondances.md
Normal file
26
docs/deviner_les_correspondances.md
Normal file
@ -0,0 +1,26 @@
|
||||
# Deviner les correspondances
|
||||
|
||||
Dans un Geojson on peut deviner à quel tag correspondent les propriétés des points de la Feature collection pour créer ses modèles de Mapper.
|
||||
|
||||
Examinez un geojson avec le script `propose_mapping_from_data.py`:
|
||||
|
||||
```shell
|
||||
# exemple avec un jeu de données de musée
|
||||
python propose_mapping_from_data.py etalab_data/musées/fr.geojson
|
||||
```
|
||||
Ce qui donne:
|
||||
```json
|
||||
{
|
||||
"Identifiant Mus\u00e9ofile": "",
|
||||
"R\u00e9gion administrative": "",
|
||||
"D\u00e9partement": "",
|
||||
"Commune": "",
|
||||
"Nom officiel du mus\u00e9e": "",
|
||||
"Adresse": "",
|
||||
"Lieu": "",
|
||||
"Code Postal": "",
|
||||
"T\u00e9l\u00e9phone": "",
|
||||
"URL": "",
|
||||
"REF_Deps": ""
|
||||
}
|
||||
```
|
@ -21,7 +21,7 @@ Export depuis overpass turbo dans OSM
|
||||
|
||||
## config
|
||||
Configurer le filtre de département et les autres options dans convert_to_osm_tags.ts.
|
||||
Vous pouvez voir le détail de la [création d'un nouveau Mapper ou convertisseur](ajout_jeu_de_données.md), les [propriétés possibles d'un convertisseur](configuration_de_conversion.md) en regardant celui des bornes de recharge de véhicule électrique par exemple: [MappingIRVE](mappings/converters/configIRVE.ts) qui est une extension du Type [MappingConfigType](mappings/mapping-config.type.ts).
|
||||
Vous pouvez voir le détail de la [création d'un nouveau Mapper ou convertisseur](ajout_jeu_de_données.md), les [propriétés possibles d'un convertisseur](configuration_de_conversion.md) en regardant celui des bornes de recharge de véhicule électrique par exemple: [MappingIRVESuisse](mappings/converters/configIRVE.ts) qui est une extension du Type [MappingConfigType](mappings/mapping-config.type.ts).
|
||||
|
||||
## utilisation
|
||||
Après avoir bien installé les paquets et récupéré un fichier Geojson de données ouvertes, vous devez avoir une configuration de conversion, puis lancer le script principal de conversion.
|
||||
|
File diff suppressed because one or more lines are too long
3
etalab_data/défibrillateurs/issy_dae.json
Normal file
3
etalab_data/défibrillateurs/issy_dae.json
Normal file
File diff suppressed because one or more lines are too long
169
mappings/converters/configIRVESuisse.ts
Normal file
169
mappings/converters/configIRVESuisse.ts
Normal file
@ -0,0 +1,169 @@
|
||||
/**
|
||||
* 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 MappingIRVESuisse: MappingConfigType = {
|
||||
config_name: "IRVE config",
|
||||
config_author: "tykayn <contact@cipherbliss.com>",
|
||||
default_properties_of_point: {
|
||||
'amenity': 'charging_station'
|
||||
},
|
||||
source: {
|
||||
geojson_path: "etalab_data/all.json",
|
||||
url: 'https://www.data.gouv.fr/fr/datasets/r/7eee8f09-5d1b-4f48-a304-5e99e8da1e26'
|
||||
},
|
||||
/**
|
||||
* 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,
|
||||
boolean_keys: [
|
||||
"prise_type_ef",
|
||||
"prise_type_2",
|
||||
"prise_type_combo_ccs",
|
||||
"prise_type_chademo",
|
||||
"gratuit",
|
||||
"paiement_acte",
|
||||
"paiement_cb",
|
||||
"cable_t2_attache"
|
||||
],
|
||||
tags: {
|
||||
// ******* nombres
|
||||
nbre_pdc: 'capacity',
|
||||
// ******* textes
|
||||
amenity: 'amenity', // conserver le tag de base
|
||||
capacity: 'capacity', // conserver le tag de base
|
||||
nom_amenageur: 'operator',
|
||||
siren_amenageur: 'owner:ref:FR:SIREN',
|
||||
nom_operateur: 'operator',
|
||||
telephone_operateur: {
|
||||
key_converted: 'operator:phone',
|
||||
convert_to_phone: true, // conversion en format international si possible
|
||||
},
|
||||
phone: {
|
||||
key_converted: 'operator:phone',
|
||||
convert_to_phone: true, // conversion en format international si possible
|
||||
},
|
||||
contact_operateur: 'operator:email', // ici, on souhaite convertir la clé contact_operateur=bidule en email=bidule
|
||||
|
||||
id_station_itinerance: 'ref:EU:EVSE',
|
||||
id_station_local: '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.
|
||||
*/
|
||||
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: {
|
||||
convert_to_boolean_value: true, // convertit en yes ou no
|
||||
},
|
||||
// observations: 'note',
|
||||
nom_station: 'description',
|
||||
nom_enseigne: 'network',
|
||||
|
||||
// ******* dates
|
||||
date_mise_en_service: 'start_date',
|
||||
// date_maj: 'source:date',
|
||||
|
||||
|
||||
// ******** champs booléens
|
||||
cable_t2_attache: {
|
||||
key_converted: 'socket:type2_cable',
|
||||
// socket:type2_cable vaut 1 dans OSM si vrai
|
||||
truthy_value: '1',
|
||||
ignore_if_falsy: true,
|
||||
}
|
||||
,
|
||||
prise_type_ef: {
|
||||
key_converted: 'socket:typee',
|
||||
ignore_if_falsy: true,
|
||||
convert_to_boolean_value: true,
|
||||
},
|
||||
prise_type_2: {
|
||||
key_converted: 'socket:type2',
|
||||
ignore_if_falsy: true,
|
||||
convert_to_boolean_value: true,
|
||||
},
|
||||
prise_type_combo_ccs: {
|
||||
key_converted: 'socket:type2_combo',
|
||||
ignore_if_falsy: true,
|
||||
convert_to_boolean_value: true,
|
||||
},
|
||||
prise_type_chademo: {
|
||||
key_converted: 'socket:chademo',
|
||||
ignore_if_falsy: true,
|
||||
convert_to_boolean_value: true,
|
||||
},
|
||||
// ******** champs plus complexes
|
||||
horaires: 'opening_hours', // déjà au bon format, enfin, en général. vérifier avec le validateur josm.
|
||||
paiement_cb: {
|
||||
key_converted: 'payment:credit_cards',
|
||||
// ignore_if_falsy: true,
|
||||
convert_to_boolean_value: true,
|
||||
},
|
||||
accessibilite_pmr: {
|
||||
key_converted: "wheelchair",
|
||||
conditional_values: {
|
||||
"Accessibilité inconnue": {
|
||||
ignore_this_data: true, // ne pas ajouter de tag si la valeur est égale à Accessibilité inconnue.
|
||||
},
|
||||
"Accessible mais non réservé PMR": {
|
||||
value_converted: "yes"
|
||||
},
|
||||
"Réservé PMR": {
|
||||
value_converted: "yes"
|
||||
},
|
||||
"Non accessible": {
|
||||
value_converted: "no"
|
||||
},
|
||||
"Mo-Fr 08:30-12:00,Mo-Fr 14:00-19:00,Sat 09:00-18:30": {
|
||||
value_converted: "Mo-Fr 08:30-12:00,Mo-Fr 14:00-19:00,Sat 09:00-18:30"
|
||||
},
|
||||
// On précise que l'on veut conserver cette valeur, par défaut tout ce qui n'est pas précisé en valeur conditionnelle n'est pas conservé
|
||||
"24/7": {
|
||||
value_converted: "24/7"
|
||||
}
|
||||
},
|
||||
},
|
||||
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: 'charging_station:output',
|
||||
socket_output_find_correspondances: true,
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
export default MappingIRVESuisse;
|
@ -1,10 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Tesla Supercharger",
|
||||
"address": "123 Main St",
|
||||
"lat": 37.7749,
|
||||
"lon": -122.4194,
|
||||
"network_operator": "Tesla"
|
||||
}
|
||||
]
|
27
propose_mapping_from_data.py
Normal file
27
propose_mapping_from_data.py
Normal file
@ -0,0 +1,27 @@
|
||||
import json
|
||||
import sys
|
||||
import json
|
||||
|
||||
# Vérifie si un argument est fourni
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: python script.py <geojson_file>")
|
||||
sys.exit(1)
|
||||
|
||||
# Ouvre le fichier GeoJSON
|
||||
with open(sys.argv[1]) as f:
|
||||
data = json.load(f)
|
||||
|
||||
# Extraire les propriétés de tous les points de la FeatureCollection
|
||||
properties = []
|
||||
for feature in data['features']:
|
||||
props = feature['properties']
|
||||
properties.extend(props.keys())
|
||||
|
||||
# Créer un dictionnaire avec toutes les clés comme clés et des valeurs par défaut vides
|
||||
defaults = {prop: '' for prop in properties}
|
||||
|
||||
# Remplacer les clés contenant "web" ou "téléphone" par "contact:website" ou "contact:phone"
|
||||
defaults.update({prop: 'contact:website' if 'web' in prop else 'contact:phone' if 'téléphone' in prop else '' for prop in properties})
|
||||
|
||||
# Convertir le dictionnaire en JSON et l'afficher
|
||||
print(json.dumps(defaults, indent=2))
|
Loading…
Reference in New Issue
Block a user