diff --git a/README.md b/README.md index aa344a1..c5fdde8 100644 --- a/README.md +++ b/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) \ No newline at end of file diff --git a/generate.php b/generate.php new file mode 100644 index 0000000..bf16166 --- /dev/null +++ b/generate.php @@ -0,0 +1,95 @@ + "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) );