[Gfoss] Qgis e stili del contorno di un poligono

Per la verità invece non mi è chiarissimo casa devi fare.

Ho due poligoni, diciamo 2 quadrati, che si sovrappongo su di un lato. E'
possibile avere il lato del poligono che "sta sotto" tratteggiato e gli
altri tre lati con linea continua?

Immagino che i poligono siano su shp differenti, altrimenti come controlli
quelli sotto e quelli sopra? Ed i tre lati che ti interessa avere con
linea continua immagino siano i tre indipendenti di entrambi i quadrati

Idee?

Direi che senza un trucchetto non si fa:
1- ai poligoni dai la vestizione che ti interessa per i tre lati non
sovrapposti
2- trasformi un layer di poligoni in linee, selezioni le linee che si
sovrappongono al lato dell'altro quadrato mediante il plugin spatial query
e elimini le rimanenti
3- vesti la linea come meglio ti serve e la porti sopra gli altri layer

Lo so che non è elegante e assomiglia più ad un'operazione da grafico che
altro, ma se proprio è necessario non mi viene in mente niente di meglio.

Iacopo

Immagino che i poligono siano su shp differenti, altrimenti come controlli

quelli sotto e quelli sopra?

Sono sul medesimo layer postgis, ordinati in base ad un valore numerico caricati tramite una query… order by valore_di_ordinamento

Ed i tre lati che ti interessa avere con
linea continua immagino siano i tre indipendenti di entrambi i quadrati

esatto.

Il cosa è sopra e cosa è sotto è fondamentale per me. Dopo provo a generare un esempio “finto” con inkskape di quello che vorrei ottenere e invio il tutto.

Ciao e grazie

Luca

Ciao Luca,

se ho ben capito il valore_di_ordinamento può funzionare come uno
z-order, ovvero i poligoni che hanno valore maggiore stanno in cima.

In questo caso (ovvero è determinabile chi stia sopra e chi stia sotto),
potresti provare a creare una vista in PostGIS che estragga le porzioni
dei poligoni con z-order inferiori che vengono nascoste da poligoni con
z-order superiori:

select a.zorder, ST_Intersection(a.geom, b.geom) from
mytable as a inner join mytable as b
on a.geom && b.geom and ST_Intersects(a.geom, b.geom)
  and b.zorder > a.zorder

In questi casi si aggiunge un a.fid <> b.fid per evitare di mettere ogni
oggetto in relazione con se stesso, ma a.zorder > b.zorder esclude già
dal join le coppie costituite dallo stesso poligono (record).

Il risultato potrebbe essere caricato come layer con bordo tratteggiato;
agendo sulla sovrapposizione e la trasparenza potresti rendere in
tratteggiato / semitrasparente le parti nascoste; una linea tratteggiata
sovrapposta alla stessa linea intera dovrebbe non vedersi.

Temo che per sovrapposizioni fra più di due poligoni il risultato
grafico possa essere di difficile lettura

Buon lavoro!

Sig

Il giorno gio, 02/02/2012 alle 15.04 +0100, Luca Mandolesi ha scritto:

Immagino che i poligono siano su shp differenti, altrimenti come
controlli
        quelli sotto e quelli sopra?

Sono sul medesimo layer postgis, ordinati in base ad un valore
numerico caricati tramite una query.... order by
valore_di_ordinamento

        Ed i tre lati che ti interessa avere con
        linea continua immagino siano i tre indipendenti di entrambi i
        quadrati

esatto.

Il cosa è sopra e cosa è sotto è fondamentale per me. Dopo provo a
generare un esempio "finto" con inkskape di quello che vorrei ottenere
e invio il tutto.

Ciao e grazie

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

Ripensandoci,

QGIS ovviamente non sa nulla del nostro z-order, ma se effettua il
rendering rispettando l'ordine dei record ce la caviamo aggiungendo un
order by zorder al layer della tavola di base. In caso contrario QGIS
potrebbe disegnare sopra un poligono che invece sta sotto, in questo
caso sarà necessario creare una seconda vista con le porzioni dei
poligoni non sovrapposte, ovvero usando ST_SymDifference() invece di
ST_Intersection.

A questo punto però dovremo caricare tre layers:
- i poligoni che non intersecano nessun poligono
- le aree di intersezione tra poligoni per i poligoni con z.order minore
- ciò che resta dei poligoni sovrapposti (con zorder minore) tolte le
aree di intersezione

A questo aggiungiamo che probabilmente ci saranno problemi di univocità
di chiave per le viste se lo stesso poligono ha più di una
sovrapposizione. Puoi sempre salvare la vista come shapefile, però.

Sig

Il giorno gio, 02/02/2012 alle 15.55 +0100, Luca Sigfrido Percich ha
scritto:

Ciao Luca,

In questo caso (ovvero è determinabile chi stia sopra e chi stia sotto),
potresti provare a creare una vista in PostGIS che estragga le porzioni
dei poligoni con z-order inferiori che vengono nascoste da poligoni con
z-order superiori:

2012/2/2 Luca Sigfrido Percich <sigfrido@tiscali.it>

Ripensandoci,

QGIS ovviamente non sa nulla del nostro z-order, ma se effettua il
rendering rispettando l’ordine dei record ce la caviamo aggiungendo un
order by zorder al layer della tavola di base. I

Esatto! Lo uso così!

Diciamo che il problema si complica ulteriormente però nel momento in cui io devo visualizzare solo un poligono di cui un lato è sovrapposto ad un altro…infatti devo fare in modo che il lato che ha sovrapposizioni risulti sempre tratteggiato, mentre gli altri no…

E diciamo che devo mettere giù un bel file svg con le mie problematiche e fare una bella ragionata sulle soluzioni altrimenti faccio molta fatica a far capire i reali problemi che ho.

Maledette convenzioni grafiche della stratigrafia archeolologica!

Ciao e grazie ancora

Luca

Ciao Luca,

Il giorno gio, 02/02/2012 alle 17.30 +0100, Luca Mandolesi ha scritto:

        QGIS ovviamente non sa nulla del nostro z-order, ma se
        effettua il
        rendering rispettando l'ordine dei record ce la caviamo
        aggiungendo un
        order by zorder al layer della tavola di base. I

Esatto! Lo uso così!

Se hai verificato che nel rendering venga rispettato l'ordine dei
poligoni, allora il trucco di creare una vista con le aree di
intersezione dovrebbe funzionare.

Se sovrapponi il layer delle aree di intersezione a quello dei poligoni
e imposti il suo stile a linea tratteggiata sul bordo e campitura vuota,
vedrai la linea tratteggiata sopra l'interno del poligono "coprente";
dove invece la linea tratteggiata segue il boundary del poligono
coprente, il suo tratteggio si confonderà con lo stile linea intera di
quest'ultimo.

Maledette convenzioni grafiche della stratigrafia archeolologica!

Da bambino avrei voluto fare l'archeologo. Hai tutta la mia invidia :slight_smile:

Sig