Sto cercando di abbinare piccoli segmenti con un segmento più grande a cui sono probabilmente legati: cuscinetto relativamente vicino, simile e uno di fronte all'altro.
Ecco un tipico esempio dei dati che ho:
Qui avrei bisogno di abbinare il segmento 652 a 198969, pur avendo 711 e 707 non corrispondenti a nulla.
Ho cercato diversi metodi, in particolare la distanza di Hausdorff (in base alle risposte qui ). L'ho calcolato usando PostGIS ma sto ottenendo risultati strani: la distanza più breve che ottengo è tra 707 e 198985 e 652 ha una distanza maggiore rispetto al 198969 rispetto al 198985, ad esempio (posso aggiungere la query e i risultati se necessario).
Hausdorff è davvero il metodo corretto per risolvere questo? Ci sono altri approcci? Ho pensato di creare semplicemente una serie di controlli sui parametri che ho citato (distanza, rilevamento, ecc.) Ma ho paura di dover aggiungere un sacco di condizioni per gestire casi limite o cose come il limite su quanto sono uno di fronte all'altro.
Aggiornamento: ho trovato un metodo che sembra un compromesso accettabile:
- Per prima cosa trovo i 10 segmenti neri più vicini a quello blu che sto cercando di abbinare (usando l'
<->
operatore PostGIS ) che sono a meno di 10 metri di distanza. - Quindi creo un nuovo segmento trovando i punti più vicini alle estremità del segmento blu su ciascuno di quelli neri (usando
ST_ClosestPoint
) e filtrando i risultati la cui lunghezza è inferiore al 90% di quello blu (nel senso che i segmenti non lo sono rivolto verso l'alto o che la differenza di rilevamento è superiore a ~ 20 °) - Quindi ottengo il primo risultato ordinato in base alla distanza e alla distanza di Hausdorff, se presente.
Potrebbe esserci qualche fine tuning da fare, ma per ora sembra fare un lavoro accettabile. Sto ancora cercando altri metodi o controlli aggiuntivi da eseguire se ho perso alcuni casi limite.