[Gfoss] Come riaggregare tratti in contatto tra di loro.

Sandro Santilli strk a keybit.net
Mar 12 Nov 2013 23:33:14 CET


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 -----|


Maggiori informazioni sulla lista Gfoss