Skip to content

Latest commit

 

History

History
57 lines (37 loc) · 2.8 KB

hausdorff_distance.md

File metadata and controls

57 lines (37 loc) · 2.8 KB

Funzione hausdorff_distance

Restituisce la distanza di Hausdorff tra due geometrie. Questa è in sostanza una misura di come le 2 geometrie sono simili o dissimili: una distanza più bassa indica geometrie più simili. La funzione può essere eseguita con un argomento opzionale di densificazione della frazione. Se non viene specificato, viene utilizzata una approssimazione alla distanza standard di Hausdorff. Questa approssimazione è esatta o abbastanza vicina per un grande sottoinsieme di casi utili. Esempi di questi sono:

  • calcolare la distanza tra Linestrings che sono approssimativamente paralleli tra loro e sono sostanzialmente uguali in lunghezza. Ciò si verifica nelle verifica di reti lineari.
  • testare la somiglianza di geometrie.

Se l'approssimazione predefinita fornita da questo metodo è insufficiente, specifica l'argomento opzionale di densificazione della frazione. Specificando questo argomento si esegue una densificazione del segmento prima di calcolare la distanza Hausdorff discreta. Il parametro imposta la frazione con cui densificare ogni segmento. Ogni segmento sarà suddiviso in un numero di subsegmenti di uguale lunghezza, la cui frazione della lunghezza totale è la più vicina alla frazione data. Riducendo il parametro di densificazione della frazione, la distanza restituita si avvicinerà alla vera distanza Hausdorff per le geometrie.

Sintassi

hausdorff_distance(geometry a, geometry b, densify_fraction)

Argomenti

  • geometry a una geometria
  • geometry b una geometria
  • densify_fraction quantità di densificazione della frazione

Esempi

  • hausdorff_distance( geometry1:= geom_from_wkt('LINESTRING (0 0, 2 1)'),geometry2:=geom_from_wkt('LINESTRING (0 0, 2 0)')) → 2 hausdorff_distance( geom_from_wkt('LINESTRING (130 0, 0 0, 0 150)'),geom_from_wkt('LINESTRING (10 10, 10 150, 130 10)')) → 14.142135623 hausdorff_distance( geom_from_wkt('LINESTRING (130 0, 0 0, 0 150)'),geom_from_wkt('LINESTRING (10 10, 10 150, 130 10)'),0.5) → 70.0

nota bene

--

osservazioni

--

Nel caso di geometrie puntuali la hausdorff_distance coincide con la funzione distance, segue un esempio:

format_number(
hausdorff_distance( 
transform($geometry,'EPSG:4326','EPSG:3004'), 
transform(geometry(get_feature('fontanelle','n',1)),'EPSG:4326','EPSG:3004'))/1000,4) || ' km'  
|| '\n'|| 
format_number(
distance( 
transform($geometry,'EPSG:4326','EPSG:3004'), 
transform(geometry(get_feature('fontanelle','n',1)),'EPSG:4326','EPSG:3004'))/1000,4) || ' km'


In questo esempio confronto due layer: il numero più piccolo indica il poligono più simile a al poligono più grande.