Trovare un polo di inaccessibilità rispetto a più punti senza usare raster


9

Voglio trovare un "punto di inaccessibilità" da una serie di punti, che rappresentano città e villaggi in Scozia. Utilizzo degli strumenti FOSS GIS (QGIS, SAGA, GRASS, Postgres / PostGIS ...).

Questo è il punto più lontano da qualsiasi centro della popolazione. Questo sarebbe il centro del cerchio più grande che non contiene una città, ma avrà una città ai margini.

C'è un approccio raster, che funziona: il filtro di prossimità GDAL .

Esiste un modo basato su VECTOR per farlo? Uno che non richiede rasterizzazione?

Ecco il mio tentativo con raster ...

  • Inizia con uno strato di punti in una proiezione adatta in metri (sto usando OSGB, 27700)
  • Aggiungi un campo chiamato "uno" e impostalo su un numero intero con valore costante 1.
  • Da vettore a raster, comando di modifica per usare -a uno e usando GEO anziché pixel. Assicurati che i pixel siano quadrati!
  • Crea contorni sul raster di prossimità (in questo caso, 1 km di larghezza)

Ecco come appare. Ho disegnato alcuni punti candidati a mano ;-)

inserisci qui la descrizione dell'immagine

Ho pensato che dissolvere i buffer ripetuti (usando il plug-in Multi ring buffer ) potesse funzionare, ma sospetto di non avere abbastanza memoria per farlo funzionare.

Risposte:


7

Immagino sia il centro del triangolo che circonda con il raggio maggiore, che tocca non più di 3 punti. Nell'immagine in basso sono mostrati i primi 11 di tali centri. Sono etichettati dal loro numero di classifica.

inserisci qui la descrizione dell'immagine

È sufficiente eliminare quelli che si trovano all'esterno dei triangoli e definire il campione, ovvero il No3 nella foto.

AGGIORNAMENTO ISPIRATO DA TROVARE STEVEN:

inserisci qui la descrizione dell'immagine

Il risultato sopra riportato a differenza della prima soluzione ottenuta in ArcGIS senza script (ma con licenza avanzata) e funziona! Tuttavia può produrre risultati discutibili sui bordi di un'area di studio, ad esempio il punto n. 1, ovvero il secondo punto più remoto trovato ...


1
Wow, grazie per averlo condiviso! Ho provato a seguire il tuo flusso di lavoro in QGIS da (1) Punti a Delaunay ( Vector | Delaunay Triangulation), (2) Seleziona il triangolo campione (Calcolato $areasulla tabella degli attributi dei poligoni Delaunay) e ho salvato il più grande come nuovo livello (3) Trova circumcenter ( Processing | GRASS | Vector | v.voronoi.skeletonsu il triangolo campione). Pensi che questo metodo sia corretto?
Kazuhito,

Il primo passo è corretto. Ho calcolato i centri exradius per TUTTI i triangoli. Per trovare il centro ho costruito l'interno perpendicolare per i punti medi di tutti e 3 i lati e trovare l'intersezione (combinazione 3,2).
FelixIP

Cerchio del triangolo circoscritto, non circoscritto.
FelixIP

Grazie mille! (e grazie anche per la bella foto. Più inclino lo sfondo, più diventa affascinante.)
Kazuhito

1
Bella osservazione! Lo proverò e aggiornerò la risposta. A differenza della prima soluzione, non richiederà scripting almeno in Arcgis.
FelixIP,

5

Ecco un seguito. Grazie a @FelixIP per avermi indicato nella giusta direzione!

Utilizzando i dati OSM provenienti dall'Australia, sono stato in grado di trovare il "punto di inaccessibilità" nel continente australiano: lo faccio intorno a 260 km equidistante da Akarnenehe, Bedourie e Mount Dare, a POINT (137.234888 -24.966466)

inserisci qui la descrizione dell'immagine

Ho trovato un flusso di lavoro abbastanza semplice in QGIS che utilizza una combinazione di approcci raster e vettoriali. Sono sicuro che un approccio simile funzionerebbe in altri GIS.

Il momento degli "a-ha" è venuto dal notare questo

I massimi cadono tutti su tre punti sulla maglia di voronoi - punti in cui si incontrano triplette adiacenti di poligoni voronoi.

L'approccio era il seguente: -

  • lavorare in una proiezione basata su metri. Ho usato 3857, non l'ideale ma i miei dati OSM erano in quel formato :)
  • ottenere uno strato che rappresenta i punti di interesse in ("città", "villaggio", "città", "frazione")
  • crea una mesh voronoi da questo livello
  • utilizzare i nodi di estrazione per ottenere i tripunti
  • creare il raster di prossimità (come mostrato nella domanda)
  • aggancia il raster al contorno del paesaggio, quindi i pixel del mare sono impostati su 0.
  • utilizzare lo strumento Point Sampling sui nodi estratti rispetto al raster

Quindi utilizzare Db Manager e livelli virtuali per trovare il nodo con il valore di distanza maggiore sul raster.

select 
    rowid,
    name,
    proximity2,
    st_astext(st_transform(geometry,4326)) as pt, 
    st_buffer(geometry, proximity2) as geometry
from 
    "samples" 
order by 
    proximity2 desc 
limit 1;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.