PostGIS | creare una colonna che contenga i centroidi del poligoni (di un layer poligonale)

Per prima cosa creare la colonna geometrica che conterrà le coordinate dei centroidi:

nome_database=# SELECT ADDGEOMETRYCOLUMN (‘public’,’nome_tabella’, ‘centroid’, ‘3003’, ‘POINT’,2);

dove:
public indica lo schema da usare nel database;
centroid è il nome del campo da creare;
3003 è il codice EPSG del sistema di reiferimento da usare;
2 indica le dimensioni spaziali.

Poi calcolare i centroidi e popolare il nuovo campo (colonna) creato:

nome_database=# UPDATE nome_tabella SET centroid=centroid(the_geom);

Per creare una VIEW con i centroidi:

nome_database=# CREATE VIEW centroidi AS SELECT nome_campo1.tabella_poligoni, nome_campo2.tabella_poligoni,nome_campo_i.tabella_poligoni, centroid(the_geom) FROM tabella_poligoni;

postgreSQL | campo come unione di 2 o più campi

Campo come somma di 2 o più campi
Per popolare il campo di una tabella con i valori ottenuti dall’unione di altri 2 (o più) campi:
nome_database=# UPDATE nome_tabella SET nome_campo=(nome_campo1 || ‘/’ || nome_campo2);
Il simbolo “||” indica l’UNIONE; in questo caso si è interposto anche il simbolo “/” fra i valori dei due campi.

Aggiornamento di un campo in base al valore dello stesso campo in un altra tabella
nome_database=# UPDATE nome_tabella1 SET nome_campo=nome_tabella2.nome_campo FROM nome_tabella2 WHERE nome_tabella1.nome_campo=nome_tabella2.nome_campo;

unione di più geometrie con PostGIS

Metodo utilizzato nel caso si vogliano unire più oggetti di uno stesso strato PostGIS (stessa tabella PotgreSQL) che hanno valori uguali di un certo campo. Es. unire tutte le aste fluviali denominate “Adige”.

Ho seguito questo splendido post di Paolo Corti per completare la procedura.

La tabella unione deve essere create a priori inserendo, in seconda battuta, anche una colonna per memorizzare le informazioni geometriche (the_geom). Nel nostro caso:

SELECT AddGeometryColumn(”,’nome_tabella_unione’,’the_geom’,’-1′,’MULTILINESTRING’,2);

E’ importante impostare lo SRID a “-1” altrimenti viene riportato un errore di constraints (enforce_srid); inoltre lo strato viene caricato in Qgis ma non viene visualizzato.

Infine popoliamo la nuova tabella unione con i dati:

INSERT INTO nome_tabella_unione (the_geom,nome_campo1) SELECT astext(multi(ST_Union(the_geom))) AS the_geom,nome_campo1 FROM nome_tabella_originale  GROUP BY nome_campo1;

ps2pdf per stampa di cartografia

Il modulo ps.map di GRASS produce un file postscript che può essere convertito in PDF mediante il tool “ps2pdf“.
E’ possibile impostare la risoluzione (che influisce sulla risoluzione dei fonts e dei pattern dei retini).
Vengono riportati alcuni comandi utilizzati per la creazione di un PDF da inviare ad una tipografia per la stampa in alta qualità.
$ ps2pdf -dPDFSETTINGS=/prepress -r1200 -dProcessColorModel=/DeviceCMYK nome_file.ps nonme_file.pdf
Il parametro “r1200” imposta la risoluzione a 1200 dpi; il “DeviceCMYK” dovrebbe settare l’output in quadricromia CMYK (come richiesto dalla tipografia in sede di stampa) anzichè in tricromia RGB come settato di default dal modulo ps.map di GRASS, ma sembra non funzionare.

aggiornare data e ora di sistema su Debian

Per aggiornare data e ora di Debian è necessario installare il pacchetto “ntpdate”:
# apt-get install ntpdate
quindi, da root, lanciare:
#ntpdate ntp1.inrim.it
In questo modo si sincronizza con l’ora del server indicato (nel nostro caso “ntp1.inrim.it”).

Per modificare l’ora:
# date -s “9 FEB 2009 15:51:00”
Si invoca il comando date e si danno come parametri data e ora nella forma indicata sopra; tutto fra doppie apici.

connettere 2 PC con cavo di rete crossover

Per collegare 2 PC tramite cavo di rete senza avere bisogno di un router è necessario avere un cavo di rete incrociato (10m costo approx. 14 Eur).
Configurazione dei PC:
(Debian rules :-))
– Editare il file “/etc/network/interfaces” e aggiungere la seguente impostazione (ricordarsi di anteporre un # alle altre impostazioni di rete presenti per inibirle):

PC1:
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0

PC2:
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0

Quindi collegare i PC con il cavo incrociato e riavviare i servizi di rete con:

# /etc/init.d networking restart

Poi riattivare l’interfaccia di rete oggetto di modifica (nel nostro caso eth0):

# ifup eth0

Mapserver 5

Passando da Mapserver 4.10 a Mapserver 5 sono state fatte alcune modifiche alla sintassi del MAPFILE.
Es: per indicare la colonna in base alla quale ruotare dei simboli non si usa più la sintassi:

ANGLE (o ANGLEITEM) “nome_colonna”

ma

ANGLE [nome_colonna]

con il nome della colonna origine racchiuso tra parentesi quadre.

——————————-

Problema con il fill di elementi poligonali.
In Mpaserver 5 il parametro TRANSPARENCy è stato deprecato. Al suo posto esiste OPACITY con valori che vanno da 0 (zero) = trasparente a 100 = colore pieno.
Se si vuole mantenere TRANSPARENCY (ancora riconoscituo, benchè deprecato) impostare 0 (zero) per avere la massima trasparenza e 99 per avere un colore pieno.

navit

navit, sistema di navigazione (routing) libero che utilizza i dati di OSM.

Installazione su Debian Lenny:

Abilitare i repository di debian.gfoss.it aggiungendo al file “/etc/apt/source.list” la seguente stringa:

deb http://debian.gfoss.it/ lenny main

Aggiornare la lista dei repo con:

# apt-get update

Poi:

# apt-get dist-upgrade

Quindi installare il pacchetto con:

# apt-get install navit

Recuperare le mappe:

Le mappe si recuperano da qui:

http://debian.gfoss.it/maps/

Scaricare il file “italy.bin” che contiene il planet italiano. Il formato .bin è già pronto per essere letto da Navit.

Questo file va salvato in una directory (es. “/home/nome_utente/navit_map/”).

Editare il file “/usr/share/navit/navit.xml” e commentare le parti comprese fra i tag <mapset></mapset> inserendo poi le stringhe seguenti:

<mapset enabled=”yes” > <map type=”binfile” enabled=”yes” data=”/home/nome_utente/navit_map/italy.bin”/> </mapset>

lanciare navit con:

$ navit

——————————————————————-

In alternativa al file “italy.bin” scaricare il file “italy.bz2” che contiene le mappe in formato “.osm”. Queste devono essere prima convertite in “.bin” mediante il comando:

cat italy.osm | osm2navit /home/tua_home/directory_con_le_mappe/italy.bin

Il modulo “osm2navit” (compreso nel pacchetto che ha installato navit stesso) converte i dati in formato “usabile” dal navigatore.

Compilazione e installazione:

Se si vuole compilare sono necessari i seguenti pacchetti “dev”:
– libspeechd-dev;
– libgpd-dev;
– libsdl1.2-dev;
– libglut3-dev;
– libcegui-mk2-dev;
– libglc-dev;
– libdevil-dev;
– libfribidi-dev;
– libxmu-dev;
– libgtk2.0-dev

quindi lanciare i comandi standard per la compilazione:

$ ./configure (dopo essersi posizionati nella directory che contiene i sorgenti);

$ make

# make install (da root)

Sintetizzatore vocale
Ho provato ad installare “espeak” via apt-get in Debian.
Indicare il sintetizzatore vocale da usare e la lingua editando il file “/usr/share/navit/navit.xml”
inserendo la stringa seguente:

<speech type=”cmdline” data=”espeak -s 150 -v italian ‘%s’ &amp;” />

MS Access come client di PostgreSQL

Seguire i passaggi indicati qui sotto:
– Scaricare i driver ODBC di PostgreSQL da qui.
– Prendere la versione più recente (Es. psqlodbc_08_03_0300.zip)
– Decomprimere il file
– Lanciare psqlodbc.msi
– Aprire MS Access e creare un nuovo DB vuoto
– Andare su File -> Carica dati esterni -> Collega tabelle….
– Sulla finestra che compare selezionare “ODBC Database()” nel menù in basso relativo a “Files of type”
– Clickare su “Nuovo…” e selezionare il driver “PostgreSQL Unicode”
– Dare un nome alla connessione
– Clickare su “Next” e su “Connection”: compare una finestra con 2 pagine (2 pulsanti).
In pagina 1 tenere spuntate soltanto le voci:
— “Disable Genetic Optimizer”;
— “KSQO(….)”
— Recognize Unique Indexes”
e mantenere il resto come impostato di default.
In pagina 2 spuntare “LF …” e “True is -1”; togliere la spunta da “updatable Cursors”
– Dare “OK”