2024-12-11 17:32:48 +01:00
/ * *
* rechercher les bornes de recharge ,
* afficher des cercles colorés selon la puissance max de la station
* lister les bornes trouvées dans la page
* @ type { boolean }
* /
2024-12-17 11:53:02 +01:00
import config from './config.js'
import utils from './utils.js'
2024-12-18 13:40:58 +01:00
import colorUtils from './color-utils.js'
2024-12-11 23:13:15 +01:00
2024-12-17 11:53:02 +01:00
console . log ( 'config' , config )
2024-12-18 13:40:58 +01:00
let geojsondata
2024-10-17 15:01:47 +02:00
// serveurs de tuiles: https://wiki.openstreetmap.org/wiki/Tile_servers
// https://stamen-tiles.a.ssl.fastly.net/toner/{z}/{x}/{y}.png
// https://a.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png
2024-10-18 00:47:01 +02:00
// https://tile.openstreetmap.org/{z}/{x}/{y}.png
// 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png'
2024-10-17 15:01:47 +02:00
const tileServer = 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png'
2024-12-14 18:08:00 +01:00
const tileServer _stamen = 'https://a.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png'
2024-10-17 15:01:47 +02:00
// Créer la carte centrée sur Rouen
2024-12-14 17:39:17 +01:00
// Liste des 20 villes les plus peuplées de France avec leurs coordonnées géographiques
2024-12-17 11:53:02 +01:00
2024-12-14 17:39:17 +01:00
// Initialisation de la carte avec la vue centrée sur la ville choisie
2024-12-18 13:40:58 +01:00
let map = L . map ( 'map' )
L . control . scale ( ) . addTo ( map )
2024-12-22 00:02:33 +01:00
L . control . zoom ( ) . addTo ( map )
2024-12-16 12:54:15 +01:00
2024-12-22 00:02:33 +01:00
/ * *
* filtres à toggle par des boutons dans la page
* à appliquer à chaque rafraîchissement des points geojson
* TODO : make buttons and filter in refresh circles
* /
let display _type2 _sockets = 'show' ;
let display _type2 _combo _sockets = 'show' ;
let display _unknown _max _power _station = 'show' ;
let display _known _max _power _station = 'show' ;
let display _type2 _combo _sockets _with _cable = 'show' ;
let display _lower _than _50kw = 'show' ;
let display _higer _than _50kw = 'show' ;
let display _lower _than _200kw = 'show' ;
let display _higer _than _200kw = 'show' ;
let display _chelou = 'show' ; // les stations avec une valeur suspecte, plus de 400kW
let filterStatesAvailable = [ 'hide' , 'show' , 'showOnly' ]
function setRandomView ( ) {
console . log ( 'set random view' )
2024-12-16 12:54:15 +01:00
// Choix au hasard d'une ville parmi la liste
2024-12-22 00:02:33 +01:00
let randomCity = utils . cities [ Math . floor ( Math . random ( ) * utils . cities . length ) ]
console . log ( 'randomCity' , randomCity )
map = map . setView ( randomCity . coords , config . initialZoom )
2024-12-16 12:54:15 +01:00
}
2024-12-18 13:40:58 +01:00
2024-12-22 00:02:33 +01:00
function setCoordinatesOfLeafletMapFromQueryParameters ( ) {
// Récupère les paramètres de l'URL
// console.log('window.location', window.location.href, window)
const urlParams = new URLSearchParams ( window . location . href )
// console.log('urlParams', urlParams)
// Récupère les coordonnées et le zoom à partir des paramètres de l'URL
const lat = urlParams . get ( 'lat' )
const lng = urlParams . get ( 'lng' )
const zoom = urlParams . get ( 'zoom' )
// console.log('lat,lng,zoom', lat, lng, zoom) // Vérifie si les paramètres sont présents et valides
if ( lat && lng && zoom ) {
// Initialise la carte avec les coordonnées et le zoom récupérés
map = map . setView ( [ lat , lng ] , zoom )
} else {
// Affiche une erreur si les paramètres sont absents ou invalides
console . error ( 'Les paramètres de coordonnées et de zoom doivent être présents dans l\'URL.' )
setRandomView ( )
}
2024-12-16 12:54:15 +01:00
}
2024-12-22 00:02:33 +01:00
function updateURLWithMapCoordinatesAndZoom ( ) {
// Récupère les coordonnées et le niveau de zoom de la carte
const center = map . getCenter ( )
const zoom = map . getZoom ( )
2024-12-16 12:54:15 +01:00
2024-12-22 00:02:33 +01:00
// Construit l'URL avec les paramètres de coordonnées et de zoom
const url = ` #coords=1&lat= ${ center . lat } &lng= ${ center . lng } &zoom= ${ zoom } `
// console.log('updateURLWithMapCoordinatesAndZoom url', url)
// Met à jour l'URL de la page
history . replaceState ( null , null , url )
2024-12-16 12:54:15 +01:00
}
2024-12-14 18:00:09 +01:00
var osm = L . tileLayer ( 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png' , {
2024-12-22 00:02:33 +01:00
attribution : config . osmMention + '© <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors'
2024-12-14 18:00:09 +01:00
} )
var cycle = L . tileLayer ( 'https://{s}.tile.opencyclemap.org/{z}/{x}/{y}.png' , {
2024-12-22 00:02:33 +01:00
attribution : config . osmMention + '© <a href="https://www.opencyclemap.org/">OpenCycleMap</a> contributors'
2024-12-14 18:00:09 +01:00
} )
var transport = L . tileLayer ( 'https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png' , {
2024-12-22 00:02:33 +01:00
attribution : config . osmMention
2024-12-14 18:00:09 +01:00
} )
let tileGrey =
2024-12-22 00:02:33 +01:00
L . tileLayer ( tileServer , {
attribution : config . osmMention
} )
2024-12-14 18:00:09 +01:00
let stamen =
2024-12-22 00:02:33 +01:00
L . tileLayer ( tileServer _stamen , {
attribution : config . osmMention
} )
2024-12-14 18:00:09 +01:00
var baseLayers = {
2024-12-22 00:02:33 +01:00
'Grey' : tileGrey ,
'Stamen' : stamen ,
'OpenStreetMap' : osm ,
// 'OpenCycleMap': cycle,
'Transport' : transport
2024-12-14 18:00:09 +01:00
}
2024-12-14 17:39:17 +01:00
2024-12-18 13:40:58 +01:00
let stations _bof = L . layerGroup ( ) . addTo ( map ) // layer group pour tous les marqueurs
let stations _much _speed _wow = L . layerGroup ( ) . addTo ( map ) // layer group des stations rapides
2024-12-22 00:02:33 +01:00
let overlays = { stations _bof , stations _much _speed _wow } // Si vous avez des calques superposables, ajoutez-les ici
2024-10-17 15:01:47 +02:00
2024-12-22 00:02:33 +01:00
const layerControl = L . control . layers ( baseLayers , overlays , { collapsed : true } ) . addTo ( map )
2024-12-14 18:08:00 +01:00
tileGrey . addTo ( map )
2024-12-11 23:13:15 +01:00
2024-12-22 00:02:33 +01:00
function buildOverpassApiUrl ( map , overpassQuery ) {
2024-10-17 15:01:47 +02:00
2024-12-22 00:02:33 +01:00
let baseUrl = 'https://overpass-api.de/api/interpreter'
let bounds = map . getBounds ( ) . getSouth ( ) + ',' + map . getBounds ( ) . getWest ( ) + ',' + map . getBounds ( ) . getNorth ( ) + ',' + map . getBounds ( ) . getEast ( )
let resultUrl , query = ''
2024-10-17 15:01:47 +02:00
2024-12-22 00:02:33 +01:00
if ( config . overrideQuery ) {
query = ` ?data=[out:json][timeout:15];(
2024-12-21 22:58:50 +01:00
nwr [ amenity = charging _station ] ( $ { bounds } ) ;
2024-12-11 17:32:48 +01:00
) ; out body geom ; `
2024-12-22 00:02:33 +01:00
} else {
let nodeQuery = 'node[' + overpassQuery + '](' + bounds + ');'
let wayQuery = 'way[' + overpassQuery + '](' + bounds + ');'
let relationQuery = 'relation[' + overpassQuery + '](' + bounds + ');'
query = '?data=[out:json][timeout:15];(' + nodeQuery + wayQuery + relationQuery + ');out body geom;'
}
resultUrl = baseUrl + query
return resultUrl
2024-10-17 15:01:47 +02:00
}
2024-10-18 00:47:01 +02:00
const tags _to _display _in _popup = [
2024-12-22 00:02:33 +01:00
'name' ,
'capacity' ,
'date_start' ,
'charging_station:output' ,
'socket:type_2' ,
'socket:type2:output' ,
'socket:typee' ,
'socket:typee:output' ,
'socket:type2_combo' ,
'socket:type2_combo:output' ,
'socket:chademo' ,
'operator' , 'ref:EU:EVSE' ,
'network' ,
'opening_hours' ,
'contact' ,
'phone' ,
'contact:phone' ,
'website' ,
'contact:website' ,
'ref' ,
'fee' ,
'payment' ,
'payment:contactless' ,
'authentication:app' ,
'authentication:debit_card' ,
2024-10-18 00:47:01 +02:00
]
2024-12-14 18:00:09 +01:00
const margin _josm _bbox = 0.00001
2024-12-22 00:02:33 +01:00
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
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
2024-12-12 00:27:27 +01:00
}
2024-10-17 15:01:47 +02:00
2024-12-22 00:02:33 +01:00
function supprimerMarqueurs ( ) {
stations _bof . clearLayers ( )
stations _much _speed _wow . clearLayers ( )
map . eachLayer ( ( layer ) => {
if ( layer instanceof L . Marker ) {
layer . remove ( )
}
} )
2024-10-18 00:33:25 +02:00
}
2024-12-11 23:13:15 +01:00
let coef _reduction _bars = 0.8
2024-10-17 15:01:47 +02:00
2024-12-22 00:02:33 +01:00
function calculerPourcentage ( partie , total , reduc ) {
if ( total === 0 ) {
return 'Division par zéro impossible'
}
let coef _reduction = 1
if ( reduc ) {
coef _reduction = coef _reduction _bars
}
return ( ( partie / total ) * 100 * coef _reduction ) . toFixed ( 1 )
2024-12-11 23:13:15 +01:00
}
2024-12-22 00:02:33 +01:00
function displayStatsFromGeoJson ( resultAsGeojson ) {
let count = resultAsGeojson . features . length
let count _station _output = 0
let count _ref _eu = 0
let output _more _than _300 = 0
let output _more _than _200 = 0
let output _more _than _100 = 0
let output _more _than _50 = 0
let count _station _outputoutput _between _1 _and _50 = 0
let count _output _unknown = 0
let count _estimated _type2combo = 0
let count _found _type2combo = 0
let count _found _type2 = 0
resultAsGeojson . features . map ( feature => {
let found _type2 _combo = false
// trouver si les tags présentent un type combo
let found _type2 = false
// trouver si les tags présentent un type 2
let keys _of _object = Object . keys ( feature . properties . tags )
keys _of _object . map ( tagKey => {
// console.log('tagKey', tagKey)
if ( tagKey . indexOf ( 'type2_combo' ) !== - 1 ) {
found _type2 _combo = true
// console.log('tagkey trouvé combo', tagKey)
}
if ( tagKey . indexOf ( 'type2' ) !== - 1 ) {
found _type2 = true
}
} )
let outputPower = utils . guessOutputPowerFromFeature ( feature )
if ( found _type2 _combo ) {
count _found _type2combo ++
}
if ( found _type2 ) {
count _found _type2 ++
}
if ( outputPower == 0 ) {
count _output _unknown ++
}
if ( outputPower >= 200 && ! found _type2 _combo ) {
/ * *
* si on trouve une puissance supérieure à 200 kW on peut partir du principe que la station dispose d ' une prise type _2 _combo à minima
* /
count _estimated _type2combo ++
}
if ( outputPower > 0 && outputPower < 50 ) {
count _station _outputoutput _between _1 _and _50 ++
}
if ( outputPower >= 50 && outputPower < 100 ) {
output _more _than _50 ++
} else if ( outputPower >= 100 && outputPower < 200 ) {
output _more _than _100 ++
} else if ( outputPower >= 200 && outputPower < 300 ) {
output _more _than _200 ++
} else if ( outputPower >= 300 ) {
feature . properties . puissance _haute = true
output _more _than _300 ++
}
if ( feature . properties . tags [ 'charging_station:output' ] ) {
count _station _output ++
}
if ( feature . properties . tags [ 'ref:EU:EVSE' ] ) {
count _ref _eu ++
}
} )
let bar _powers = ` <div class="bars-container">
2024-12-11 23:13:15 +01:00
< div class = "bar color-unknown" style = "width: ${calculerPourcentage(count_output_unknown, count, true)}%" > $ { count _output _unknown } < / d i v >
< div class = "bar color-power-lesser-than-50" style = "width: ${calculerPourcentage(count_station_outputoutput_between_1_and_50, count, true)}%" > $ { count _station _outputoutput _between _1 _and _50 } < / d i v >
< div class = "bar color-power-lesser-than-100" style = "width: ${calculerPourcentage(output_more_than_50, count, true)}%" > $ { output _more _than _50 } < / d i v >
< div class = "bar color-power-lesser-than-200" style = "width: ${calculerPourcentage(output_more_than_100, count, true)}%" > $ { output _more _than _100 } < / d i v >
< div class = "bar color-power-lesser-than-300" style = "width: ${calculerPourcentage(output_more_than_200, count, true)}%" > $ { output _more _than _200 } < / d i v >
< div class = "bar color-power-lesser-than-max" style = "width: ${calculerPourcentage(output_more_than_300, count, true)}%" > $ { output _more _than _300 } < / d i v >
< / d i v >
`
2024-12-22 00:02:33 +01:00
let stats _content = ` <div class="stats">
2024-12-11 23:13:15 +01:00
Statistiques des < strong > $ { count } < /strong> stations trouvées: <br/ >
$ { count _station _output } ( $ { calculerPourcentage ( count _station _output , count ) } % ) ont une info de puissance max délivrée < i > charging _station : output < /i>. <br/ >
$ { count _ref _eu } ( $ { calculerPourcentage ( count _ref _eu , count ) } % ) ont une référence européenne < i > ref : EU : EVSE < /i>. <br/ >
$ { count _output _unknown } ( $ { calculerPourcentage ( count _output _unknown , count ) } % ) ont une puissance max inconnue < i > * output * < /i>. <br/ >
$ { output _more _than _300 } ( $ { calculerPourcentage ( output _more _than _300 , count ) } % ) ont une puissance max supérieure à 300 kW < i > * output * < /i>. <br/ >
$ { output _more _than _200 } ( $ { calculerPourcentage ( output _more _than _200 , count ) } % ) ont une puissance max supérieure à 200 kW < i > * output * < /i>. <br/ >
$ { output _more _than _100 } ( $ { calculerPourcentage ( output _more _than _100 , count ) } % ) ont une puissance max supérieure à 100 kW < i > * output * < /i>. <br/ >
$ { output _more _than _50 } ( $ { calculerPourcentage ( output _more _than _50 , count ) } % ) ont une puissance max supérieure à 50 kW < i > * output * < /i>. <br/ >
$ { count _found _type2combo } ( $ { calculerPourcentage ( count _found _type2combo , count ) } % ) ont un prise combo définie < i > * type2 _combo * < /i>. <br/ >
$ { count _estimated _type2combo } ( $ { calculerPourcentage ( count _estimated _type2combo , count ) } % ) ont une prise combo présumée à partir de la puissance max trouvée mais non spécifiée < i > * type2 _combo * < /i>. <br/ > $ { count _found _type2 } ( $ { calculerPourcentage ( count _found _type2 , count ) } % ) ont un prise type2 définie < i > * type2 * < /i>. <br/ >
< / d i v > `
2024-12-22 00:02:33 +01:00
$ ( '#found_charging_stations' ) . html ( stats _content )
$ ( '#bars_power' ) . html ( bar _powers )
2024-12-11 23:13:15 +01:00
}
2024-12-11 17:32:48 +01:00
2024-12-22 00:02:33 +01:00
function bindEventsOnJosmRemote ( ) {
let josm _remote _buttons = $ ( ` .josm ` )
// console.log('josm_remote_buttons', josm_remote_buttons[0])
$ ( josm _remote _buttons [ 0 ] ) . on ( 'click' , ( ) => {
// console.log('link', josm_remote_buttons[0])
let josm _link = $ ( josm _remote _buttons [ 0 ] ) . attr ( 'data-href' )
// console.log('lancer la télécommande josm', josm_link)
$ . get ( josm _link , ( res ) => {
console . log ( 'res' , res )
} )
} )
2024-12-12 00:27:27 +01:00
}
2024-12-14 18:00:09 +01:00
2024-12-22 00:02:33 +01:00
2024-12-22 00:16:31 +01:00
function displayPointsFromApi ( points = geojsondata ) {
2024-12-22 00:02:33 +01:00
geojsondata = osmtogeojson ( points )
// console.log('resultAsGeojson', geojsondata)
displayStatsFromGeoJson ( geojsondata )
let resultLayer = L . geoJson ( geojsondata , {
style : function ( feature ) {
return { color : '#f00' }
} ,
/ * *
* enlever les polygones , ne garder que les points
* @ param feature
* @ param layer
* @ returns { boolean }
* /
filter : function ( feature , layer ) {
let isPolygon = ( feature . geometry ) && ( feature . geometry . type !== undefined ) && ( feature . geometry . type === 'Polygon' )
if ( isPolygon ) {
feature . geometry . type = 'Point'
let polygonCenter = L . latLngBounds ( feature . geometry . coordinates [ 0 ] ) . getCenter ( )
feature . geometry . coordinates = [ polygonCenter . lat , polygonCenter . lng ]
}
return true
} ,
onmoveend : function ( event ) {
// console.log('déplacement terminé')
} ,
onzoomend : function ( event ) {
2024-12-22 00:16:31 +01:00
supprimerMarqueurs ( )
displayPointsFromApi ( )
2024-12-22 00:02:33 +01:00
} ,
onEachFeature : function ( feature , layer ) {
let popupContent = ''
popupContent += '<div class="sockets-list" >'
let type2 = feature . properties . tags [ 'socket:type2' ]
let type2 _combo = feature . properties . tags [ 'socket:type2_combo' ]
if ( type2 ) {
popupContent += ' <img class="icon-img" src="img/Type2_socket.svg" alt="prise de type 2">'
if ( type2 !== 'yes' ) {
popupContent += '<span class="socket-counter">x ' + type2 + '</span>'
}
}
if ( feature . properties . tags [ 'socket:type2_combo' ] ) {
popupContent += ' <img class="icon-img" src="img/type2_combo.svg" alt="prise de type 2 combo CCS">'
if ( type2 _combo !== 'yes' ) {
popupContent += '<span class="socket-counter">x ' + type2 _combo + '</span>'
}
}
popupContent += '</div>'
popupContent += '<div class="key-values" >'
// ne montrer que certains champs dans la popup
tags _to _display _in _popup . forEach ( function ( key ) {
if ( tags _to _display _in _popup . indexOf ( key ) ) {
let value = feature . properties . tags [ key ]
if ( value ) {
if ( value . indexOf ( 'http' ) !== - 1 ) {
value = '<a href="' + value + '">' + value + '</a>'
}
popupContent = popupContent + '<br/><strong class="popup-key">' + key + ' :</strong><span class="popup-value">' + value + '</span>'
}
}
} )
popupContent += '</div>'
layer . bindPopup ( popupContent )
let outPowerGuessed = utils . guessOutputPowerFromFeature ( feature )
let color = colorUtils . getColor ( feature )
let displayOutPowerGuessed = '? kW'
if ( outPowerGuessed ) {
displayOutPowerGuessed = outPowerGuessed + ' kW max'
}
if ( ! popupContent ) {
popupContent = ` <span class="no-data"> Aucune information renseignée,
2024-12-14 17:39:17 +01:00
< a class = "edit-button" href = "https://www.openstreetmap.org/edit?editor=remote&node=${feature.properties.id}" > ajoutez la dans OpenStreetMap ! < / a > < / s p a n > `
2024-12-22 00:02:33 +01:00
}
let link _josm = createJOSMEditLink ( feature )
// console.log('link_josm', link_josm)
// boutons d'itinéraire
2024-12-14 18:00:09 +01:00
2024-12-22 00:02:33 +01:00
let html = ` <a href="https://www.openstreetmap.org/directions?from=&to= ${ feature . geometry . coordinates [ 1 ] } , ${ feature . geometry . coordinates [ 0 ] } &engine=fossgis_osrm_car#map=14/ ${ feature . geometry . coordinates [ 1 ] } / ${ feature . geometry . coordinates [ 0 ] } " class="navigation-link by-car" title="itinéraire en voiture vers cette station"> 🚗</a><a href="https://www.openstreetmap.org/directions?from=&to= ${ feature . geometry . coordinates [ 1 ] } , ${ feature . geometry . coordinates [ 0 ] } &engine=fossgis_osrm_bike#map=14/ ${ feature . geometry . coordinates [ 1 ] } / ${ feature . geometry . coordinates [ 0 ] } " class="navigation-link by-car" title="itinéraire en vélo vers cette station">🚴♀️</a><a href="https://www.openstreetmap.org/directions?from=&to= ${ feature . geometry . coordinates [ 1 ] } , ${ feature . geometry . coordinates [ 0 ] } &engine=fossgis_osrm_foot#map=14/ ${ feature . geometry . coordinates [ 1 ] } / ${ feature . geometry . coordinates [ 0 ] } " class="navigation-link by-car" title="itinéraire à pied vers cette station">👠</a>
2024-12-14 17:39:17 +01:00
< a class = "edit-button" href = "https://www.openstreetmap.org/edit?editor=id&node=${feature.properties.id}" > ✏ ️ < / a > < a c l a s s = " e d i t - b u t t o n j o s m " d a t a - h r e f = " $ { l i n k _ j o s m } " h r e f = " # " > J O S M < / a > < s p a n c l a s s = " c o l o r - i n d i c a t i o n " s t y l e = " b a c k g r o u n d - c o l o r : $ { c o l o r } ; " > $ { d i s p l a y O u t P o w e r G u e s s e d } < / s p a n > < s p a n c l a s s = " p o p u p - c o n t e n t " > $ { p o p u p C o n t e n t } < / s p a n > `
2024-11-26 21:31:43 +01:00
2024-12-22 00:02:33 +01:00
let zoom = map . getZoom ( )
let radius = 20
let opacity = 0.5
2024-12-22 00:16:31 +01:00
let ratio _circle = 10
2024-12-22 00:02:33 +01:00
// quand on est loin, montrer d'avantage de couleur, pas le centre
2024-12-22 00:16:31 +01:00
if ( zoom > 13 ) {
ratio _circle = 5
}
else if ( zoom > 15 ) {
ratio _circle = 1
opacity = 0.25
}
else if ( zoom >= 16 ) {
ratio _circle = 0.5
}
else if ( zoom >= 18 ) {
ratio _circle = 0.25
2024-12-22 00:02:33 +01:00
}
2024-12-22 00:16:31 +01:00
if ( outPowerGuessed >= 300 ) {
2024-12-22 00:02:33 +01:00
radius = 70 * ratio _circle
2024-12-22 00:16:31 +01:00
} else if ( outPowerGuessed >= 200 ) {
2024-12-22 00:02:33 +01:00
radius = 60 * ratio _circle
2024-12-22 00:16:31 +01:00
} else if ( outPowerGuessed >= 100 ) {
2024-12-22 00:02:33 +01:00
radius = 50 * ratio _circle
2024-12-22 00:16:31 +01:00
} else if ( outPowerGuessed >= 50 ) {
2024-12-22 00:02:33 +01:00
radius = 40 * ratio _circle
2024-12-22 00:16:31 +01:00
} else if ( outPowerGuessed >= 20 ) {
2024-12-22 00:02:33 +01:00
radius = 30 * ratio _circle
2024-12-22 00:16:31 +01:00
} else if ( outPowerGuessed >= 7 ) {
2024-12-22 00:02:33 +01:00
radius = 20 * ratio _circle
}
let circle = L . circle ( layer . _latlng , {
color : color ,
fillColor : color ,
fillOpacity : opacity ,
colorOpacity : opacity ,
radius : radius
} ) . addTo ( stations _bof )
// montrer les détails quand on est proche
// afficher moins de couleur, montrer le centre plus précis
if ( zoom > 15 ) {
opacity = 0.25
let circle _center = L . circle ( layer . _latlng , {
color : 'black' ,
fillColor : color ,
fillOpacity : 1 ,
radius : 0.1
} ) . addTo ( stations _bof )
}
circle . bindPopup ( html )
circle . on ( {
mouseover : function ( ) {
this . openPopup ( )
bindEventsOnJosmRemote ( )
} ,
mouseout : function ( ) {
// setTimeout(() => this.closePopup(), 15000)
} ,
click : function ( ) {
this . openPopup ( )
bindEventsOnJosmRemote ( )
} ,
} )
} ,
} )
2024-12-12 00:27:27 +01:00
2024-10-17 15:01:47 +02:00
}
2024-12-22 00:02:33 +01:00
function makeCssClassFromTags ( tags ) {
// console.log('tags', tags)
let tagKeys = Object . keys ( tags )
// console.log('tagKeys', tagKeys)
if ( ! tags ) {
return ''
}
let listOfClasses = [ ]
2024-10-17 15:01:47 +02:00
2024-12-22 00:02:33 +01:00
tagKeys . forEach ( ( element ) => {
listOfClasses . push ( 'tag-' + element + '_' + tags [ element ] . replace ( ':' , '--' ) . replace ( ' ' , '-' ) )
} )
2024-10-17 15:01:47 +02:00
2024-12-22 00:02:33 +01:00
return listOfClasses . join ( ' ' )
2024-10-17 15:01:47 +02:00
}
2024-12-22 00:02:33 +01:00
function getIconFromTags ( tags ) {
let iconFileName = ''
// let iconFileName = 'icon_restaurant.png';
if ( tags [ 'man_made' ] ) {
iconFileName = 'fountain.png'
}
return iconFileName
2024-10-17 15:01:47 +02:00
}
2024-12-11 23:13:15 +01:00
// $('#toggleMinPower_50').on('click', toggleMinPower(50))
// $('#toggleMinPower_100').on('click', toggleMinPower(100))
// document.getElementById('toggleMinPower_300').addEventListener('click', toggleMinPower(showHighPower))
2024-12-16 12:13:19 +01:00
2024-12-22 00:02:33 +01:00
function toggleMinPower ( showHighPower ) {
console . log ( 'toggle' , showHighPower )
showHighPower = ! showHighPower
addFilteredMarkers ( showHighPower )
this . textContent = showHighPower ? 'Montrer puissance haute' : 'Montrer puissance normale'
2024-12-11 23:13:15 +01:00
}
2024-12-22 00:02:33 +01:00
function addFilteredMarkers ( showHighPower ) {
allMarkers . clearLayers ( ) // Supprimer les marqueurs existants
console . log ( 'addFilteredMarkers: clear des marqueurs fait' )
let counter = 0
geojsondata . features . forEach ( function ( feature ) {
if ( feature . properties . puissance _haute === showHighPower ) {
counter ++
let marker = L . marker ( feature . geometry . coordinates ) . bindPopup ( feature . properties . puissance _haute ? 'Puissance haute' : 'Puissance normale' )
allMarkers . addLayer ( marker )
}
} )
console . log ( 'addFilteredMarkers: ' , counter )
2024-12-11 17:32:48 +01:00
}
2024-10-17 15:01:47 +02:00
let isLoading = false
2024-12-22 00:02:33 +01:00
function loadOverpassQuery ( ) {
// ne pas charger si on recherche déjà
if ( ! isLoading ) {
isLoading = true
$ ( '#spinning_icon' ) . fadeIn ( )
let queryTextfieldValue = $ ( '#query-textfield' ) . val ( )
let overpassApiUrl = buildOverpassApiUrl ( map , queryTextfieldValue )
$ . get ( overpassApiUrl , function ( geoDataPointsFromApi ) {
supprimerMarqueurs ( )
displayPointsFromApi ( geoDataPointsFromApi )
$ ( '#spinning_icon' ) . fadeOut ( )
$ ( '#message-loading' ) . fadeOut ( )
isLoading = false
} ) // end of the getting from overpass API
}
2024-10-17 15:01:47 +02:00
}
2024-12-22 00:02:33 +01:00
function onMapMoveEnd ( ) {
let center = map . getCenter ( )
let zoom = map . getZoom ( )
let infos = ` Lat: ${ center . lat } , Lon: ${ center . lng } , Zoom : ${ zoom } `
if ( zoom > 10 ) {
loadOverpassQuery ( )
} else {
infos += '(zoomez au niveau 11 ou plus pour charger les stations en vous déplaçant)'
}
$ ( '#infos_carte' ) . html ( infos )
updateURLWithMapCoordinatesAndZoom ( )
2024-12-16 12:54:15 +01:00
2024-12-12 00:27:27 +01:00
}
2024-12-16 12:54:15 +01:00
setCoordinatesOfLeafletMapFromQueryParameters ( )
2024-12-14 18:00:09 +01:00
$ ( document ) . ready ( function ( ) {
2024-12-22 00:02:33 +01:00
bindEventsOnJosmRemote ( )
onMapMoveEnd ( )
map . on ( 'moveend' , onMapMoveEnd )
$ ( '#spinning_icon' ) . hide ( )
// $('#messageLoading').hide()
$ ( '#removeMarkers' ) . on ( 'click' , function ( ) {
supprimerMarqueurs ( )
} )
$ ( '#load' ) . on ( 'click' , function ( ) {
loadOverpassQuery ( )
} )
// filtres
// boutons de toggle et de cycle de visibilité
//
$ ( '#filterUnkown' ) . on ( 'click' , function ( ) {
cycleVariableState ( display _unknown _max _power _station , '#filterUnkown' )
showActiveFilter ( display _unknown _max _power _station , '#filterUnkown' )
} )
2024-12-22 00:16:31 +01:00
showActiveFilter ( display _unknown _max _power _station , '#filterUnkown' )
2024-12-14 18:00:09 +01:00
} )
2024-12-16 12:13:19 +01:00
2024-12-22 00:02:33 +01:00
function showActiveFilter ( filterVariableName , selectorId ) {
2024-12-22 00:16:31 +01:00
$ ( selectorId ) . className = 'filter-state-' + filterVariableName
2024-12-22 00:02:33 +01:00
}
function cycleVariableState ( filterVariableName , selectorId ) {
if ( filterVariableName ) {
if ( filterVariableName == filterStatesAvailable [ 0 ] ) {
filterVariableName = filterStatesAvailable [ 1 ]
} else if ( filterVariableName == filterStatesAvailable [ 1 ] ) {
filterVariableName = filterStatesAvailable [ 2 ]
} else if ( filterVariableName == filterStatesAvailable [ 2 ] ) {
filterVariableName = filterStatesAvailable [ 0 ]
}
} else {
filterVariableName = filterStatesAvailable [ 0 ]
}
showActiveFilter ( filterVariableName , selectorId )
return filterVariableName
}
2024-12-16 12:13:19 +01:00