determinare l'orientazione dei lati di poligoni rispetto a una linea

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

determinare l'orientazione dei lati di poligoni rispetto a una linea

Claudia Testanera
Ciao a tutti!

Ho un problema da risolvere, per cercare di automatizzare un processo.

Nell'ambito di un progetto, devo individuare l'orientazione delle facciate di edifici (poligoni) rispetto ad una strada (linea). L'attributo che indica l'orientazione delle facciate deve essere collegato a dei punti che sono posizionati su ognuna di esse.
Qui sotto vi mando un immagine del modello che sto realizzando. Sono tutti oggetti esportabili in shape (strada, edifici - poligono verde, e punti).

Inline images 1

L'idea può essere quella di calcolare un'angolazione rispetto al nord geografico, ma sinceramente non saprei bene come cominciare...

Se mi potete aiutare... :)
Ovviamente, se avete domande rispetto a quello che dovrebbe essere il risultato, non esitate...

Grazie grazie!

Cla
--
Claudia Testanera
Tel. +39 349 095 99 45
e-mail: [hidden email]

Please consider the environment before printing

_______________________________________________
[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.
750 iscritti al 18.3.2015
Reply | Threaded
Open this post in threaded view
|

Re: [ANTISPAMRT:] determinare l'orientazione dei lati di poligoni rispetto a una linea

Marco Guiducci-3
On Thu, 11 Jun 2015 11:51:12 +0200
Claudia Testanera <[hidden email]> wrote:

> Ciao a tutti!
>
> Ho un problema da risolvere, per cercare di automatizzare un processo.
>
> Nell'ambito di un progetto, devo individuare l'orientazione delle facciate
> di edifici (poligoni) rispetto ad una strada (linea). L'attributo che
> indica l'orientazione delle facciate deve essere collegato a dei punti che
> sono posizionati su ognuna di esse.
> Qui sotto vi mando un immagine del modello che sto realizzando. Sono tutti
> oggetti esportabili in shape (strada, edifici - poligono verde, e punti).
>

penso che prima di trovare soluzioni, debbano essere definiti meglio i termini del problema.
Per esempio: definiamo cosa è l'orientamento di un segmento esterno ad una spezzata, rispetto alla spezzata stessa.
(la spezzata è la linestring che definisce la strada, il segmento è la facciata, un edificio è composto da tante facciate quanti sono i suoi segmenti, un segmento è la linea che unisce due vertici consecutivi del poligono dell'edificio).
detta così dovrei risolvere un problema di uno a molti: un segmento di facciata con molti segmenti (la spezzata) della strada. Devo forse introdurre quindi un concetto di "intorno" per limitare il tratto di strada interessato e fare un linea interpolante?
può bastare una operazione del tipo definito qui di seguito? traccio la perpendicolare alla facciata fino ad incrociare in un punto la strada. Se il punto è troppo lontano può essere che la facciata sia con angolo già prossimo ai 90° (allora introduco un livello di classe dell'attributo orientamento, del tipo superiore a tot)
Altrimenti: identifico il segmento della strada e confronto allora l'angolo con la perpendicolare (l'orientamento sarà qualcosa tipo 90-angolo). oppure prendo qualche segmento prima e dopo, faccio la media degli angoli e confronto come prima.
definiti meglio i termini, non conosco strumenti pronti all'uso, ma della sana e consapevole programmazione :-)
spero di esser stato utile
ciao, marco




--
Marco Guiducci <[hidden email]>
Firenze, via di Novoli 26
055 4383194
_______________________________________________
[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.
750 iscritti al 18.3.2015
Reply | Threaded
Open this post in threaded view
|

Re: [ANTISPAMRT:] determinare l'orientazione dei lati di poligoni rispetto a una linea

pigreco
Ciao Claudia,
a mio avvivo si potrebbe risolvere (con un pò di ingegno) con l'uso di PostGIS.
IN BREVE:
  1. devi importare i layer di interesse in PostGIS;
  2. per ogni edificio calcoli i centroidi delle facciate;
  3. per ogni centroide calcoli la minor distanza rispetto l'asse stradale;
  4. determini il punto finale del segmento di minor distanza;
  5. per ogni centroide calcoli l'azimut (che richiede il centroide e poi il punto finale precedentemente calcolato);http://postgis.net/docs/ST_Azimuth.html
  6. a parole sembra complicato, ma non è cosi; bastano poche linee di linguaggio SQL.
  7. CIAO.

Il giorno 11 giugno 2015 12:44, Marco Guiducci <[hidden email]> ha scritto:
On Thu, 11 Jun 2015 11:51:12 +0200
Claudia Testanera <[hidden email]> wrote:

> Ciao a tutti!
>
> Ho un problema da risolvere, per cercare di automatizzare un processo.
>
> Nell'ambito di un progetto, devo individuare l'orientazione delle facciate
> di edifici (poligoni) rispetto ad una strada (linea). L'attributo che
> indica l'orientazione delle facciate deve essere collegato a dei punti che
> sono posizionati su ognuna di esse.
> Qui sotto vi mando un immagine del modello che sto realizzando. Sono tutti
> oggetti esportabili in shape (strada, edifici - poligono verde, e punti).
>

penso che prima di trovare soluzioni, debbano essere definiti meglio i termini del problema.
Per esempio: definiamo cosa è l'orientamento di un segmento esterno ad una spezzata, rispetto alla spezzata stessa.
(la spezzata è la linestring che definisce la strada, il segmento è la facciata, un edificio è composto da tante facciate quanti sono i suoi segmenti, un segmento è la linea che unisce due vertici consecutivi del poligono dell'edificio).
detta così dovrei risolvere un problema di uno a molti: un segmento di facciata con molti segmenti (la spezzata) della strada. Devo forse introdurre quindi un concetto di "intorno" per limitare il tratto di strada interessato e fare un linea interpolante?
può bastare una operazione del tipo definito qui di seguito? traccio la perpendicolare alla facciata fino ad incrociare in un punto la strada. Se il punto è troppo lontano può essere che la facciata sia con angolo già prossimo ai 90° (allora introduco un livello di classe dell'attributo orientamento, del tipo superiore a tot)
Altrimenti: identifico il segmento della strada e confronto allora l'angolo con la perpendicolare (l'orientamento sarà qualcosa tipo 90-angolo). oppure prendo qualche segmento prima e dopo, faccio la media degli angoli e confronto come prima.
definiti meglio i termini, non conosco strumenti pronti all'uso, ma della sana e consapevole programmazione :-)
spero di esser stato utile
ciao, marco




--
Marco Guiducci <[hidden email]>
Firenze, via di Novoli 26
055 4383194
_______________________________________________
[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.
750 iscritti al 18.3.2015



--
Salvatore Fiandaca
mobile.:+39 327.493.8955 
m: [hidden email]
43°51'0.54"N  10°34'27.62"E - EPSG:4326



_______________________________________________
[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.
750 iscritti al 18.3.2015
Reply | Threaded
Open this post in threaded view
|

Re: [ANTISPAMRT:] determinare l'orientazione dei lati di poligoni rispetto a una linea

Giuliano Curti
In reply to this post by Marco Guiducci-3
Il giorno Thu, 11 Jun 2015 12:44:21 +0200
Marco Guiducci <[hidden email]> ha scritto:

> On Thu, 11 Jun 2015 11:51:12 +0200
> Claudia Testanera <[hidden email]> wrote:
>
> > Ciao a tutti!

ciao,

aggiungo a caldo alcune osservazioni, sono elucubrazioni che non so se
efficaci, tanto meno efficienti: semmai le butti :-)


> > Ho un problema da risolvere, per cercare di automatizzare un
> > processo.
> >
> > Nell'ambito di un progetto, devo individuare l'orientazione delle
> > facciate di edifici (poligoni) rispetto ad una strada (linea).
> > ......
>
> .... un edificio è composto da tante facciate
> quanti sono i suoi segmenti, un segmento è la linea che unisce due
> vertici consecutivi del poligono dell'edificio). detta così dovrei
> risolvere un problema di uno a molti: un segmento di facciata con
> molti segmenti (la spezzata) della strada.......

1) in computer graphics un problema frequente è quello di scartare le
faccie non viste (la cui normale coincide a meno di +- 90gradi con
quella del raggio di proiezione) questo mi fa pensare che potresti
collocarti in strada davanti all'edificio (intersezione V della normale
dal centroide C dell'edificio alla linea strada di cui già parlava
Marco se ho letto bene) e calcolare l'angolo fra ogni facciata e il
vettore VC (prodotto interno dei vettori) trattenendo solo quelle la cui
differenza angolare è > 90gradi (coseno negativo, cioè guardano verso
V);

2) un'altra soluzione, forse più vicina al tuo approccio è quella di
calcolare l'angolo rispetto al nord delle facciate e della linea strada
(sempre prodotto interno del vettore v = (x2-x1,y2-y1) e n = (0,1) e
calcolare la differenza ed anche quì scartando / trattenendo quelle
superiori / inferiori ad una certa soglia;

3) attenzione al senso di percorrenza dei vettori (lati) che influisce
sul valore degli angoli;

4) per evitare il problema del senso di percorrenza dei lati, puoi
scartare le facciate con la normale parallele alla linea strada; delle
rimanenti potresti poi trattenere solo quelle il cui punto medio è
più vicino alla strada (però complica e allunga);

5) attenzione2: puoi conoscere il senso di percorrenza del perimetro dal
segno dell'area; però le funzioni predefinite potrebbero dare (proprio
per superare il problema del senso di percorrenza del perimetro) il
valore assoluto dell'area (sentire quelli più esperti); in questo caso
non ti risolverebbero il problema e devi provvedere direttamente :-)

6) attenzione3: ho ragionato nell'ipotesi che ogni facciata coincida con
un lato (vettore) ma potrebbe non essere sempre così; nel caso di
facciate composte da alcuni segmenti tutto continua a funzionare, ma
nel caso di facciate definite ma molti segmenti la situazione potrebbe
degenerare;

a prima vista la soluzione 1) mi sembra più robusta; se mi venisse altro
aggiungo :-)


> ..... .. ciao, marco

ciao a tutti,
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.
750 iscritti al 18.3.2015
Reply | Threaded
Open this post in threaded view
|

Re: [ANTISPAMRT:] determinare l'orientazione dei lati di poligoni rispetto a una linea

Claudia Testanera
Grazie a tutti per i consigli...

Rileggendo il mio post, mi sono resa conto di essermi espressa non proprio benissimo...
Quello che devo identificare è l'orientazione delle facciate rispetto al nord geografico...

Il fatto che l'attributo debba essere cmq associato ai punti sulle facciate rimane...

Immagino in questo caso si debba partire dalla determinazione del Nord geografico...

Grazie ancora!!!

Claudia

2015-06-11 15:27 GMT+02:00 giulianc51 <[hidden email]>:
Il giorno Thu, 11 Jun 2015 12:44:21 +0200
Marco Guiducci <[hidden email]> ha scritto:

> On Thu, 11 Jun 2015 11:51:12 +0200
> Claudia Testanera <[hidden email]> wrote:
>
> > Ciao a tutti!

ciao,

aggiungo a caldo alcune osservazioni, sono elucubrazioni che non so se
efficaci, tanto meno efficienti: semmai le butti :-)


> > Ho un problema da risolvere, per cercare di automatizzare un
> > processo.
> >
> > Nell'ambito di un progetto, devo individuare l'orientazione delle
> > facciate di edifici (poligoni) rispetto ad una strada (linea).
> > ......
>
> .... un edificio è composto da tante facciate
> quanti sono i suoi segmenti, un segmento è la linea che unisce due
> vertici consecutivi del poligono dell'edificio). detta così dovrei
> risolvere un problema di uno a molti: un segmento di facciata con
> molti segmenti (la spezzata) della strada.......

1) in computer graphics un problema frequente è quello di scartare le
faccie non viste (la cui normale coincide a meno di +- 90gradi con
quella del raggio di proiezione) questo mi fa pensare che potresti
collocarti in strada davanti all'edificio (intersezione V della normale
dal centroide C dell'edificio alla linea strada di cui già parlava
Marco se ho letto bene) e calcolare l'angolo fra ogni facciata e il
vettore VC (prodotto interno dei vettori) trattenendo solo quelle la cui
differenza angolare è > 90gradi (coseno negativo, cioè guardano verso
V);

2) un'altra soluzione, forse più vicina al tuo approccio è quella di
calcolare l'angolo rispetto al nord delle facciate e della linea strada
(sempre prodotto interno del vettore v = (x2-x1,y2-y1) e n = (0,1) e
calcolare la differenza ed anche quì scartando / trattenendo quelle
superiori / inferiori ad una certa soglia;

3) attenzione al senso di percorrenza dei vettori (lati) che influisce
sul valore degli angoli;

4) per evitare il problema del senso di percorrenza dei lati, puoi
scartare le facciate con la normale parallele alla linea strada; delle
rimanenti potresti poi trattenere solo quelle il cui punto medio è
più vicino alla strada (però complica e allunga);

5) attenzione2: puoi conoscere il senso di percorrenza del perimetro dal
segno dell'area; però le funzioni predefinite potrebbero dare (proprio
per superare il problema del senso di percorrenza del perimetro) il
valore assoluto dell'area (sentire quelli più esperti); in questo caso
non ti risolverebbero il problema e devi provvedere direttamente :-)

6) attenzione3: ho ragionato nell'ipotesi che ogni facciata coincida con
un lato (vettore) ma potrebbe non essere sempre così; nel caso di
facciate composte da alcuni segmenti tutto continua a funzionare, ma
nel caso di facciate definite ma molti segmenti la situazione potrebbe
degenerare;

a prima vista la soluzione 1) mi sembra più robusta; se mi venisse altro
aggiungo :-)


> ..... .. ciao, marco

ciao a tutti,
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.
750 iscritti al 18.3.2015



--
Claudia Testanera
Tel. +39 349 095 99 45
e-mail: [hidden email]

Please consider the environment before printing

_______________________________________________
[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.
750 iscritti al 18.3.2015