2024-12-28 17:00:21 +01:00
/ * *
* Fonctions liées à l 'édition des données OSM et à l' interaction avec JOSM
* /
2024-12-28 17:59:15 +01:00
/ * *
* Envoyer les bornes de recharge de la zone visible à JOSM
* @ param { * } map
* /
2024-12-28 23:14:38 +01:00
function sendToJOSM ( map , geojson _points ) {
console . log ( 'geojson_points' , geojson _points ) ;
2024-12-28 17:00:21 +01:00
2024-12-28 23:14:38 +01:00
const center = map . getCenter ( ) ;
const centerLat = center . lat ;
const centerLng = center . lng ;
// Conversion approximative de 1 mètre en degrés (varie selon la latitude)
const meterInDegrees = 0.00001 ;
const minLat = centerLat - meterInDegrees ;
const maxLat = centerLat + meterInDegrees ;
const minLng = centerLng - meterInDegrees ;
const maxLng = centerLng + meterInDegrees ;
const bbox = ` ${ minLng } , ${ minLat } , ${ maxLng } , ${ maxLat } ` ;
// Construire la chaîne de sélection pour tous les nodeIds de stations de recharge
let selectString = '' ;
if ( geojson _points && geojson _points . features ) {
selectString = geojson _points . features
. map ( feature => ` &select= ${ feature . properties . id } ` )
. join ( '' ) ;
}
const josmUrl = ` http://127.0.0.1:8111/load_and_zoom?layer_name=bornes%20de%20recharge%20depuis%20OSM&left= ${ minLng } &right= ${ maxLng } &top= ${ maxLat } &bottom= ${ minLat } &select=node[amenity=charging_station] ${ selectString } ` ;
// Construire l'URL pour la requête Overpass
const overpassQuery = ` [out:json][timeout:25];
(
node [ amenity = charging _station ] ( $ { minLat } , $ { minLng } , $ { maxLat } , $ { maxLng } ) ;
) ;
out body ; ` ;
const overpassUrl = ` https://overpass-api.de/api/interpreter?data= ${ encodeURIComponent ( overpassQuery ) } ` ;
// Construire l'URL JOSM avec la requête Overpass
const josmUrlWithOverpass = ` ${ josmUrl } &url= ${ encodeURIComponent ( overpassUrl ) } ` ;
console . log ( 'josmUrl' , josmUrl ) ;
2024-12-28 17:00:21 +01:00
2024-12-28 17:59:15 +01:00
fetch ( josmUrl )
2024-12-28 17:00:21 +01:00
. then ( response => {
2024-12-28 23:14:38 +01:00
if ( ! response . ok ) {
2024-12-28 17:59:15 +01:00
alert ( 'Erreur : JOSM doit être ouvert avec l\'option "Contrôle à distance" activée' ) ;
2024-12-28 17:00:21 +01:00
}
} )
. catch ( error => {
console . error ( 'Erreur JOSM:' , error ) ;
2024-12-28 17:59:15 +01:00
alert ( 'Erreur : JOSM doit être ouvert avec l\'option "Contrôle à distance" activée' ) ;
2024-12-28 17:00:21 +01:00
} ) ;
}
2024-12-28 17:59:15 +01:00
const margin _josm _bbox = 0.00001
/ * *
* lien pour éditer une station de recharge dans JOSM
* @ param { * } feature
* @ returns
* /
function createJOSMEditLink ( feature ) {
var coordinates = feature . geometry . coordinates
var nodeId = feature . properties . id
var left = coordinates [ 0 ] - margin _josm _bbox
var right = coordinates [ 0 ] + margin _josm _bbox
var bottom = coordinates [ 1 ] - margin _josm _bbox
var top = coordinates [ 1 ] + margin _josm _bbox
2024-12-28 23:14:38 +01:00
// Ajouter le filtre pour ne charger que les stations de recharge
// var josmUrl = `http://127.0.0.1:8111/load_and_zoom?changeset_hashtags=IRVE&layer_name=irve-depuis-OSM&left=${left}&top=${top}&right=${right}&bottom=${bottom}&select=node[amenity=charging_station]`
2024-12-28 17:59:15 +01:00
var josmUrl = ` http://127.0.0.1:8111/load_and_zoom?changeset_hashtags=IRVE&layer_name=irve-depuis-OSM&left= ${ left } &top= ${ top } &right= ${ right } &bottom= ${ bottom } &select= ${ nodeId } `
return josmUrl
}
export {
sendToJOSM ,
createJOSMEditLink
2024-12-28 17:00:21 +01:00
} ;