Simuler l'expansion des entités surfaciques

13

J'ai ce que j'espère être une question intéressante. Je travaille sur une mission pour une introduction au cours SIG qui utilise des données sur les déversements d'hydrocarbures dans le Golfe pour introduire des méthodes d'analyse spatiale communes basées sur des vecteurs (tampons, superpositions, etc.). J'ai une classe d'entités surfaciques qui contient les limites de la marée noire de Deepwater Horizon un jour donné, et je simule son expansion avec des tampons.

Il fait le travail pour illustrer le concept, mais ne fournit certainement pas de résultats réalistes. Cela m'a fait réfléchir à la façon dont cela pourrait être fait de manière à fournir des résultats moins uniformes, imitant / simulant l'effet des courants dirigeant l'huile dans diverses directions à mesure qu'elle se dilate.

Dans un sens général, je recherche un flux de travail qui accomplirait les tâches suivantes étant donné une entité polygone en entrée:

  • Créer une nouvelle entité polygonale plus grande que l'original par une zone spécifiée (comme 10 km2) ou peut-être un facteur spécifié (comme 5%)
  • La nouvelle entité polygonale aurait une forme arbitraire, avec la réserve que ...
  • La nouvelle entité polygonale contiendrait l'entité polygonale d'origine (ce point n'est pas un facteur de rupture, mais ce serait bien d'avoir)

Toute solution du monde réel devrait impliquer la modélisation des courants océaniques, de la dynamique des fluides, etc., ce qui va bien au-delà de la portée de ce que j'essaie de faire (bien que des solutions incorporant cela soient certainement les bienvenues et seraient intéressantes à voir), mais l'idée a piqué ma curiosité au sujet du problème spatial sous-jacent et je suis curieux de savoir quelles solutions existent. J'ai une solution en tête, mais j'aimerais savoir quelles solutions les autres peuvent avoir.

Je travaille dans le monde ESRI, mais les solutions qui impliquent d'autres packages / plates-formes sont certainement les bienvenues (bien que je ne puisse pas les tester). Les algorithmes généraux, le pseudocode et le code sont également très bien.

James M
la source
2
Il existe des solutions intéressantes et innovantes, mais je suis préoccupé par la prémisse implicite qu'un tel exercice aurait quoi que ce soit à voir avec les marées noires. La quantité d'informations scientifiques impliquées n'est pas plus que disponible pour un philosophe regardant son nombril. Bien sûr, c'est amusant de répartir des polygones - je me souviens avoir entendu un représentant ESRI décrire cela pour des simulations d'incendie avec ArcView 2 en 1996 - mais comment justifiez-vous que ce processus est tout sauf arbitraire et peut-être trompeur?
whuber
1
@whuber - Je ne prétends pas que les résultats seraient tout sauf arbitraires. Avoir un résultat arbitraire est quelque chose que je recherche activement dans la question. Vous avez raison de dire que les résultats n'auraient aucune ressemblance avec le monde réel. C'est en partie la raison pour laquelle j'ai intitulé la question comme je l'ai fait (par opposition à "Simuler l'expansion d'une marée noire"). Je m'intéresse à l'aspect géométrie computationnelle / méthodologie SIG, pas à son application dans un domaine spécifique. La partie déversement d'hydrocarbures a été simplement l'impulsion pour réfléchir à un problème spatial intéressant. Je vais essayer de clarifier cela dans la question.
James M
Oublié de mentionner: il y a une question dans le devoir demandant aux étudiants de réfléchir à pourquoi utiliser l'outil tampon de cette façon est un mauvais choix si vous essayez de refléter la réalité. Donc, si quelqu'un s'inquiète que j'essaie de faire passer cela pour réaliste, ne soyez pas :)
James M
Merci. Je craignais que les étudiants impressionnables, en voyant une démonstration graphique cool des polygones en expansion avec une mention de «déversement d'hydrocarbures», pourraient accepter sans réserve le premier comme une représentation réaliste du second.
whuber

Réponses:

7

Bonjour

Ici, je pense que c'est une façon amusante de le faire dans PostGIS. Je pense que cela pourrait être étendu afin que l'expansion suive une chaîne de caractères représentant le courant. Mais maintenant, il se développe dans une seule direction.

Il itère 50 fois et pour chaque itération prend le polygone de la dernière itération, le déplace, le met en tampon (le simplifie pour rendre les choses plus fluides) et l'unionne avec la coque convexe. Je pensais que le convexhull donnait un meilleur résultat que l'union.

Le résultat est donc 50 polygones de plus en plus gros. Chaque plus grand polygone chevauche totalement tous les petits polygones.

Pour voir le résultat, vous pouvez l'essayer sur http://postgisonline.org/map.php

Copiez simplement le code sql ci-dessous et cliquez sur "map1"

AVEC RECURSIVE t (the_geom, n) AS (SELECT 'POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometry AS the_geom, 1 as 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 as n FROM t WHERE n <50) SELECT the_geom FROM t ;

Si vous voulez juste voir le polygone à partir de l'itération 30: vous pouvez ajouter la
limite 1 offset 30
entre le t et le point-virgule à la fin

la génération de ces 50 polygones utilise environ 50 ms, il devrait donc être possible d'étendre le modèle sans trop attendre.

Cordialement Nicklas

Celui-ci était encore plus agréable je pense:

AVEC RECURSIVE t (the_geom, n) AS (SELECT 'POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometry AS the_geom, 1 as 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) SELECT the_geom FROM t

simulant l'expansion en tournant à droite

Nicklas Avén
la source
C'est une solution intéressante, et encore un autre rappel que j'ai besoin de trouver du temps pour commencer à apprendre sur les SIG dans un contexte de base de données spatiales. C'est un bon exemple de la raison pour laquelle un site comme celui-ci fonctionne. Non seulement je trouve une solution complètement différente de ce que j'avais en tête, mais je trouve une nouvelle ressource en bonus.
James M
Oui, il y a beaucoup de posibilites avec sql spatial. La requête ci-dessus est un peu plus difficile à lire que d'habitude en raison de la partie récursive. Il existe de nombreuses ressources pour vous aider à démarrer.
Nicklas Avén
3

les mises en garde de whuber sont importantes, et tant que vous faites cela à des fins d'illustration uniquement et que vous ne voulez pas jouer avec la dynamique des fluides, ce qui est possible mais complique le problème.

Cela dit, je pense que c'est une question intéressante et pourrait être amusante pour les étudiants. Une autre façon d'appréhender le problème est de le considérer comme un phénomène à base de trame, avec la densité d'huile mesurée dans chaque cellule. À partir de là, vous pourriez utiliser un modèle qui prend en compte l'ansiotropie comme r.spread(la documentation ) pour modéliser le taux de croissance, en incluant peut-être des faux-courants pour «diriger» la propagation. De même, vous pouvez faire quelque chose avec différents types d' opérations focales dans ArcGIS, en utilisant des formes irrégulières pour contourner les problèmes de mise en mémoire tampon linéaire.

scw
la source
2

Je pense que je serais tenté d'obtenir des caractéristiques vectorielles qui représentent les courants et de les utiliser comme vecteurs de contrôle dans une opération de déformation. La clé serait de mettre à l'échelle les vecteurs correctement afin d'imiter la propagation d'un seul jour.

Je suis d'accord avec Andy W que la suppression de la frontière en points pourrait être une condition préalable. Vous devrez peut-être également densifier le nombre de points pour obtenir un résultat précis.

Je ne sais pas comment vous vous déformez dans le monde ESRI, je le crains. Je sais que l'extension Data Interop le ferait, mais je suppose qu'il doit également y avoir une méthode intégrée ou une extension spécifiquement pour ce genre de chose.

Mark Ireland
la source
1

Je ne serais pas surpris si quelqu'un a réellement fait des simulations similaires, mais voici comment je pense que j'aborderais le projet (n'ayant aucune connaissance préalable des processus océaniques qui diffusent la marée noire).

Si vous voulez travailler strictement avec des polygones, je découperais votre frontière en un nombre prédéterminé de points. En utilisant ces points, je présenterais vos simulations, avec des éléments stochastiques en ce qui concerne la direction d'expansion et la distance d'expansion (dans des limites raisonnables prédéterminées), répétez ces étapes autant de fois que nécessaire. Ensuite, refaites la coque convexe de tous les points en fonction des nouveaux emplacements (si vous voulez que cela inclue toujours le polygone précédent, vous devrez limiter l'expansion vers l'extérieur). Pour un cours d'introduction au SIG, je ne ferais probablement que visualiser plusieurs itérations différentes possibles compte tenu de ces éléments stochastiques.

Aussi une approche un peu différente, je pense que visualiser l'huile en tant qu'agents dans une simulation pourrait être assez cool. Par exemple, pour chaque baril de pétrole brut déversé, créez un nouvel agent, puis ajoutez les mêmes éléments stochastiques que je l'ai dit précédemment. Vous pouvez soit visualiser l'expansion des agents dans le Golfe dans le temps, soit visualiser la densité du pétrole dans le temps.

Cela ressemble à un projet vraiment cool et postez des photos lorsque vous avez terminé.

Andy W
la source
0

Juste pour illustrer la variété des résultats qu'une question comme celle-ci peut générer, je vais aborder la solution que je réfléchissais lorsque j'ai posté la question. J'espère avoir une chance de l'implémenter dans les prochains jours, et le posterai quand je le ferai.

  1. Pixellisez le polygone en un raster binaire.
  2. Créez un raster plus grand que les résultats de 1 avec des valeurs 0 et 1 placées au hasard. La distribution des valeurs 0 et 1 correspondrait à la quantité dont le polygone a besoin pour se développer. Donc, si le polygone doit s'étendre sur 5 km2. pour atteindre son objectif, il y aurait 5 km2. valeur de 1 cellules.
  3. Résultats de l'union (1) et (2).
  4. Supprimez toutes les cellules du résultat de (3) qui ne sont pas adjacentes au polygone pixellisé d'origine.
  5. Introduisez les résultats de (4) dans (2) à la place du polygone tramé d'origine et répétez jusqu'à ce que le nombre de (1) cellules corresponde à la zone cible.

Ce n'est probablement pas le moyen le plus efficace de le faire, mais cela devrait fonctionner. L'idée est basée sur un exercice de modélisation de la croissance urbaine effectué par une classe d'âge supérieur. Leur raster aléatoire est créé en fonction de leur aptitude à la croissance, et ils n'ont pas de limites de zone, mais la partie de croissance aléatoire est essentiellement la même.

James M
la source