[Gfoss] da pyqgis o da geodb: funzioni per ricavare l'angolo tra due rette

Salve a tutti,
vorrei capire se esistono funzioni per ricavare gli angoli di intersezione tra 2 rette su un gis.

In particolare vorrei ricavare l’angolo di itersezione tra due linee per capire se siamo davanti ad angoli più o meno retti, magari che stiano in un range prestabilito. Ovviamente gli angoli potrebbero essere due, se da una retta ne parte un’altra, oppure 4 se le due si intersecano.

detta in archeologizese: dato un grafo delle strade poter ricavare i punti di intersezione in un range accettabile per essere definito angolo retto e ricavare eventuali assi centuriali.

So mica se mi son spiegato! :slight_smile:

Grazie
Luca

On Fri, 5 Apr 2013 18:49:23 +0200, Luca Mandolesi wrote:

vorrei capire se esistono funzioni per ricavare gli angoli di
intersezione tra 2 rette su un gis.

Luca,

non serve assolutamente nulla di esoterico: basta un pizzico di geometria
analitica del liceo fatta con le quattro operazioni aritmetiche.
giunto un rinfreschino di memoria se puo' tornare utile:
http://it.wikipedia.org/wiki/Coefficiente_angolare

assumendo di avere due segmenti arbitrari che coincidono sul vertice [x0,y0]:
gli altri due vertici saranno rispettivamente [x1,y1] ed [x2,y2]
(insomma, formano una bella V)

prima ti calcoli il coefficiente angolare di ciascuno dei due segmenti
con questa formuletta:

m1 = (y1 - y0) / (x1 - x0)
m2 = (y2 - y0) / (x2 - x0)

poi ti calcoli il prodotto dei due coefficienti angolari: se i segmenti
sono rigorosamente perpendicolari ti deve tornare esattamente -1

m1 * m2 == -1.0

se invece sono "quasi perpendicolari" ti tornera' un valore leggermente
maggiore (o minore): dato che immagino sara' abbastanza difficile ricostruire
la tolleranza/accuratezza delle gromae utilizzate dagli agrimensori dell'epoca,
suppongo che ti convenga operare empiricamente.
p.es. puoi iniziare verificando gli intevalli tra -0.9 e -1.1 (-0.8 | -1.2)
... (-0.7 | -1.3) e da li poi procedi calibrandoti "ad occhio spannanometrico"
i valori limite piu' appropriati per valutare le tue centuriazioni.

naturalmente devi stare ben attento al trappolone in agguato: se uno dei
due segmenti e' esattamente orizzontale oppure verticale il tuo programmino
andra' "misteriosamente" in crash :wink:
... devi blindare il tuo codice contro questa eventualita'

ciao Sandro

--
Il messaggio e' stato analizzato alla ricerca di virus o
contenuti pericolosi da MailScanner, ed e'
risultato non infetto.

Il giorno Fri, 05 Apr 2013 21:24:52 +0200
a.furieri@lqt.it ha scritto:

On Fri, 5 Apr 2013 18:49:23 +0200, Luca Mandolesi wrote:
> vorrei capire se esistono funzioni per ricavare gli angoli di
> intersezione tra 2 rette su un gis.
>

Luca,

non serve assolutamente nulla di esoterico: basta un pizzico di
geometria
analitica del liceo fatta con le quattro operazioni aritmetiche.
giunto un rinfreschino di memoria se puo' tornare utile:
http://it.wikipedia.org/wiki/Coefficiente_angolare
......

oppure il dot product, che forse non ha le contro indicazioni segnalate
da Sandro (dovrei ripassarlo meglio), semplicemente non accetta vettori
degeneri (di lunghezza nulla) :slight_smile:

qualche tempo fa, occupandomi dei miei plugin di editing grafico delle
features, me ne sono occupato; non ricordo (è un pò che le sto
trascurando.....) se ho già qualcosa di pronto, ma in ogni caso non
dovrebbe essere difficile implementarlo; ovviamente mi riferisco ad
un approccio interattivo: l'utente seleziona due linee ed ottiene
l'angolo/i compreso/i (magari l'angolo fra il primo segmento ed
il secondo in cw/ccw);

piccola complicazione: le "linee" in qGis sono in realtà sono polilinee
e quindi vanno precisati i tratti fra i quali vuoi avere l'angolo; ma
penso si possa risolvere; oppure, metodo più generale, definendo tre
punti;

ciao Sandro

ciao,
giuliano