Commit 099d1111 by JonathanMM

Merge branch 'gbfs'

parents 83df173c e9619574
......@@ -130,6 +130,10 @@ switch($_GET['action'])
echo json_encode(getSignalementCarte($idConso));
exit();
break;
case 'getEtatCarte':
echo json_encode(getEtatCarte());
exit();
break;
}
function getBikeInstantane($codeStation)
......@@ -1028,9 +1032,9 @@ function getSignalementCarte($idConso)
define('ETAT_NON_FONCTIONNE', 2);
$couleur_etat=array(
ETAT_INCONNU=>'DodgerBlue',
ETAT_FONCTIONNE=>'FireBrick',
ETAT_NON_FONCTIONNE=>'Coral'
ETAT_INCONNU=>'lightgray',
ETAT_FONCTIONNE=>'ForestGreen',
ETAT_NON_FONCTIONNE=>'FireBrick'
);
$nombre_etat=array(
......@@ -1138,4 +1142,142 @@ function getSignalementCarte($idConso)
return $svg;
}
function getDataEtat()
{
global $pdo;
$repere = new DateTime("-6hours");
$requete = $pdo->query('SELECT * FROM stations');
$stationsData = $requete->fetchAll();
$stations = array();
foreach($stationsData as $station)
{
$lastRefresh = $station['lastRefresh'];
$objStation = array('code' => $station['code'], 'name' => $station['name'], 'latitude' => $station['latitude'], 'longitude' => $station['longitude'], 'insee' => $station['insee']);
if(is_null($lastRefresh))
$objStation['etat'] = null;
else
{
if((new DateTime($lastRefresh)) < $repere) //Pas de mise à jour depuis 6h
$objStation['etat'] = false;
else
$objStation['etat'] = true;
}
$stations[] = $objStation;
}
return $stations;
}
function getEtatCarte()
{
global $pdo;
$stations = getDataEtat();
$liste_communes = array();
$objets = array();
define('ETAT_INCONNU', 0);
define('ETAT_FONCTIONNE', 1);
define('ETAT_NON_FONCTIONNE', 2);
$couleur_etat=array(
ETAT_INCONNU=>'lightgray',
ETAT_FONCTIONNE=>'ForestGreen',
ETAT_NON_FONCTIONNE=>'FireBrick'
);
$nombre_etat=array(
ETAT_INCONNU=>0,
ETAT_FONCTIONNE=>0,
ETAT_NON_FONCTIONNE=>0,
);
foreach($stations as $station)
{
$code = $station['code'];
if(is_null($station['etat']))
{
$etat = ETAT_INCONNU;
$s_info1 = 'Pas d\'information sur l\'état des données';
} elseif($station['etat'])
{
$etat = ETAT_FONCTIONNE;
$s_info1 = 'Données actualisés récemment';
} else
{
$etat = ETAT_NON_FONCTIONNE;
$s_info1 = 'Données non reçus depuis un moment';
}
//forme en fonction de l'état annoncé
if($etat == ETAT_INCONNU)
{
$s_point='rond';
$s_taille=6;
$s_angle=0;
}
else
{
$s_point='carre';
$s_taille=6;
$s_angle=45;
}
//comptage du nombre de stations par etat
$nombre_etat[$etat]++;
//récupération de la commune correspondant à la station (d'après son numéro)
$inseeCommune = $station['insee'];
//ajout à la liste des communes
if(!is_null($inseeCommune) && !in_array($inseeCommune,$liste_communes))
{
$liste_communes[] = $inseeCommune;
}
$objets[]=array(
'nature'=>'point',
'point'=>$s_point,
'taille'=>$s_taille,
'angle'=>$s_angle,
'couleur'=>$couleur_etat[$etat],
'lon'=>$station['longitude'],
'lat'=>$station['latitude'],
'lien'=>'station.php?code='.$code,
'info'=>'Station '.displayCodeStation($code)."\n".$station['name']."\n".$s_info1
);
}
//légende (point et texte, affiché uniquement pour les états ayant au moins une station
if($nombre_etat[ETAT_INCONNU])
{
$objets[]=array('point'=>'rond','x'=>-58,'y'=>10,'taille'=>6,'angle'=>0,
'couleur'=>$couleur_etat[ETAT_INCONNU]);
$objets[]=array('nature'=>'texte','x'=>-60,'y'=>20,'taille'=>12,'angle'=>90,'align'=>'l',
'texte'=>'État des données inconnu ('.$nombre_etat[ETAT_INCONNU].')');
}
if($nombre_etat[ETAT_NON_FONCTIONNE])
{
$objets[]=array('point'=>'carre','x'=>-18,'y'=>210,'taille'=>6,'angle'=>45,
'couleur'=>$couleur_etat[ETAT_NON_FONCTIONNE]);
$objets[]=array('nature'=>'texte','x'=>-20,'y'=>220,'taille'=>12,'angle'=>90,'align'=>'l',
'texte'=>'Données vieilles ('.$nombre_etat[ETAT_NON_FONCTIONNE].')');
}
if($nombre_etat[ETAT_FONCTIONNE])
{
$objets[]=array('point'=>'carre','x'=>-18,'y'=>10,'taille'=>6,'angle'=>45,
'couleur'=>$couleur_etat[ETAT_FONCTIONNE]);
$objets[]=array('nature'=>'texte','x'=>-20,'y'=>20,'taille'=>12,'angle'=>90,'align'=>'l',
'texte'=>'Données fraîches ('.$nombre_etat[ETAT_FONCTIONNE].')');
}
$svg = genererCarteSVG(800, 500, $liste_communes, 'commune.php?insee=', '', '', $objets,COMMUNE_AVM_VELIB);
return $svg;
}
?>
......@@ -40,7 +40,7 @@
</form>
<a href="http://www.ousontlesvelib.ovh/stations">Suivre l'avancement de l'ouverture des stations &gt;&gt;</a><br />
<a href="stats.php">Voir plus de statistiques &gt;</a><br />
<a id="toggle-carte">Voir carte des signalements</a>
Carte : <a id="btn-carte-etat">Stations</a> | <a id="btn-carte-signalement">Signalement</a> | <a id="btn-carte-data">Actualisation des données</a>
</div>
<div id="carteArea"></div>
</div>
......@@ -175,8 +175,10 @@
filtreDataTable();
$("#filtreEtat").change(filtreDataTable);
$("#filtrePosition").change(filtrePosition);
toggleCarte();
$('#toggle-carte').click(toggleCarte);
$('#btn-carte-etat').click(voirCarteEtat);
$('#btn-carte-signalement').click(voirCarteSignalement);
$('#btn-carte-data').click(voirCarteData);
voirCarteEtat();
});
function filtrePosition()
......@@ -215,21 +217,19 @@
});
}
var carte = -1;
function toggleCarte()
function voirCarteEtat()
{
if(carte == 0)
{
//On passe sur la carte des signalements
carte = 1;
recupererCarte('api.php?action=getSignalementCarte&idConso={$idConso}');
$('#toggle-carte').html('Voir la carte des états des stations');
} else {
//On passe sur la carte des états
carte = 0;
recupererCarte('api.php?action=getCommunesCarte&idConso={$idConso}');
$('#toggle-carte').html('Voir la carte des signalements');
}
recupererCarte('api.php?action=getCommunesCarte&idConso={$idConso}');
}
function voirCarteSignalement()
{
recupererCarte('api.php?action=getSignalementCarte&idConso={$idConso}');
}
function voirCarteData()
{
recupererCarte('api.php?action=getEtatCarte&idConso={$idConso}');
}
</script>
</div>
......
import pymysql, urllib.request, json, os
from config import getMysqlConnection
mysql = getMysqlConnection()
#On récupère toutes les stations sans insee
requete = mysql.cursor()
requete.execute('SELECT code, latitude, longitude, name FROM stations WHERE stationId IS NULL')
stations = requete.fetchall()
tmpFileName = 'gbfsStation.json'
urllib.request.urlretrieve("https://velib-metropole-opendata.smoove.pro/opendata/Velib_Metropole/station_information.json", tmpFileName)
data = json.load(open(tmpFileName))
for station in stations:
codeStation = station[0]
latitude = float(station[1])
longitude = float(station[2])
for stat in data['data']['stations']:
if abs(stat['lat'] - latitude) < 0.00002 and abs(stat['lon'] - longitude) < 0.00002:
requete = mysql.cursor()
requete.execute('UPDATE stations SET stationId = '+str(stat['station_id'])+' WHERE code = '+str(codeStation))
mysql.close()
os.remove(tmpFileName)
\ No newline at end of file
import urllib.request, json, os, pymysql
from datetime import datetime
from config import getMysqlConnection, getURLVelib
from adresseLib import getAdresse, getInsee
def getStationIdByLatLong(latitude, longitude):
tmpFileName = 'gbfsStation.json'
urllib.request.urlretrieve("https://velib-metropole-opendata.smoove.pro/opendata/Velib_Metropole/station_information.json", tmpFileName)
data = json.load(open(tmpFileName))
for stat in data['data']['stations']:
if abs(stat['lat'] - latitude) < 0.00002 and abs(stat['lon'] - longitude) < 0.00002:
return stat['station_id']
os.remove(tmpFileName)
def getGBFSData():
tmpFileName = 'gbfsStatus.json'
urllib.request.urlretrieve("https://velib-metropole-opendata.smoove.pro/opendata/Velib_Metropole/station_status.json", tmpFileName)
data = json.load(open(tmpFileName))
os.remove(tmpFileName)
return data['data']['stations']
\ No newline at end of file
import pymysql
from config import getMysqlConnection
from gbfsLib import getGBFSData
import datetime
mysql = getMysqlConnection()
data = getGBFSData()
for station in data:
lastRefresh = datetime.datetime.fromtimestamp(int(station['last_reported']), datetime.timezone.utc)
stationId = station['station_id']
requete = mysql.cursor()
requete.execute('UPDATE stations SET lastRefresh = "'+lastRefresh.strftime("%Y-%m-%d %H:%M:%S")+'" WHERE stationId = '+str(stationId))
\ No newline at end of file
......@@ -170,8 +170,6 @@ def debuterCalculResumeOfResume(periodeOrigine, periodeFinale, dateCourante = da
#StatutConso
def calculerResumeConso(dateConsoDT, dureeConso):
dateConso = dateConsoDT.strftime("%Y-%m-%d %H:%M:%S")
minuteAvant = dateConsoDT - datetime.timedelta(minutes=1)
dateConsoAvant = minuteAvant.strftime("%Y-%m-%d %H:%M:%S")
finConso = dateConsoDT + datetime.timedelta(minutes=dureeConso)
dateConsoFin = finConso.strftime("%Y-%m-%d %H:%M:%S")
......@@ -231,7 +229,6 @@ def calculerResumeOfResumeConso(dateConsoDT, dureeConsoOrigine, dureeConsoFinale
requete = mysql.cursor()
requete.execute("SELECT "+', '.join(proprietes)+" FROM `resumeConso` WHERE duree = "+str(dureeConsoOrigine)+" and date >= '"+dateConso+"' and date < '"+dateConsoFin+"' order by date")
consos = requete.fetchall()
precedentCode = None
infosCourantes = {}
for row in consos:
for i, cle in enumerate(proprietes):
......
......@@ -2,6 +2,7 @@ import urllib.request, json, os, pymysql
from datetime import datetime
from config import getMysqlConnection, getURLVelib
from adresseLib import getAdresse, getInsee
from gbfsLib import getStationIdByLatLong
def getAllStation():
mysql = getMysqlConnection()
......@@ -51,9 +52,12 @@ def getAllStation():
strDateOuverture = 'NULL'
else:
strDateOuverture = 'CURDATE()'
#On récupère également le stationId des données GTFS
stationId = getStationIdByLatLong(latitude, longitude)
requete = mysql.cursor()
requete.execute('INSERT INTO stations (code, name, longitude, latitude, type, dateOuverture, adresse, insee) VALUES \
('+str(codeStation)+', "'+str(infoStation['name'])+'", '+str(longitude)+', '+str(latitude)+', "'+str(infoStation['type'])+'", '+strDateOuverture+', "'+getAdresse(latitude, longitude)+'", '+str(getInsee(codeStation))+')')
requete.execute('INSERT INTO stations (code, name, longitude, latitude, type, dateOuverture, adresse, insee, stationId) VALUES \
('+str(codeStation)+', "'+str(infoStation['name'])+'", '+str(longitude)+', '+str(latitude)+', "'+str(infoStation['type'])+'", '+strDateOuverture+', "'+getAdresse(latitude, longitude)+'", '+str(getInsee(codeStation))+', '+str(stationId)+')')
stations.append(codeStation)
nbBike = int(etatStation['nbBike'])
......
......@@ -102,7 +102,9 @@ CREATE TABLE `stations` (
`type` varchar(256) NOT NULL,
`dateOuverture` date DEFAULT NULL,
`adresse` text,
`insee` int(5) DEFAULT NULL
`insee` int(5) DEFAULT NULL,
`stationId` int(11) DEFAULT NULL,
`lastRefresh` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
......@@ -173,6 +175,7 @@ ALTER TABLE `signalement`
--
ALTER TABLE `stations`
ADD PRIMARY KEY (`code`),
ADD UNIQUE KEY `stationId` (`stationId`),
ADD KEY `insee` (`insee`);
--
......
......@@ -101,7 +101,7 @@ ul
margin-left: 2em;
}
#toggle-carte
#btn-carte-etat, #btn-carte-signalement, #btn-carte-data
{
cursor: pointer;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment