Simulando la expansión de entidades poligonales

13

Tengo lo que espero sea una pregunta interesante. Estoy trabajando en una tarea para una introducción al curso SIG que utiliza algunos datos de derrames de petróleo del Golfo para introducir métodos comunes de análisis espacial basados ​​en vectores (buffers, superposiciones, etc.) Tengo una clase de entidad poligonal que mantiene los límites de el derrame de petróleo de Deepwater Horizon en un día determinado, y estoy simulando su expansión con amortiguadores.

Hace el trabajo de ilustrar el concepto, pero ciertamente no proporciona resultados realistas. Me hizo pensar en cómo podría hacerse de una manera que proporcionara resultados menos uniformes, imitando / fingiendo el efecto de las corrientes que dirigen el petróleo en varias direcciones a medida que se expande.

En un sentido general, estoy buscando un flujo de trabajo que logre lo siguiente dada una función de polígono de entrada:

  • Cree una nueva entidad poligonal que sea más grande que la original en un área específica (como 10 km2) o tal vez un factor específico (como 5%)
  • La nueva característica del polígono tendría una forma arbitraria, con la advertencia de que ...
  • La nueva función de polígono contendría la función de polígono original (este punto no es un factor decisivo, pero sería bueno tenerlo)

Cualquier solución del mundo real debería involucrar el modelado de corrientes oceánicas, dinámica de fluidos y similares, lo que va más allá del alcance de lo que estoy tratando de hacer (aunque las soluciones que incorporan esto son ciertamente bienvenidas y serían interesantes de ver), pero la idea ha despertado mi curiosidad sobre el problema espacial subyacente y tengo curiosidad por saber qué soluciones existen. Tengo una solución en mente, pero me gustaría saber qué soluciones pueden tener otros.

Estoy trabajando en el mundo de ESRI, pero las soluciones que involucran otros paquetes / plataformas son ciertamente bienvenidas (aunque es posible que no pueda probarlas). Los algoritmos generales, el pseudocódigo y el código también están bien.

James M
fuente
2
Existen soluciones interesantes e innovadoras, pero me preocupa la premisa implícita de que dicho ejercicio tendría algo que ver con los derrames de petróleo. La cantidad de información científica involucrada no está más que disponible para un filósofo mirando su ombligo. Claro, es divertido esparcir polígonos: recuerdo haber escuchado a un representante de ESRI que describía hacer esto para simulaciones de fuego con ArcView 2 en el '96, pero ¿cómo justifica decir que este proceso no es arbitrario y posiblemente engañoso?
whuber
1
@whuber: no estoy afirmando que los resultados sean cualquier cosa menos arbitrarios. Tener un resultado arbitrario es algo que busco activamente en la pregunta. Tienes razón en que los resultados no se parecerían al mundo real. Esa es parte de la razón por la que titulé la pregunta como lo hice (en lugar de "Simular la expansión de un derrame de petróleo"). Estoy interesado en el aspecto de la geometría computacional / metodología SIG, no en su aplicación en ningún dominio específico. La parte del derrame de petróleo fue simplemente el impulso para pensar en un problema espacial interesante. Intentaré aclarar esto en la pregunta.
James M
Olvidé mencionar: hay una pregunta en la tarea que les pide a los estudiantes que piensen por qué usar la herramienta de búfer de esta manera es una mala elección si está tratando de reflejar la realidad. Entonces, si a alguien le preocupa que esté tratando de hacer que esto sea realista, no lo sea :)
James M
Gracias. Me preocupaba que los estudiantes impresionables, al ver una demostración gráfica genial de polígonos en expansión junto con alguna mención de "derrame de petróleo", pudieran aceptar sin crítica la primera como una representación realista de la segunda.
whuber

Respuestas:

7

Hola

Aquí creo que es una forma un poco divertida de hacerlo en PostGIS. Creo que esto podría extenderse para que la expansión siga una cadena lineal que represente la corriente. Pero ahora solo se expande en una dirección.

Se itera 50 veces y para cada iteración toma el polígono de la última iteración, lo mueve, lo amortigua (lo simplifica para que las cosas funcionen mejor) y lo une con el casco convexo. Pensé que convexhull dio un mejor resultado que unirlo.

Entonces, el resultado es 50 polígonos cada vez más grandes. Cada polígono más grande se superpone totalmente con todos los polígonos más pequeños.

Para ver el resultado, puede probarlo en http://postgisonline.org/map.php

Simplemente copie el código sql a continuación y haga clic en "map1"

CON RECURSIVO t (the_geom, n) AS (SELECCIONE 'POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometría AS the_geom, 1 como 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 como n DESDE DONDE n <50) SELECCIONE the_geom DESDE t ;

Si solo quiere ver el polígono de la iteración 30: puede agregar el
límite 1 de compensación 30
entre la t y el punto y coma al final

generar esos 50 polígonos usa aproximadamente 50 ms, por lo que debería ser posible expandir el modelo sin esperar demasiado.

Saludos Nicklas

Este fue aún mejor, creo:

CON RECURSIVO t (the_geom, n) AS (SELECCIONE 'POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometría AS the_geom, 1 como 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 as n FROM t WHERE n <50) SELECCIONE the_geom FROM t

simulando la expansión girando a la derecha

Nicklas Avén
fuente
Esa es una solución ordenada y otro recordatorio de que necesito encontrar tiempo para comenzar a aprender sobre SIG en un contexto de base de datos espacial. Es un buen ejemplo de por qué funciona un sitio como este. No solo encuentro una solución que es completamente diferente de lo que tenía en mente, sino que también encuentro un nuevo recurso como bonificación.
James M
Sí, hay muchas posibilidades con sql espacial. La consulta anterior es un poco más difícil de leer de lo habitual debido a la parte recursiva. Hay muchos recursos excelentes para ayudar a comenzar.
Nicklas Avén
3

Las advertencias de Whuber son importantes, y siempre y cuando lo haga solo con fines ilustrativos y no quiera poner en juego una dinámica de fluidos, lo cual es posible pero complica el problema.

Dicho esto, creo que es una pregunta interesante, y podría ser divertida para los estudiantes. Otra forma de ver el problema es pensarlo como un fenómeno basado en la trama, con la densidad del petróleo medida dentro de cada celda. A partir de ahí, podría usar un modelo que tenga en cuenta una ansiotropía como r.spread( documentación ) para modelar la tasa de crecimiento, quizás incluyendo falsas corrientes para 'dirigir' la propagación. De manera similar, podría hacer algo con diferentes tipos de operaciones focales dentro de ArcGIS, utilizando formas irregulares para solucionar los problemas del almacenamiento en búfer lineal.

scw
fuente
2

Creo que estaría tentado a obtener características vectoriales que representen las corrientes, y usarlas como vectores de control en una operación de deformación. La clave sería escalar los vectores correctamente para imitar la propagación de un solo día.

Estoy de acuerdo con Andy W en que colocar el límite en puntos podría ser un requisito previo. También es posible que deba densificar el número de puntos para obtener un resultado preciso.

No estoy seguro de cómo te deformas en el mundo de ESRI, me temo. Sé que la extensión de interoperabilidad de datos lo haría, pero supongo que también debe haber un método incorporado o una extensión específicamente para este tipo de cosas.

Mark Ireland
fuente
1

No me sorprendería que alguien haya hecho simulaciones similares, pero así es como creo que abordaría el proyecto (sin tener ningún conocimiento previo sobre los procesos oceánicos que difundirían el derrame de petróleo).

Si desea trabajar estrictamente con polígonos, cortaría su límite en un número predeterminado de puntos. Usando esos puntos, presentaría sus simulaciones, con elementos estocásticos con respecto a la dirección de expansión y la distancia de expansión (dentro de límites razonables predeterminados), repita esos pasos tantas veces como sea necesario. Luego, vuelva a hacer el casco convexo de todos los puntos en función de las nuevas ubicaciones (si desea que esto incluya siempre el polígono anterior, tendrá que limitar la expansión hacia afuera). Para un curso de introducción de SIG, probablemente visualice varias iteraciones posibles diferentes dados esos elementos estocásticos.

También un enfoque diferente, creo que visualizar el aceite como agentes en una simulación podría ser bastante bueno. Por ejemplo, por cada barril de petróleo crudo derramado, haga un nuevo agente, luego agregue los mismos elementos estocásticos como dije antes. Puede visualizar la expansión de los agentes en todo el Golfo a tiempo, o visualizar la densidad del petróleo a tiempo.

Suena como un proyecto realmente genial, y publica fotos cuando termines.

Andy W
fuente
0

Solo para ilustrar la variedad de resultados que puede generar una pregunta como esta, abordaré la solución que estaba pensando cuando publiqué la pregunta. Espero tener la oportunidad de implementarlo en los próximos días, y lo publicaré cuando lo haga.

  1. Rasteriza el polígono en un ráster binario.
  2. Cree un ráster más grande que los resultados de 1 con valores 0 y 1 colocados al azar. La distribución de los valores 0 y 1 coincidiría con la cantidad que el polígono necesita para expandirse. Entonces, si el polígono necesita expandirse 5 km2. para alcanzar su objetivo, habría 5 kilómetros cuadrados. valor de 1 celdas.
  3. Resultados de la unión de (1) y (2).
  4. Elimine todas las celdas del resultado de (3) que no estén adyacentes al polígono rasterizado original.
  5. Alimente los resultados de (4) en (2) en lugar del polígono rasterizado original y repita hasta que el número de (1) celdas coincida con el área objetivo.

Probablemente no sea la forma más eficiente de hacerlo, pero debería funcionar. La idea se basa en un ejercicio de modelado de crecimiento urbano que hace una clase de año superior. Su ráster aleatorio se crea en función de la idoneidad para el crecimiento, y no tienen limitaciones de área, pero la parte de crecimiento aleatorio es esencialmente la misma.

James M
fuente