[Gfoss] R: elaborazione grafo Postgis

Una nota "estetica": non dovresti aver bisogno di duplicare la tabella.
puoi fare riferimento alla stessa tebella nella query 2 volte basta che dai due
"alias" differenti.
quindi, a meno di errori, dovrebbe funziare anche come:

CREATE TABLE centroidi2linee AS
SELECT ST_MakeLine (a.the_geom, b.the_geom) AS the_geom, a.nome, a.codcom ||
b.codcom AS codice
FROM centroidi a, centroidi b;
ALTER TABLE centroidi2linee ADD COLUMN count SERIAL PRIMARY KEY;

probabilemnte puoi anche eliminare direttamente le linee che da un punto vanno a
se stesso.
f

--------------

Grazie a tutti per i consigli.
Alla fine ho usato questa soluzione da riga di comando di postgres (ci sono
arrivato dai suggerimenti sulla matrice distanze).

CREATE TABLE centroidi_bis AS SELECT nome, codcom, the_geom FROM centroidi;
CREATE TABLE centroidi2linee AS
SELECT ST_MakeLine (a.the_geom, b.the_geom) AS the_geom, a.nome, a.codcom ||
b.codcom AS codice
FROM centroidi a, centroidi_bis b;
ALTER TABLE centroidi2linee ADD COLUMN count SERIAL PRIMARY KEY;
DROP TABLE centroidi_bis;

Il campo codcom è il codice istat dei comuni che a me fa comodo concatenare
per avere un codice univoco per ogni linea che poi collego proprio ad una
tabella di dati ISTAT da censimento.
La soluzione passa per una duplicazione della tabella che poi viene
cancellata. Il suo pregio è che lanciata da riga di comando è rapidissima
(fatta con i 287 comuni della Toscana).

Iacopo

----
Área de Clientes Clix – Toda a gestão dos seus serviços online! http://cliente.clix.pt/.

On Tue, Jun 09, 2009 at 05:00:30PM +0100, feurbano@clix.pt wrote:

CREATE TABLE centroidi2linee AS
SELECT ST_MakeLine (a.the_geom, b.the_geom) AS the_geom, a.nome, a.codcom ||
b.codcom AS codice
FROM centroidi a, centroidi b;
ALTER TABLE centroidi2linee ADD COLUMN count SERIAL PRIMARY KEY;

probabilemnte puoi anche eliminare direttamente le linee che
da un punto vanno a se stesso.

  WHERE a.gid != b.gid

--strk;

Free GIS & Flash consultant/developer () ASCII Ribbon Campaign
http://foo.keybit.net/~strk/services.html /\ Keep it simple!

feurbano@clix.pt ha scritto:

Una nota "estetica": non dovresti aver bisogno di duplicare la tabella.
puoi fare riferimento alla stessa tebella nella query 2 volte basta che dai due
"alias" differenti.
quindi, a meno di errori, dovrebbe funziare anche come:

CREATE TABLE centroidi2linee AS
SELECT ST_MakeLine (a.the_geom, b.the_geom) AS the_geom, a.nome, a.codcom ||
b.codcom AS codice
FROM centroidi a, centroidi b;
ALTER TABLE centroidi2linee ADD COLUMN count SERIAL PRIMARY KEY;

probabilemnte puoi anche eliminare direttamente le linee che da un punto vanno a
se stesso.

Infatti! Basta una semplice clausola WHERE:

CREATE TABLE sample_arcs AS
  SELECT ST_MakeLine(a.the_geom, b.the_geom) AS the_geom, a.id AS
from_node, b.id AS to_node
  FROM sample_pts a, sample_pts b
  WHERE b.gid > a.gid;

che nel caso in esame diventa:

[...]
  WHERE b.codcom > a.codcom;

Cosi' si eliminano gli archi duplicati (di verso opposto)!

ciao

--
Antonio Falciano
http://www.linkedin.com/in/antoniofalciano

On Tuesday 09 June 2009 18:46:52 Antonio Falciano wrote:

feurbano@clix.pt ha scritto:
> Una nota "estetica": non dovresti aver bisogno di duplicare la tabella.
> puoi fare riferimento alla stessa tebella nella query 2 volte basta che
> dai due "alias" differenti.
> quindi, a meno di errori, dovrebbe funziare anche come:
>
> CREATE TABLE centroidi2linee AS
> SELECT ST_MakeLine (a.the_geom, b.the_geom) AS the_geom, a.nome, a.codcom
> || b.codcom AS codice
> FROM centroidi a, centroidi b;
> ALTER TABLE centroidi2linee ADD COLUMN count SERIAL PRIMARY KEY;

In effetti funziona perfettamente ed è molto più elegante.
Nel mio caso specifico la condizione != è più corretta dato che trattandosi di
un grafo di pendolari avere la doppia linea mi serve ad agganciare dati ISTAT
di spostamento da A a B, ma anche da B ad A.
Grazie a tutti per i cosigli. Spero sia utile anche ad altri.

Iacopo

Salve a tutti,
credo sia molto interessante questo argomento.

    * NOTIZIA:
      http://torlone.blogspot.com/2009/06/cartovista-20-adobe-flex-per-la.html
    * DEMO:
      http://www.cartovista.com/cartovista2/Maps/Centre_du_Quebec/Centre_du_Quebec.html
    * LA SOCIETA': http://www.cartovista.com/see.aspx

Avete mai testato qualcosa di simile in OpenSource (se esiste)?

Che io sappia anche per Mapfish si stava pensando di passare a Flex [1]....la discussione è ancora aperta!

[1]:

    http://www.camptocamp.com/fr/blog/2009/03/mapfish-labs-flex-prototype/
    http://dev.mapfish.org/sandbox/labs/FlexDashboard/bin-release/FlexDashboard.html
    http://openscales.org/

Un saluto

Fabio D'Ovidio

iacopo ha scritto:

Nel mio caso specifico la condizione != è più corretta dato che trattandosi di
un grafo di pendolari avere la doppia linea mi serve ad agganciare dati ISTAT
di spostamento da A a B, ma anche da B ad A.

Converrai con me pero' che rappresentare un singolo arco con una doppia
linea e' oramai un tantino obsoleto, oltre che ridondante. Si tratta di
una convenzione tipica dei vecchi modelli di trasporto. E poi anche con
la singola linea e' sicuramente possibile agganciare gli spostamenti in
entrambi i versi e risparmiarsi anche il concatenamento dei codici ISTAT.

ciao

--
Antonio Falciano
http://www.linkedin.com/in/antoniofalciano