start bbox filtering

This commit is contained in:
Tykayn 2023-07-29 22:16:36 +02:00 committed by tykayn
parent 72c335d270
commit bfb59df09c
2 changed files with 1518839 additions and 168 deletions

View File

@ -1,27 +1,26 @@
/** /**
* convertisseur de données de bornes de recharge électrique à partir de données Chargemap et open data Etalab * convertisseur de données de bornes de recharge électrique à partir de données Chargemap et open data Etalab
*/ */
import fs from 'node-fs'; import fs from 'node-fs'
let show_debug = 0;
let show_debug = 0
// wip filter // wip filter
let filterOnBoundingBox = true let filterOnBoundingBox = true
filterOnBoundingBox = false
let boundingBoxCoordinates = { let boundingBoxCoordinates = {
xMin: 1.91, xMin: 1.91,
yMin: 48.7,
xMax: 2.38, xMax: 2.38,
yMin: 48.7,
yMax: 48.4, yMax: 48.4,
} }
let filterCoordinates = true; let filterCoordinates = true
let enableFilterOnDepartment = false; let enableFilterOnDepartment = false
let filterDepartment = 91; let filterDepartment = 91
let filterZipCode = new RegExp(`^${filterDepartment}`); let filterZipCode = new RegExp(`^${filterDepartment}`)
let filterZipCodeAdresse = new RegExp(` ${filterDepartment}`); let filterZipCodeAdresse = new RegExp(` ${filterDepartment}`)
let filteredName = '' let filteredName = ''
if (enableFilterOnDepartment) { if (enableFilterOnDepartment) {
@ -30,15 +29,14 @@ if(enableFilterOnDepartment){
if (filterOnBoundingBox) { if (filterOnBoundingBox) {
filteredName = '_filtered_bbox_' + boundingBoxCoordinates.xMin + '-' + boundingBoxCoordinates.xMax + '_' + boundingBoxCoordinates.yMin + '-' + boundingBoxCoordinates.yMax filteredName = '_filtered_bbox_' + boundingBoxCoordinates.xMin + '-' + boundingBoxCoordinates.xMax + '_' + boundingBoxCoordinates.yMin + '-' + boundingBoxCoordinates.yMax
} }
let pointCounterMax = 1000000; let pointCounterMax = 1000000
let limitConversionToFirstPoint = false; let limitConversionToFirstPoint = false
// limitConversionToFirstPoint = true; // limitConversionToFirstPoint = true;
if (limitConversionToFirstPoint) { if (limitConversionToFirstPoint) {
pointCounterMax = 1 pointCounterMax = 1
} }
// let sourceFileChargemapJson = './chargemap_data/hurepoix.json' // let sourceFileChargemapJson = './chargemap_data/hurepoix.json'
let sourceFileIRVEGeoJson = './etalab_data/latest.json' let sourceFileIRVEGeoJson = './etalab_data/latest.json'
/** /**
@ -47,31 +45,31 @@ let sourceFileIRVEGeoJson = './etalab_data/latest.json'
* https://wiki.openstreetmap.org/wiki/France/data.gouv.fr/Bornes_de_Recharge_pour_V%C3%A9hicules_%C3%89lectriques * https://wiki.openstreetmap.org/wiki/France/data.gouv.fr/Bornes_de_Recharge_pour_V%C3%A9hicules_%C3%89lectriques
*/ */
let mappingConfigIRVE = { let mappingConfigIRVE = {
amenity: "amenity", // conserver le tag de base amenity: 'amenity', // conserver le tag de base
capacity: "capacity", // conserver le tag de base capacity: 'capacity', // conserver le tag de base
nom_amenageur: "operator", nom_amenageur: 'operator',
siren_amenageur: "owner:ref:FR:SIREN", siren_amenageur: 'owner:ref:FR:SIREN',
nom_operateur: "operator", nom_operateur: 'operator',
telephone_operateur: "phone", telephone_operateur: 'phone',
contact_operateur: "email", // ici, on souhaite convertir la clé contact_operateur=bidule en email=bidule contact_operateur: 'email', // ici, on souhaite convertir la clé contact_operateur=bidule en email=bidule
nbre_pdc: "capacity", nbre_pdc: 'capacity',
id_station_itinerance: "ref:EU:EVSE", id_station_itinerance: 'ref:EU:EVSE',
id_station_local: "ref", id_station_local: 'ref',
prise_type_ef: "socket:typee", prise_type_ef: 'socket:typee',
prise_type_2: "socket:type2", prise_type_2: 'socket:type2',
prise_type_combo_ccs: "socket:type2_combo", prise_type_combo_ccs: 'socket:type2_combo',
prise_type_chademo: "socket:chademo", prise_type_chademo: 'socket:chademo',
gratuit: "fee", gratuit: 'fee',
paiement_acte: "authentication:none", paiement_acte: 'authentication:none',
paiement_cb: "payment:credit_cards", paiement_cb: 'payment:credit_cards',
reservation: "reservation", reservation: 'reservation',
accessibilite_pmr: "wheelchair", accessibilite_pmr: 'wheelchair',
date_mise_en_service: "start_date", date_mise_en_service: 'start_date',
observations: "note", observations: 'note',
date_maj: "source:date", date_maj: 'source:date',
nom_station: "name", nom_station: 'name',
nom_enseigne: "network", nom_enseigne: 'network',
cable_t2_attache: "socket:type2_cable", cable_t2_attache: 'socket:type2_cable',
// TODO gestion des types dont on doit convertir la valeur // TODO gestion des types dont on doit convertir la valeur
// station_deux_roues => // station_deux_roues =>
@ -83,7 +81,6 @@ let mappingConfigIRVE = {
// consolidated_code_postal: "zipcode", // consolidated_code_postal: "zipcode",
} }
function debugLog (message) { function debugLog (message) {
if (!show_debug) { if (!show_debug) {
return return
@ -91,8 +88,8 @@ function debugLog(message) {
console.log('debug: ', ...message) console.log('debug: ', ...message)
} }
function convertDataForIRVE(sourceFilePath, mapping, pointCounterMax) { function convertDataForIRVE (sourceFilePath, mapping, pointCounterMax, boundingBoxCoordinates) {
debugLog('convertDataFromChargemap from ', sourceFilePath); debugLog('convertDataFromChargemap from ', sourceFilePath)
let convertedGeoJson = { let convertedGeoJson = {
type: 'FeatureCollection', type: 'FeatureCollection',
@ -100,11 +97,11 @@ function convertDataForIRVE(sourceFilePath, mapping, pointCounterMax) {
} }
fs.readFile(sourceFilePath, 'utf8', function (err, data) { fs.readFile(sourceFilePath, 'utf8', function (err, data) {
let pointcounter = 0; let pointcounter = 0
if (err) { if (err) {
return debugLog(err); return debugLog(err)
} }
let dataTransformed = JSON.parse(data); let dataTransformed = JSON.parse(data)
// debug('data keys ', Object.keys(dataTransformed)) // debug('data keys ', Object.keys(dataTransformed))
debugLog('debug: properties of point 0', dataTransformed.features[0]) debugLog('debug: properties of point 0', dataTransformed.features[0])
@ -119,7 +116,7 @@ function convertDataForIRVE(sourceFilePath, mapping, pointCounterMax) {
console.log('listOfPoints.length', listOfPoints.length) console.log('listOfPoints.length', listOfPoints.length)
listOfPoints.forEach(featurePoint => { listOfPoints.forEach(featurePoint => {
let regextestresult = true; let regextestresult = true
if (enableFilterOnDepartment) { if (enableFilterOnDepartment) {
console.log('filtre sur les départements activé') console.log('filtre sur les départements activé')
@ -131,23 +128,21 @@ function convertDataForIRVE(sourceFilePath, mapping, pointCounterMax) {
} else if (filterOnBoundingBox) { } else if (filterOnBoundingBox) {
console.log('filtre sur les coordonnées activé') console.log('filtre sur les coordonnées activé')
let x = coordonneesXY[0] let x = featurePoint.properties.coordonneesXY[0]
let xMin = boundingBoxCoordinates.xMin let xMin = boundingBoxCoordinates.xMin
let xMax = boundingBoxCoordinates.xMax let xMax = boundingBoxCoordinates.xMax
let yMin = boundingBoyCoordinates.yMin let yMin = boundingBoxCoordinates.yMin
let yMax = boundingBoyCoordinates.yMay let yMax = boundingBoxCoordinates.yMax
let y = coordonneesXY[1] let y = featurePoint.properties.coordonneesXY[1]
regextestresult = ( regextestresult = (
filterZipCode.test(x >= xMin && x <= xMax) (x >= xMin && x <= xMax)
&& &&
filterZipCode.test(y >= yMin && y <= yMax) (y >= yMin && y <= yMax)
) )
} }
// filter points depending on zipcode // filter points depending on zipcode
if (filterCoordinates && regextestresult) { if (filterCoordinates && regextestresult) {
@ -167,19 +162,19 @@ function convertDataForIRVE(sourceFilePath, mapping, pointCounterMax) {
} }
} }
// } // }
pointcounter++; pointcounter++
}) })
// output new geojson // output new geojson
console.log('convertedGeoJson.features.length', convertedGeoJson.features.length) console.log('convertedGeoJson.features.length', convertedGeoJson.features.length)
// write file on disk // write file on disk
let fileNameToWrite = 'my_converted_data_set'+filteredName+'.json'; let fileNameToWrite = 'my_converted_data_set' + filteredName + '.json'
console.log('write file ', fileNameToWrite) console.log('write file ', fileNameToWrite)
writeJsonFile(fileNameToWrite, JSON.stringify(convertedGeoJson, null, 2)) writeJsonFile(fileNameToWrite, JSON.stringify(convertedGeoJson, null, 2))
debugLog('mapped output:', convertedGeoJson.features) debugLog('mapped output:', convertedGeoJson.features)
return convertedGeoJson; return convertedGeoJson
} }
}) })
} }
@ -215,26 +210,24 @@ function mapElementFromConf(featurePoint, mappingConfig) {
return basePoint return basePoint
} }
function writeJsonFile (fileName, fileContent) { function writeJsonFile (fileName, fileContent) {
debugLog('write file ', fileName); debugLog('write file ', fileName)
return fs.writeFile( return fs.writeFile(
`./output/${fileName}`, `./output/${fileName}`,
fileContent, fileContent,
"utf8", 'utf8',
(err) => { (err) => {
if (err) { if (err) {
debugLog(`Error writing file: ${err}`); debugLog(`Error writing file: ${err}`)
} else { } else {
debugLog(`File ${fileName} is written successfully!`); debugLog(`File ${fileName} is written successfully!`)
} }
} }
); )
} }
console.log('pointCounterMax', pointCounterMax) console.log('pointCounterMax', pointCounterMax)
convertDataForIRVE(sourceFileIRVEGeoJson, mappingConfigIRVE, pointCounterMax) convertDataForIRVE(sourceFileIRVEGeoJson, mappingConfigIRVE, pointCounterMax, boundingBoxCoordinates)
// convertDataFromChargemap(sourceFileChargemapJson, mappingConfigIRVE) // convertDataFromChargemap(sourceFileChargemapJson, mappingConfigIRVE)

File diff suppressed because it is too large Load Diff