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

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… :slight_smile:

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: claudia.testanera@gmail.com

Please consider the environment before printing

On Thu, 11 Jun 2015 11:51:12 +0200
Claudia Testanera <claudia.testanera@gmail.com> 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 :slight_smile:
spero di esser stato utile
ciao, marco

--
Marco Guiducci <marco.guiducci@regione.toscana.it>
Firenze, via di Novoli 26
055 4383194

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 <marco.guiducci@regione.toscana.it> ha scritto:

On Thu, 11 Jun 2015 11:51:12 +0200
Claudia Testanera <claudia.testanera@gmail.com> 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 :slight_smile:
spero di esser stato utile
ciao, marco


Marco Guiducci <marco.guiducci@regione.toscana.it>
Firenze, via di Novoli 26
055 4383194


Gfoss@lists.gfoss.it
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: pigrecoinfinito@gmail.com
43°51’0.54"N 10°34’27.62"E - EPSG:4326

Il giorno Thu, 11 Jun 2015 12:44:21 +0200
Marco Guiducci <marco.guiducci@regione.toscana.it> ha scritto:

On Thu, 11 Jun 2015 11:51:12 +0200
Claudia Testanera <claudia.testanera@gmail.com> wrote:

> Ciao a tutti!

ciao,

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

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

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

..... .. ciao, marco

ciao a tutti,
giuliano

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 <giulianc51@gmail.com>:

Il giorno Thu, 11 Jun 2015 12:44:21 +0200
Marco Guiducci <marco.guiducci@regione.toscana.it> ha scritto:

On Thu, 11 Jun 2015 11:51:12 +0200
Claudia Testanera <claudia.testanera@gmail.com> wrote:

Ciao a tutti!

ciao,

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

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

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

… … ciao, marco

ciao a tutti,
giuliano


Gfoss@lists.gfoss.it
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: claudia.testanera@gmail.com

Please consider the environment before printing