[Gfoss] R: elaborazione grafo Postgis

Giannini Pietro PGiannini a bytewise.it
Mar 9 Giu 2009 12:40:22 CEST


Ti conviene scrivere un programmino in plpgsql.
Prima preparati una tabella linee con due campi interi per accogliere le id dei nodi e un campo geometria LINESTRING.

SELECT * FROM nodi;
LOOP sui record selezionati
        SELECT * FROM nodi WHERE nodi.id != nodo_corrente.id
        LOOP sui record selezionati
        INSERT INTO linee (nodo_id_1,nodo_id_2,geometria) VALUES
        (
                nodo_corrente_loop_padre.id,
                nodo_corrente_loop_figlio.id,
                funzione_postgis_per_ricavare_geometria_linea
                (
                        nodo_corrente_loop_padre.geometria,
                        nodo_corrente_loop_figlio.geometria
                )
        );
        FINE LOOP;
FINE LOOP;


Se ti vuoi divertire a scrivere tu la funzione, NON leggere le righe sottostanti!

Saluti
....................pg



Pietro Giannini
Bytewise srl - Area GIS
41░50'38.58"N 12░29'13.39"E




----------------------------------------------------------------
CREATE OR REPLACE FUNCTION test_linee() RETURNS void AS
$BODY$
DECLARE
r_res RECORD;
r_subres RECORD;
i_gid INT;

BEGIN
        i_gid := 0;
        FOR r_res IN SELECT * FROM punti LOOP
                FOR r_subres IN SELECT * FROM punti WHERE id != r_res.id LOOP
                        RAISE NOTICE 'linea tra punto % e punto % ', r_res.id, r_subres.id;
                        INSERT INTO linee(gid,p1,p2,the_geom) VALUES
                                (i_gid,r_res.id, r_subres.id,linefromtext(
                                        'LINESTRING(' || x(r_res.the_geom) || ' ' || y(r_res.the_geom) || ',' ||
                                        x(r_subres.the_geom) || ' ' || y(r_subres.the_geom) ||  ')'
                                ));
                        i_gid := i_gid+1;
                END LOOP;
        END LOOP;
END;
$BODY$
LANGUAGE plpgsql;

SELECT test_linee();
----------------------------------------------------------------






-----Messaggio originale-----
Da: gfoss-bounces a faunalia.it [mailto:gfoss-bounces a faunalia.it] Per conto di iacopo
Inviato: martedý 9 giugno 2009 11.19
A: Gfoss a faunalia.it
Oggetto: Re: [Gfoss] elaborazione grafo Postgis

Per quello che ne so la triangolazione non va bene dato che a me serve una
linea che colleghi ogni centroide con tutti gli altri centroidi, cosa che
ovviamente la triangolazione non fa (e non credo di poter controllare il
funzionamento della delaunay).
Spero di sbagliarmi per˛!

iacopo

On Tuesday 09 June 2009 10:43:39 Antonio Falciano wrote:
> iacopo ha scritto:
> > Forse Ŕ una banalitÓ ma non riesco a risolvere un problema di
> > elaborazione con postgis (o con altro se qualcuno mi suggerisce un mezzo
> > migliore) Ho necessitÓ di creare un grafico di spostamenti pendolari in
> > cui linee rette colleghino il centroide di alcuni comuni con gli i
> > centroidi di altri comuni (i centroidi li ho come tabella a se di
> > postgres) ed in cui associare a tali linee dei valori di una tabella.
> > Il problema principale Ŕ come posso generare le linee? E come posso
> > portarmi dietro i codici che identificano i centroidi unendoli (ovvero in
> > modo che ogni linea abbia il codice di entrambi i centroidi che unisce)?
>
> Le linee congiungenti i centroidi le potresti generare con una
> triangolazione di Delaunay. Il secondo problema consiste nella
> costruzione di una topologia di rete, dove le tue linee sono gli "archi"
> e i centroidi i "nodi". A mio avviso, e' consigliabile utilizzare un
> client desktop per realizzare tali operazioni. Per restare
> all'attualita', volendoti consigliare un'applicazione, farei un
> "ballottaggio" tra GRASS e gvSIG+Sextante. :)
>
> Saluti


_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss a faunalia.it
http://lists.faunalia.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.


Maggiori informazioni sulla lista Gfoss