Primo commit
This commit is contained in:
parent
ee51968115
commit
da3d396511
20
README.md
20
README.md
|
@ -1,2 +1,18 @@
|
|||
# prezzi-distributori-italia-umap
|
||||
Script per la generazione di un file in formato GeoJSON da importare su uMap per la visualizzazione dei distributori con i prezzi provenienti dal MISE
|
||||
# Prezzi Distributori Italia uMap
|
||||
Script per la generazione di un file in formato GeoJSON da importare su uMap per la visualizzazione dei distributori con i prezzi provenienti dal MISE.
|
||||
|
||||
## Come funziona
|
||||
Lo script scarica i 2 file CSV provenienti dal sito del **MISE** (MInistero dello Sviluppo Economico), li rielabora e genera un file in formato [GeoJSON](https://geojson.org/) da importare su [uMap](https://umap.openstreetmap.fr/it/).
|
||||
|
||||
I 2 file sono:
|
||||
- **anagrafica_impianti_attivi.csv**: lista degli impianti
|
||||
- **prezzo_alle_8.csv**: lista prezzi per idImpianto generati alle 8:00 di ogni mattina
|
||||
|
||||
La prima importazione è stata eseguita qui:
|
||||
https://umap.openstreetmap.fr/it/map/prezzi-distributori-italia_769756
|
||||
|
||||
## Da completare
|
||||
- [ ] aggiungere controllo degli errori per debug
|
||||
- [ ] generazione file distinti per Benzina, Diesel, GPL e altre tipologie
|
||||
- [ ] colorazione marker in base al tipo di carburante
|
||||
- [ ] aggiunta elementi grafici (loghi, ecc)
|
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
|
||||
file_put_contents('anagrafica_impianti_attivi.csv', file_get_contents('https://www.mise.gov.it/images/exportCSV/anagrafica_impianti_attivi.csv'));
|
||||
file_put_contents('prezzo_alle_8.csv', file_get_contents('https://www.mise.gov.it/images/exportCSV/prezzo_alle_8.csv'));
|
||||
|
||||
// Header file geojson finale
|
||||
$geojson = [
|
||||
"type" => "FeatureCollection",
|
||||
];
|
||||
|
||||
// Lettura 2 CSV
|
||||
$csvDistributori = fopen('anagrafica_impianti_attivi.csv', 'r');
|
||||
$csvPrezzi = fopen('prezzo_alle_8.csv', 'r');
|
||||
|
||||
|
||||
// Cache prezzi per distributore
|
||||
$prezzi = [];
|
||||
|
||||
// Salto le 2 inutili prime righe
|
||||
fgetcsv($csvPrezzi);
|
||||
fgetcsv($csvPrezzi);
|
||||
|
||||
while (($line = fgetcsv($csvPrezzi, 0, ';')) !== false) {
|
||||
$idimpianto = $line[0];
|
||||
$tipo = $line[1];
|
||||
$prezzo = (int)$line[2] / 1000;
|
||||
$isSelf = (int)$line[3];
|
||||
$ultimo_aggiornamento = $line[4];
|
||||
|
||||
$prezzi[ $idimpianto ][] = [
|
||||
'tipo' => strtoupper($tipo),
|
||||
'prezzo' => $prezzo,
|
||||
'isSelf' => $isSelf,
|
||||
'ultimo_aggiornamento' => $ultimo_aggiornamento,
|
||||
];
|
||||
}
|
||||
|
||||
fclose($csvPrezzi);
|
||||
|
||||
|
||||
// Salto le 2 inutili prime righe
|
||||
fgetcsv($csvDistributori);
|
||||
fgetcsv($csvDistributori);
|
||||
|
||||
// Costruzione dati geojson
|
||||
while(($line = fgetcsv($csvDistributori, 0, ';')) !== FALSE){
|
||||
$idimpianto = $line[0];
|
||||
$name = $line[2];
|
||||
$lat = $line[8] !== 'NULL' ? $line[8] : null;
|
||||
$lon = $line[9] !== 'NULL' ? $line[9] : null;
|
||||
$ultimo_aggiornamento = '';
|
||||
$description = [];
|
||||
|
||||
if (!empty($lat) && !empty($lon)) {
|
||||
$description[] = '**GESTORE:**
|
||||
'.$line[1].'
|
||||
';
|
||||
|
||||
if (isset($prezzi[$idimpianto])) {
|
||||
foreach ($prezzi[$idimpianto] as $idx => $prezzo) {
|
||||
$description[] = '**'.$prezzo['tipo'].($prezzo['isSelf'] ? ' (self)' : '').':**
|
||||
'.number_format($prezzo['prezzo'], 3, ',', '.').'
|
||||
';
|
||||
|
||||
// Tengo lo stesso per il diverso tipo di carburante
|
||||
$ultimo_aggiornamento = $prezzo['ultimo_aggiornamento'];
|
||||
}
|
||||
}
|
||||
|
||||
$description[] = 'Ultimo aggiornamento: '.$ultimo_aggiornamento;
|
||||
|
||||
$geojson['features'][] = [
|
||||
"type" => "Feature",
|
||||
"properties" => [
|
||||
"idImpianto" => $idimpianto,
|
||||
"description" => implode("\n", $description),
|
||||
"name" => $name
|
||||
],
|
||||
"geometry" => [
|
||||
"type" => "Point",
|
||||
"coordinates" => [
|
||||
$lon,
|
||||
$lat
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Chiusura CSV originale
|
||||
fclose($csvDistributori);
|
||||
|
||||
|
||||
// Salvataggio file geojson
|
||||
file_put_contents( 'data.geojson', json_encode($geojson, JSON_PRETTY_PRINT) );
|
Loading…
Reference in New Issue