Come riaggregare tratti in contatto tra di loro.

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
28 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Come riaggregare tratti in contatto tra di loro.

Andrea Peri
Salve,

Ho uno shapefile di tratti lineari,

I quali tratti possono essere tra loro in contatto sugli estremi.

Sono alla ricerca di un metodo per ricostruire una route non basata
sulla aggregazione per attributo,
ma bensi' aggregando per "contatto".
Ovvero aggregare i tratti che sono in contatto tra di loro.
Il problema  è che l'aggregazione non è solo di tratti a due a due.
Ma bensi' anche in cascata.

Ad esempio:

se
TrattoA è in contatto con TrattoB e TrattoB è in contatto con TrattoC.

|----trattoA-----|-----trattoB------|--------trattoC-----|----trattoD---|

Il risultato che vorrei ottenere è
un nuovo tratto composto di

|-----TrattoA + TrattoB + TrattoC + TrattoD -----|

Cio' che al masskmo riesco ad ottenre è l'aggregazione di un tratto con
il suo contatto immediato
ovvero una cosa di questo genere:

|----TrattoA+TrattoB----|------TrattoB+TrattoC----|----TrattoC+TrattoD----|

Ma non riesco a ricostruire tutta la connessione.

Conoscete un software o un plugin che riesca a riprodurre un tale
risultato ?

Grazie,

Andrea.

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

a.furieri
On Mon, 11 Nov 2013 21:49:49 +0100, aperi2007 wrote:

> Salve,
>
> Ho uno shapefile di tratti lineari,
>
> I quali tratti possono essere tra loro in contatto sugli estremi.
>
> Ad esempio:
>
>
> |----trattoA-----|-----trattoB------|--------trattoC-----|----trattoD---|
>
> Il risultato che vorrei ottenere è
> un nuovo tratto composto di
>
> |-----TrattoA + TrattoB + TrattoC + TrattoD -----|
>
> Conoscete un software o un plugin che riesca a riprodurre un tale
> risultato ?
>

Andrea,
questa l'hai provata ?

SELECT ST_LineMerge(ST_Collect(geom))
FROM qualche_tavola
WHERE qualche_attributo IN ('TrattoA', 'TrattoB', 'TrattoC',
'TrattoD');

ti dovrebbe funzionare tanto con PostGIS come con splite, visto che
e' supportata direttamente dalla GEOS.

ciao Sandro
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Andrea Peri
Ciao Alessandro,
grazie per il suggerimento,

ci avevo pensato, ma la avevo scartata perche' mi genererebbe solo
legami a coppie.

Io non conosco a priori la lista degli attributi "Tratti" che compongono
una route.

e se faccio una cosa del tipo:

SELECT
     ST_LineMerge(ST_Collect(geom))
FROM
     qualche_tavola as a
WHERE
     qualche_attributo IN (select  b.qualche-attributo from qualche
tavola as b where ST_Touch(a.geom,b.geom)=1);

avrei ottenuto appunto una aggregazione a coppie.

Ovvero otterrei come tratti separati:
trattoA+trattoB e trattoB+trattoC

Andrea.

On 11/11/2013 22:01, [hidden email] wrote:

> On Mon, 11 Nov 2013 21:49:49 +0100, aperi2007 wrote:
>> Salve,
>>
>> Ho uno shapefile di tratti lineari,
>>
>> I quali tratti possono essere tra loro in contatto sugli estremi.
>>
>> Ad esempio:
>>
>>
>> |----trattoA-----|-----trattoB------|--------trattoC-----|----trattoD---|
>>
>>
>> Il risultato che vorrei ottenere è
>> un nuovo tratto composto di
>>
>> |-----TrattoA + TrattoB + TrattoC + TrattoD -----|
>>
>> Conoscete un software o un plugin che riesca a riprodurre un tale
>> risultato ?
>>
>
> Andrea,
> questa l'hai provata ?
>
> SELECT ST_LineMerge(ST_Collect(geom))
> FROM qualche_tavola
> WHERE qualche_attributo IN ('TrattoA', 'TrattoB', 'TrattoC', 'TrattoD');
>
> ti dovrebbe funzionare tanto con PostGIS come con splite, visto che
> e' supportata direttamente dalla GEOS.
>
> ciao Sandro
> _______________________________________________
> [hidden email]
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le
> posizioni dell'Associazione GFOSS.it.
> 666 iscritti al 22.7.2013

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

giohappy
In PostgreSQL potrebbe essere utile una query WITH ricorsiva. Purtroppo non posso testare in questo momento...

giovanni


Il giorno 11 novembre 2013 22:10, aperi2007 <[hidden email]> ha scritto:
Ciao Alessandro,
grazie per il suggerimento,

ci avevo pensato, ma la avevo scartata perche' mi genererebbe solo legami a coppie.

Io non conosco a priori la lista degli attributi "Tratti" che compongono una route.

e se faccio una cosa del tipo:

SELECT
    ST_LineMerge(ST_Collect(geom))
FROM
    qualche_tavola as a
WHERE
    qualche_attributo IN (select  b.qualche-attributo from qualche tavola as b where ST_Touch(a.geom,b.geom)=1);

avrei ottenuto appunto una aggregazione a coppie.

Ovvero otterrei come tratti separati:
trattoA+trattoB e trattoB+trattoC

Andrea.


On 11/11/2013 22:01, [hidden email] wrote:
On Mon, 11 Nov 2013 21:49:49 +0100, aperi2007 wrote:
Salve,

Ho uno shapefile di tratti lineari,

I quali tratti possono essere tra loro in contatto sugli estremi.

Ad esempio:


|----trattoA-----|-----trattoB------|--------trattoC-----|----trattoD---|

Il risultato che vorrei ottenere è
un nuovo tratto composto di

|-----TrattoA + TrattoB + TrattoC + TrattoD -----|

Conoscete un software o un plugin che riesca a riprodurre un tale risultato ?


Andrea,
questa l'hai provata ?

SELECT ST_LineMerge(ST_Collect(geom))
FROM qualche_tavola
WHERE qualche_attributo IN ('TrattoA', 'TrattoB', 'TrattoC', 'TrattoD');

ti dovrebbe funzionare tanto con PostGIS come con splite, visto che
e' supportata direttamente dalla GEOS.

ciao Sandro
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013



--
Giovanni Allegri
http://about.me/giovanniallegri
blog: http://blog.spaziogis.it
GEO+ geomatica in Italia http://bit.ly/GEOplus

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Novarese
In reply to this post by Andrea Peri
Andrea,
se non hai problemi di riservatezza, rendici cortesemente disponibile quella shape lineare, che' le diamo un'occhiata, grazie.
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Giuliano Curti
In reply to this post by Andrea Peri
Il giorno Mon, 11 Nov 2013 22:10:22 +0100
aperi2007 <[hidden email]> ha scritto:

ciao Andrea;


> Ciao Alessandro,
> grazie per il suggerimento,
>
> ci avevo pensato, ma la avevo scartata perche' mi genererebbe solo
> legami a coppie.
>
> Io non conosco a priori .....

a me sembra più vicino ad un problema di grafi, ad es. alla ricerca di
un path; in modo brutale potresti partire da un tratto e confrontare
gli estremi con tutti gli altri; trovato un tratto nuovo, lo elimini
dallo stock, aggiorni gli estremi e riparti, però devi controllare
molti casi:
a) se parti da un tratto a caso devi controllare tutte e due le
estremità;
b) potresti avere dei circuiti
c) potresti avere delle divaricazioni;
ad es. costruendo la struttura topologica (grafi) puoi capire molte
cose dal grado dei nodi (nodi di ordine 1 sono dei punti iniziali del
percorso, nodi di ordine 3 indicano divaricazioni, ecc.... scusa se
ripeto cose ovvie :-);

credo dipenda molto dal contesto reale su cui stai operando;
perchè non posti uno shape da qualche parte e gli si da un'occhiata
(come dice spesso l'amico Novarese :-)


> Andrea.

ciao,
giuliano
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Andrea Peri

 >a me sembra più vicino ad un problema di grafi, ad es. alla ricerca di
un path; in modo brutale potresti partire da un
 >tratto e confrontare gli estremi con tutti gli altri; trovato un
tratto nuovo, lo elimini dallo stock, aggiorni gli estremi e
 >riparti, però devi controllare molti casi: a) se parti da un tratto a
caso devi controllare tutte e due le estremità; b) potresti
 >avere dei circuiti c) potresti avere delle divaricazioni; ad es.
costruendo la struttura topologica (grafi) puoi capire molte
 >cose dal grado dei nodi (nodi di ordine 1 sono dei punti iniziali del
percorso, nodi di ordine 3 indicano divaricazioni, ecc....
 >scusa se ripeto cose ovvie :-); credo dipenda molto dal contesto reale
su cui stai operando; perchè non posti uno shape
 >da qualche parte e gli si da un'occhiata (come dice spesso l'amico
Novarese :-)

Provo ad allegare allla email uno shapefile esemplificativo molto piccolo.
Sono tutti tratti abbastanza brevi, e composti generalmente di 1,2,3, e
a volta anche 5 o 6 tratti.

Andrea.

> ciao,
> giuliano
> _______________________________________________
> [hidden email]
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
> 666 iscritti al 22.7.2013


_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013

little-sample-route.zip (6K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Andrea Peri
In reply to this post by a.furieri
Ciao Alessandro,

ho provato con una variante del tuo suggerimento:

usando spatialite ho provato a fondere tutto lo shapefile in un unico
elemento multilinestring.

con questo comando appunto:

create table aggregato_all (pk_uid integer primary key);
select
AddGeometryColumn('aggregato_all','geometry',3003,'MULTILINESTRING','XY',1);
insert into aggregato_all(geometry) select
ST_Multi(ST_LineMerge(geometry)) from tabella-dei-tratti;

dopodiche' con la elemgeo li ho riscomposti.
mi aspettavo che ritornasse le linee aggregate sui tratti in contatto
per touch.
Invece mi sono rispuntati i tratti originali. :/

Qui forse fraintendo io il significato della LineMerge ?

Ho provato anche con la ST_union, ma il risultato è analogo.

Andrea.


On 11/11/2013 22:01, [hidden email] wrote:

> On Mon, 11 Nov 2013 21:49:49 +0100, aperi2007 wrote:
>> Salve,
>>
>> Ho uno shapefile di tratti lineari,
>>
>> I quali tratti possono essere tra loro in contatto sugli estremi.
>>
>> Ad esempio:
>>
>>
>> |----trattoA-----|-----trattoB------|--------trattoC-----|----trattoD---|
>>
>>
>> Il risultato che vorrei ottenere è
>> un nuovo tratto composto di
>>
>> |-----TrattoA + TrattoB + TrattoC + TrattoD -----|
>>
>> Conoscete un software o un plugin che riesca a riprodurre un tale
>> risultato ?
>>
>
> Andrea,
> questa l'hai provata ?
>
> SELECT ST_LineMerge(ST_Collect(geom))
> FROM qualche_tavola
> WHERE qualche_attributo IN ('TrattoA', 'TrattoB', 'TrattoC', 'TrattoD');
>
> ti dovrebbe funzionare tanto con PostGIS come con splite, visto che
> e' supportata direttamente dalla GEOS.
>
> ciao Sandro
> _______________________________________________
> [hidden email]
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le
> posizioni dell'Associazione GFOSS.it.
> 666 iscritti al 22.7.2013

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Andrea Peri
In reply to this post by Novarese
Ne avevo allegato un estratto (per renderlo compatibile con la ML) alla mia precedente risposta:

Eccolo qui:
http://lists.gfoss.it/pipermail/gfoss/attachments/20131112/289e1861/attachment.obj

si tratta di salvarlo localmente e rinominrlo mettendo al posto di .obj,
.zip.

E' un estratto di pochi tratti, ma rende perfettamente l'idea.
Tutto lo shapefile è fatto cosi',
Ovvero nonè una situazione di un grafo connesso, ma bensi' un grafo disgiunto. In cui ci sono tanti tratti disgiunti, che al messimo si connettono tra di loro a gruppi di 2-3 a volta 3  5-6 massimi.
E a volte sono singoli tratti isolati (che quindi ovviamente non si connettono con ninete altro e restano tali.



Il giorno 11 novembre 2013 23:02, Novarese <[hidden email]> ha scritto:
Andrea,
se non hai problemi di riservatezza, rendici cortesemente disponibile quella
shape lineare, che' le diamo un'occhiata, grazie.



-----

--
View this message in context: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/Come-riaggregare-tratti-in-contatto-tra-di-loro-tp7584817p7584822.html
Sent from the Gfoss -- Geographic Free and Open Source Software - Italian mailing list mailing list archive at Nabble.com.
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013



--
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Novarese
Guarda se ho capito bene la tua esigenza:

http://novarese.t15.org/gfoss/chains.zip
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

a.furieri
In reply to this post by Andrea Peri
On Tue, 12 Nov 2013 01:37:49 +0100, aperi2007 wrote:

> Ciao Alessandro,
>
> ho provato con una variante del tuo suggerimento:
>
> usando spatialite ho provato a fondere tutto lo shapefile in un unico
> elemento multilinestring.
>
> con questo comando appunto:
>
> create table aggregato_all (pk_uid integer primary key);
> select
>
> AddGeometryColumn('aggregato_all','geometry',3003,'MULTILINESTRING','XY',1);
> insert into aggregato_all(geometry) select
> ST_Multi(ST_LineMerge(geometry)) from tabella-dei-tratti;
>
> dopodiche' con la elemgeo li ho riscomposti.
> mi aspettavo che ritornasse le linee aggregate sui tratti in contatto
> per touch.
> Invece mi sono rispuntati i tratti originali. :/
>
> Qui forse fraintendo io il significato della LineMerge ?
>

Andrea,

io ho provato queste tre (sempliciotte):

SELECT ST_AsText(ST_LineMerge(ST_GeomFromText(
   'MULTILINESTRING((4 4, 3 3), (2 2, 3 3), (1 1, 2 2))')));
------
LINESTRING(1 1, 2 2, 3 3, 4 4)

SELECT ST_AsText(ST_LineMerge(ST_GeomFromText(
   'MULTILINESTRING((4 4, 3 3), (2 2, 3 3), (1 1, 2 2), (10 10, 20
20))')));
------
MULTILINESTRING((1 1, 2 2, 3 3, 4 4), (10 10, 20 20))

SELECT ST_AsText(ST_LineMerge(ST_GeomFromText(
   'MULTILINESTRING((4 4, 3 3), (2 2, 3 3), (1 1, 2 2), (2 2, 2 4))')));
------
MULTILINESTRING((1 1, 2 2), (2 2, 3 3, 4 4), (2 2, 2 4))

come vedi, fanno sempre esattamente quel che ci si aspetterebbe.

poi ho pure provato ad importare ed elaborare il tuo test
little_sample_route:

CREATE TABLE sample2 AS
SELECT ST_LineMerge(ST_Collect(geometry))
FROM little_sample_route;
SELECT RecoverGeometryColumn('sample2', 'geom', 0, 'MULTILINESTRING',
'XY');
.elemgeo

ottengo 9 linestrings, contro i 24 di partenza; quindi anche
in questo caso parrebbe funzionare bene secondo le attese.

poi pero' ho provato con un mio dataset ben piu' massiccio
e complesso (un pezzo di grafo stradale): e questa volta,
proprio come segnali tu, mi sono tornati indietro esattamente
tutti i singoli linestring di origine senza alcuna riaggregazione.

N.B.: e' tutto gestito internamente dalla GEOSLineMerge, splite
passa semplicemente i dati avanti e indietro verso la GEOS.

come ipotesi di interpretazione, parrebbe quindi che sia proprio
la GEOS che quando la situazione e' troppo complicata (= ci sono
troppi case ambigui, tipo biforcazioni e diramazioni, oppure quando
si vengono a creare delle maglie chiuse) evita di operare.
Viceversa opera correttamente quando scopre che e' possibile
riaggregare linee continue "ragionevoli" senza nessuna ambiguita'.

e quindi in ultima analisi si torna al problema della ST_Touches()
per isolare in via preliminare tutti i tratti adiacenti; una specie
di pre-processing.
ma questo non e' un task facile da implementare in puro SQL,
richiederebbe piuttosto un approccio procedurale ricorsivo  ;-)

ciao Sandro
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Giuliano Curti
In reply to this post by Andrea Peri
Il giorno Tue, 12 Nov 2013 14:35:36 +0100
giulianc51 <[hidden email]> ha scritto:

> ....

scusa, dimenticavo;

una importante semplificazione che puoi fare (affidandoti ad un
approccio graph-like) è quello di eliminare i vertici di grado 2, dove
entra un arco e ne esce un altro (sono quelli che ho chiamato
"insigificanti" prima), fondendo i due archi in uno solo;
trasformerebbe la tua geometria nello schema da me descritto a parole
con notevole alleggerimento del problema

 
ciao,
giuliano

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Andrea Peri
In reply to this post by Novarese
E' proprio quella che cercavo di ottenere.

Una riaggregazione da nodo a nodo.




Il giorno 12 novembre 2013 08:15, Novarese <[hidden email]> ha scritto:
Guarda se ho capito bene la tua esigenza:

http://novarese.t15.org/gfoss/chains.zip
<http://novarese.t15.org/gfoss/chains.zip>



-----

--
View this message in context: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/Come-riaggregare-tratti-in-contatto-tra-di-loro-tp7584817p7584835.html
Sent from the Gfoss -- Geographic Free and Open Source Software - Italian mailing list mailing list archive at Nabble.com.
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013



--
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Andrea Peri
In reply to this post by Giuliano Curti
In effetti hai ragione.
Il risultato lo otterrei anche aggregando i tratti che hanno in comune uno pseudo-nodo.

Pero' anche in questo modo, mi resta il problema che lavorando su shapefile o su db riesco a aggregarli solo a coppie di due.

Ma forse sto sbagliando qualcosa...



Il giorno 12 novembre 2013 14:45, giulianc51 <[hidden email]> ha scritto:
Il giorno Tue, 12 Nov 2013 14:35:36 +0100
giulianc51 <[hidden email]> ha scritto:

> ....

scusa, dimenticavo;

una importante semplificazione che puoi fare (affidandoti ad un
approccio graph-like) è quello di eliminare i vertici di grado 2, dove
entra un arco e ne esce un altro (sono quelli che ho chiamato
"insigificanti" prima), fondendo i due archi in uno solo;
trasformerebbe la tua geometria nello schema da me descritto a parole
con notevole alleggerimento del problema


ciao,
giuliano

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013



--
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Giuliano Curti
Il giorno Tue, 12 Nov 2013 17:22:40 +0100
Andrea Peri <[hidden email]> ha scritto:

> In effetti hai ragione.
> ........
> Pero' anche in questo modo, mi resta il problema che lavorando su
> shapefile o su db riesco a aggregarli solo a coppie di due.
>
> Ma forse sto sbagliando qualcosa...

..o forse io :-)


ho ripreso la tua prima mail e vedo:

> .....
> Ovvero aggregare i tratti che sono in contatto tra di loro.
> Il problema  è che l'aggregazione non è solo di tratti a due a due.
> Ma bensi' anche in cascata.

quindi il tuo è un problema di "semplificazione"? capisco bene?
nel caso, cosa vuoi ottenere per la linestring in alto a
sinistra, quella con le diramazioni: ridurla a 5 linestring come ha
fatto Novarese? ridurla a 3 linestring?  


ciao,
giuliano
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Andrea Peri
On 12/11/2013 18:05, giulianc51 wrote:
> quindi il tuo è un problema di "semplificazione"? capisco bene?
> nel caso, cosa vuoi ottenere per la linestring in alto a
> sinistra, quella con le diramazioni: ridurla a 5 linestring come ha
> fatto Novarese? ridurla a 3 linestring?

Si, semplificazione, intesa come riduzione di records.

L'obiettivo era arrivare alla diramazione a 5 linestring.

Andrea.

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Novarese
Signori, vi dico come ho fatto io, poi vedete eventualmente se esistano strumenti alternativi per arrivare allo stesso risultato.

In ambiente Cad cartografico (aziendale), mi sono creato una topologia di tipo 'network', ottenendo all'istante 9 tronchi contigui, che poi ho esportato come nuovo shapefile.

In una topologia lineare, segmenti adiacenti vengono concatenati in automatico fino al prossimo incrocio, ovvero dove in uno stesso punto insistono almeno 3 segmenti.
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Sandro Santilli
In reply to this post by Andrea Peri
On Mon, Nov 11, 2013 at 10:10:22PM +0100, aperi2007 wrote:
> Ciao Alessandro,
> grazie per il suggerimento,
>
> ci avevo pensato, ma la avevo scartata perche' mi genererebbe solo
> legami a coppie.

Non mi risulta:

strk=# select ST_AsText(ST_LineMerge(ST_Collect(g))) FROM ( VALUES
 ('LINESTRING(0 0, 10 0)'),  -- trattoA
 ('LINESTRING(10 0, 20 0)'), -- trattoB
 ('LINESTRING(20 0, 30 0)'), -- trattoC
 ('LINESTRING(30 0, 40 0)') -- trattoD
) f(g);
           st_astext
--------------------------------
 LINESTRING(0 0,10 0,20 0,30 0,40 0)
(1 row)

> e se faccio una cosa del tipo:
>
> SELECT
>     ST_LineMerge(ST_Collect(geom))
> FROM
>     qualche_tavola as a
> WHERE
>     qualche_attributo IN (select  b.qualche-attributo from qualche
> tavola as b where ST_Touch(a.geom,b.geom)=1);
>
> avrei ottenuto appunto una aggregazione a coppie.
>
> Ovvero otterrei come tratti separati:
> trattoA+trattoB e trattoB+trattoC

Certo se limiti con ST_Touch sei tu a chiedere le coppie.

--strk;

> >On Mon, 11 Nov 2013 21:49:49 +0100, aperi2007 wrote:

> >>Ho uno shapefile di tratti lineari,
> >>
> >>I quali tratti possono essere tra loro in contatto sugli estremi.
> >>
> >>Ad esempio:
> >>
> >>
> >>|----trattoA-----|-----trattoB------|--------trattoC-----|----trattoD---|
> >>
> >>
> >>Il risultato che vorrei ottenere è
> >>un nuovo tratto composto di
> >>
> >>|-----TrattoA + TrattoB + TrattoC + TrattoD -----|
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Andrea Peri

Infatti.
Indubbiamente la Touch non va bene , almeno non applicata in tale modo.
Ma non vedo neanche con quale altro modo posso evitare che mi crei delle
geometrie multiparte
aggregandomi anche linee disgiunte.

Il suggerimento iniziale si basava sul conoscere a priori quali fossero
le linee che si voleva fondere assieme.
Il problema è che non sono note a priori.
O meglio, la regola è che si vuole fondere le linee che rappresentano un
continuum

La relazione di continuita' tra due linee è data dalla relazione di
Touch, ma come dicevo da sola non basta perche'
funziona solo per aggregare due linee.

On 12/11/2013 23:33, Sandro Santilli wrote:

> On Mon, Nov 11, 2013 at 10:10:22PM +0100, aperi2007 wrote:
>> Ciao Alessandro,
>> grazie per il suggerimento,
>>
>> ci avevo pensato, ma la avevo scartata perche' mi genererebbe solo
>> legami a coppie.
> Non mi risulta:
>
> strk=# select ST_AsText(ST_LineMerge(ST_Collect(g))) FROM ( VALUES
>   ('LINESTRING(0 0, 10 0)'),  -- trattoA
>   ('LINESTRING(10 0, 20 0)'), -- trattoB
>   ('LINESTRING(20 0, 30 0)'), -- trattoC
>   ('LINESTRING(30 0, 40 0)') -- trattoD
> ) f(g);
>             st_astext
> --------------------------------
>   LINESTRING(0 0,10 0,20 0,30 0,40 0)
> (1 row)
>
>> e se faccio una cosa del tipo:
>>
>> SELECT
>>      ST_LineMerge(ST_Collect(geom))
>> FROM
>>      qualche_tavola as a
>> WHERE
>>      qualche_attributo IN (select  b.qualche-attributo from qualche
>> tavola as b where ST_Touch(a.geom,b.geom)=1);
>>
>> avrei ottenuto appunto una aggregazione a coppie.
>>
>> Ovvero otterrei come tratti separati:
>> trattoA+trattoB e trattoB+trattoC
> Certo se limiti con ST_Touch sei tu a chiedere le coppie.
>
> --strk;
>
>>> On Mon, 11 Nov 2013 21:49:49 +0100, aperi2007 wrote:
>>>> Ho uno shapefile di tratti lineari,
>>>>
>>>> I quali tratti possono essere tra loro in contatto sugli estremi.
>>>>
>>>> Ad esempio:
>>>>
>>>>
>>>> |----trattoA-----|-----trattoB------|--------trattoC-----|----trattoD---|
>>>>
>>>>
>>>> Il risultato che vorrei ottenere è
>>>> un nuovo tratto composto di
>>>>
>>>> |-----TrattoA + TrattoB + TrattoC + TrattoD -----|

_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
Reply | Threaded
Open this post in threaded view
|

Re: Come riaggregare tratti in contatto tra di loro.

Sandro Santilli
On Wed, Nov 13, 2013 at 12:26:18AM +0100, aperi2007 wrote:
>
> Infatti.
> Indubbiamente la Touch non va bene , almeno non applicata in tale modo.
> Ma non vedo neanche con quale altro modo posso evitare che mi crei
> delle geometrie multiparte
> aggregandomi anche linee disgiunte.

Le aggrega come MULTILINE, puoi fare un ST_Dump a posteriori.

--strk;
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
12