Simulazione dell'espansione delle funzioni poligonali


13

Ho quello che spero sia una domanda interessante. Sto lavorando a un compito per un'introduzione al corso GIS che utilizza alcuni dati di fuoriuscita di petrolio del Golfo per introdurre metodi comuni di analisi spaziale basata su vettori (buffer, overlay, ecc.) Ho una classe di caratteristiche poligonali che contiene i limiti di la fuoriuscita di petrolio di Deepwater Horizon in un dato giorno e sto simulando la sua espansione con buffer.

Fa il lavoro per illustrare il concetto, ma certamente non fornisce risultati realistici. Mi ha fatto pensare a come ciò potesse essere fatto in modo da fornire risultati meno uniformi, imitando / simulando l'effetto delle correnti che dirigono l'olio in varie direzioni mentre si espande.

In senso generale, sto cercando un flusso di lavoro che realizzi quanto segue, data la caratteristica di un poligono di input:

  • Crea una nuova funzione poligonale più grande dell'originale di un'area specifica (come 10 kmq.) O forse un fattore specificato (come il 5%)
  • La nuova funzione poligonale avrebbe una forma arbitraria, con l'avvertenza che ...
  • La nuova funzione poligono conterrebbe la funzione poligono originale (questo punto non è un problema, ma sarebbe bello avere)

Qualsiasi soluzione del mondo reale dovrebbe comportare la modellizzazione di correnti oceaniche, fluidodinamica e simili, che va ben al di fuori dell'ambito di ciò che sto cercando di fare (anche se le soluzioni che lo incorporano sono certamente ben accette e sarebbe interessante da vedere), ma l'idea ha suscitato la mia curiosità per il problema spaziale sottostante e sono curioso di sapere quali soluzioni ci siano. Ho in mente una soluzione, ma mi piacerebbe sapere quali soluzioni potrebbero avere gli altri.

Sto lavorando nel mondo ESRI, ma le soluzioni che coinvolgono altri pacchetti / piattaforme sono sicuramente benvenute (anche se potrei non essere in grado di testarle). Anche gli algoritmi generali, lo pseudocodice e il codice vanno bene.


2
Esistono soluzioni interessanti e innovative, ma sono preoccupato per la premessa implicita che un simile esercizio avrebbe assolutamente a che fare con le fuoriuscite di petrolio. La quantità di informazioni scientifiche coinvolte non è più che disponibile per un filosofo che guarda il suo ombelico. Certo, è divertente diffondere poligoni in giro - ricordo di aver sentito un rappresentante ESRI che descriveva di averlo fatto per le simulazioni di fuoco con ArcView 2 nel '96 - ma come giustifichi dire che questo processo è tutt'altro che arbitrario e forse fuorviante?
whuber

1
@whuber - Non sto sostenendo che i risultati sarebbero tutt'altro che arbitrari. Avere un risultato arbitrario è qualcosa che sto attivamente cercando nella domanda. Hai ragione sul fatto che i risultati non avrebbero alcuna somiglianza con il mondo reale. Questo è parte del motivo per cui ho intitolato la domanda come ho fatto (al contrario di "Simulare l'espansione di una fuoriuscita di petrolio"). Sono interessato all'aspetto della geometria computazionale / metodologia GIS, non alla sua applicazione in un dominio specifico. La parte della fuoriuscita di petrolio è stata semplicemente la spinta per pensare a un interessante problema spaziale. Cercherò di chiarire questo nella domanda.
James M,

Hai dimenticato di menzionare: c'è una domanda nel compito che chiede agli studenti di pensare al perché usare lo strumento buffer in questo modo sia una cattiva scelta se stai cercando di riflettere la realtà. Quindi, se qualcuno è preoccupato del fatto che sto cercando di renderlo realistico, non essere :)
James M

Grazie. Ero preoccupato che gli studenti impressionabili, dopo aver visto una bella dimostrazione grafica di poligoni in espansione insieme a qualche menzione di "fuoriuscita di petrolio", potessero accettare acriticamente il primo come una rappresentazione realistica del secondo.
whuber

Risposte:


7

ciao

Qui penso che sia un modo un po 'divertente di farlo in PostGIS. Questo penso che potrebbe essere esteso in modo che l'espansione segua un po 'di stringa che rappresenta la corrente. Ma ora si espande solo in una direzione.

Iterera 50 volte e per ogni iterazione prende il poligono dall'ultima iterazione, lo sposta, lo bufferizza (lo semplifica per rendere le cose più soffocanti) e lo unisce con lo scafo convesso. Ho pensato che lo scafo convesso avesse dato un risultato migliore rispetto all'unione.

Quindi il risultato è che 50 poligoni diventano sempre più grandi. Ogni poligono più grande si sovrappone totalmente a tutti i poligoni più piccoli.

Per vedere il risultato puoi provarlo su http://postgisonline.org/map.php

Basta copiare il codice sql qui sotto e fare clic su "map1"

WITH RECURSIVE t (the_geom, n) AS (SELEZIONA 'POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometria AS the_geom, 1 come n UNION ALL SELECT ST_Convexhull (ST_Collect (ST_Simplify (ST_Buffer (ST_Transscale (the_geom, 1.3, 2.7,1,1), 1), 0.1), the_geom)), n + 1 come n DA t DOVE n <50) SELEZIONA the_geom DA t ;

Se vuoi vedere solo il poligono dalla 30: iterazione puoi aggiungere il
limite 1 offset 30
tra la te la virgola e il punto e virgola alla fine

la generazione di questi 50 poligoni richiede circa 50 ms, quindi dovrebbe essere possibile espandere il modello senza attendere troppo.

Saluti Nicklas

Questo è stato ancora più bello penso:

WITH RECURSIVE t (the_geom, n) AS (SELEZIONA 'POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometria AS the_geom, 1 come n UNION ALL SELECT st_convexhull (ST_collect (ST_Simplify (ST_Buffer (ST_Transscale (the_geom, 1.1 * n, 15,1,1), 0.2 * n), 0.1), the_geom)), n + 1 come n DA t DOVE n <50) SELEZIONA the_geom DA t

simulando l'espansione girando a destra


Questa è una soluzione accurata, e ancora un altro promemoria che ho bisogno di trovare il tempo per iniziare a conoscere GIS in un contesto di database spaziale. È un buon esempio del perché un sito come questo funziona. Non solo trovo una soluzione completamente diversa da quella che avevo in mente, ma trovo una nuova risorsa come bonus.
James M,

Sì, ci sono molte posibiliti con sql spaziale. La query sopra è un po 'più difficile da leggere del solito a causa della parte ricorsiva. Ci sono molte ottime fonti là fuori per aiutare a iniziare.
Nicklas Avén,

3

Le avvertenze di Whuber sono importanti e fintanto che lo stai facendo solo a scopo illustrativo e non vuoi mettere in gioco la fluidodinamica, il che è possibile ma complica il problema.

Detto questo, penso che sia una domanda interessante e potrebbe essere divertente per gli studenti. Un altro modo di esaminare il problema è di pensarlo come un fenomeno basato su raster, con la densità dell'olio misurata all'interno di ciascuna cellula. Da lì, è possibile utilizzare un modello che tenga conto dell'ansiotropia come r.spread( documentazione ) per modellare il tasso di crescita, includendo forse finte correnti per "dirigere" lo spread. Allo stesso modo si potrebbe fare qualcosa con diversi tipi di operazioni focali all'interno di ArcGIS, usando forme irregolari per aggirare i problemi del buffering lineare.


2

Penso che sarei tentato di ottenere caratteristiche vettoriali che rappresentano le correnti e di usarle come vettori di controllo in un'operazione di deformazione. La chiave sarebbe ridimensionare correttamente i vettori in modo da imitare la diffusione di un solo giorno.

Concordo con Andy W sul fatto che far cadere il confine in punti potrebbe essere un prerequisito. Potrebbe anche essere necessario densificare il numero di punti per ottenere un risultato accurato.

Non sono sicuro di come ti deformi nel mondo ESRI, temo. So che l'estensione Data Interop lo farebbe, ma presumo che ci debba essere anche un metodo incorporato o un'estensione specifica per questo tipo di cose.


1

Non sarei sorpreso se qualcuno avesse effettivamente fatto simulazioni simili, ma ecco come penso che avrei approcciato il progetto (non avendo alcuna conoscenza precedente dei processi oceanici che diffonderebbero la fuoriuscita di petrolio).

Se vuoi lavorare rigorosamente con i poligoni, vorrei tagliare il confine in un numero predeterminato di punti. Usando questi punti, introdurrei le tue simulazioni, con elementi stocastici in merito alla direzione di espansione e alla distanza di espansione (entro limiti ragionevoli predeterminati), ripetendo tali passaggi tutte le volte necessarie. Quindi rifare lo scafo convesso di tutti i punti in base alle nuove posizioni (se si desidera che questo includa sempre il poligono precedente, sarà necessario limitare l'espansione verso l'esterno). Per un corso GIS introduttivo probabilmente visualizzerei diverse diverse possibili iterazioni dati quegli elementi stocastici.

Anche un po 'diverso approccio, penso che visualizzare l'olio come agenti in una simulazione potrebbe essere piuttosto interessante. Ad esempio, per ogni barile di petrolio greggio versato creare un nuovo agente, quindi aggiungere gli stessi elementi stocastici che ho detto prima. Potresti visualizzare l'espansione degli agenti nel Golfo nel tempo o visualizzare la densità del petrolio nel tempo.

Sembra un progetto davvero interessante e pubblica le foto quando hai finito.


0

Solo per illustrare la varietà di risultati che una domanda come questa può generare, affronterò la soluzione che stavo facendo il brainstorming quando ho pubblicato la domanda. Spero di avere la possibilità di implementarlo nei prossimi due giorni e lo pubblicherò quando lo farò.

  1. Rasterizza il poligono in un raster binario.
  2. Crea un raster più grande dei risultati di 1 con valori 0 e 1 posizionati casualmente. La distribuzione dei valori 0 e 1 corrisponderebbe all'importo che il poligono deve espandere. Quindi, se il poligono deve espandere 5 kmq. per raggiungere il suo obiettivo, ci sarebbero 5 km quadrati. valore di 1 cella.
  3. Risultati dell'Unione di (1) e (2).
  4. Rimuovi tutte le celle dal risultato di (3) che non sono adiacenti al poligono rasterizzato originale.
  5. Inserisci i risultati di (4) in (2) al posto del poligono rasterizzato originale e ripeti fino a quando il numero di (1) celle corrisponde all'area target.

Probabilmente non è il modo più efficiente per farlo, ma dovrebbe funzionare. L'idea si basa su un esercizio di modellizzazione della crescita urbana svolto da una classe di livello superiore. Il loro raster casuale viene creato in base all'idoneità alla crescita e non hanno limiti di area, ma la parte di crescita casuale è essenzialmente la stessa.

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.