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
|
# 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
|
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