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.
Respuestas:
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
fuente
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.fuente
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.
fuente
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.
fuente
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.
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.
fuente