PHP | Gestione di “submit” multipli in un singolo form

Con questo metodo è possibile gestire gli eventi di un form in base a scelte multiple consentite all’utente. Il codice PHP trattato esegue un codice diverso a seconda del valore impostato in un campo “input” o “select” o ….
Costruiamo il form per la scelta, mediante <select></select>, di valori alternativi. In base al valore scelto viene aperto un file diverso mediante il codice scritto nel file “script.php”.

<html>

<form action=”script.php” method=”POST”>
<b>scegli un’opzione:</b>

<p class=”pulsante”>
<select name=”nome_option”>
<option>option01</option>
<option>option02</option>
<option>option03</option>
<option>option04</option>
</select>

<input type=”submit” value=”Accedi” style=”width:150″></p>

</form>

</html>

E questo è lo “script.php”:

<?php
switch ($_POST[‘nome_option’]) {

case “option01”:
readfile (“file01.php”);
break;

case “option02“:
readfile (“file02.php”);

break;

case “option03”:
readfile (“file03.php”);
break;

case “option04”:
readfile (“file04.php”);
break;

}

?>

Viene utilizzato il costrutto “switch”, “case”…Si impiega quando è necessario effettuare test multipli su epressioni singole. Nel caso del nostro script viene aperto (con il costrutto “readfile”) un file diverso a seconda del valore selezionato nel form iniziale.

Schio su OpenStreetMap

Sta per essere terminato (manca la zona Nord) l’upload dei dati relativi allo stradario del Comune di Schio. Il Comune ha liberato i dati nel mese di ottobre 2008 rendendoli disponibili a chiunque e per qualsiasi scopo. In particolare l’associazione gfoss.it si è presa l’incarico di riversare tali dati all’interno del progetto OpenStreetMap.

Siamo ormai giunti al termine di questa operazione. All’inizio dell’upload erano già presenti molti dati (e ben fatti!). Il risultato aggiornato al 13 febbraio 2009 lo vedete qui sotto:

schio_13_02_20091

Adesso, in pieno spirito wiki, è necessaria la collaborazione degli scledensi per correggere le imperfezioni, migliorare ed affinare le informazioni. Collaborate tutti!

postgresql | archiviazione di immagini

Per archiviare le immagini in un db postgreSQL ci sono 2 metodi: salvare l’immagine direttamente nel database (con formato dati BLOB) oppure memorizzare solamente il percorso al file immagine. Questo secondo metodo risulta più pulito: in fase di dump del database le immagini vengono mantenute all’esterno del db.
Si crea una tabella “foto”:
nome_database=# CREATE TABLE foto (id integer NOT NULL, nome varchar(50), image_path varchar(100); // inserimento del percorso al file
Si popola la tabella creata:
nome_database=# INSERT INTO foto VALUES (‘1′,’foto01′,’/percorso/al/file/immagine/image001.png’);
Si concedono i GRANT di selezione agli utenti desiderati.
Le immagini possono essere visualizzate via PHP su browser web. Il codice PHP per la navigazione vine mandato al altro post.

postgis | conteggio punti ricadenti all’interno di poligoni

Questo metodo consente di contare il numero di punti ricadenti all’interno di poligoni mediante instruzione SQL in postGIS.

Partiamo da un esempio: siamo in possesso di uno strato poligonale (i.e. una griglia a maglia quadrata di lato 100m) e di uno strato puntuale (i.e. i punti che individuano antenne dislocate sul territorio). Lo scopo è quello di contare quante antenne ricadono all’interno di ogni quadrato di 100m.

La procedura illustrata crea una nuova tabella con il conteggio dei punti cercati.

nome_datbase=# CREATE TABLE nome_tabella AS SELECT tabella_polygon.cat, COUNT(id) AS count FROM tabella_point,tabella_polygon WHERE tabella_point.the_geom && tabella_polygon.the_geom AND CONTAINS (tabella_polygon.the_geom, tabella_point.the_geom) GROUP BY tabella_polygon.cat;

dove:

tabella_polygon è la tabella che contiene le griglie;

tabella_point è la tabella che contiene le antenne;

tabella_polygon.cat rappresenta un campo id univoco (il cat proviene da una esportazione di dati da GRASS);

join tra layer postGIS (tabella geometrica) e tabella postgreSQL

Dato un layer postGIS con campo chiave “id” ed una tabella postgreSQL che contiene lo stesso campo chiave si può creare una VIEW (vista) tramite JOIN sul campo comune. In questo modo le informazioni geometriche degli oggetti vengono salvate su una tabella “leggera” mentre le informazioni alfanumeriche (attributi) vengono salvate su un’altra tabella. Es:

nome_database=# SELECT tabella_dati.campo1, tabella_dati.campo2, tabella_dati.campo3,…..,tabella_dati.campon, tabella_geom.id, tabella_geom.gid, tabella_geom.the_geom FROM tabella_geom JOIN tabella_dati ON tabella_geom.id=tabella_dati.id

postgresql | elencare tutti i valori (non ripetuti) di un campo

La parola chiave DISTINCT esclude dai risultati le righe duplicate.

Es: vogliamo elencare tutti i valori che sono contenuti nel campo “nome_via” di una tabella contenente i nomi di tutte le strade. Può succedere che esistano strade “spezzate” in più tratti ed in un database geometrico (PostGIS) siano memorizzati più archi di strada con lo stesso nome. DISTINCT consente di elencare i valori non ripetuti:

nome_database=# SELECT DISTINCT nome_via FROM nome_tabella_strade;

Nel caso volessimo elencare i nomi delle strade così distinte indicando anche la lunghezza totale dei tratti che hanno lo stesso nome:

nome_database=#SELECT DISTINCT nome,sum(lunghezza) FROM nome_tabella_strade GROUP BY nome;

e se volessimo esportare l’output della query in un file CSV:

– nel prompt di psql indicare:

nome_database=# \o /percorso/alt/file/nome_file_output.csv

– poi lanciare la query:

nome_database=#SELECT DISTINCT nome,sum(lunghezza) FROM nome_tabella_strade GROUP BY nome;

– In questo modo otteniamo un file CSV con il risultato.

crop di un raster con gdal

Per ritagliare una parte di un’immagine georeferenziata (Es. ortofoto) si usa il modulo gdal_translate:

$ gdal_translate -of GTIFF -projwin 1686960 5043230 1688040 5042500 nome_raster_origine.TIF nome_raster_crop.TIF

dove:
GTIFF è il formato di output;
1686960 5043230 sono le coordinate dell’angolo superiore sx del ritaglio;
1688040 5042500 sono le coordinate dell’angolo inferiore dx del ritaglio;