Simulando a expansão dos recursos de polígono


13

Eu tenho o que espero que seja uma pergunta interessante. Estou trabalhando em uma tarefa para uma introdução ao curso GIS que usa alguns dados de derramamento de óleo do Golfo para introduzir métodos comuns de análise espacial baseados em vetores (buffers, sobreposições etc.). Tenho uma classe de recurso de polígono que contém os limites de o vazamento de petróleo do Deepwater Horizon em um determinado dia e estou simulando sua expansão com tampões.

Ele faz o trabalho de ilustrar o conceito, mas certamente não fornece resultados realistas. Isso me fez pensar em como isso poderia ser feito de uma maneira que proporcionasse resultados menos uniformes, imitando / falsificando o efeito das correntes direcionando o óleo em várias direções à medida que ele se expande.

De um modo geral, estou procurando um fluxo de trabalho que realize o seguinte com um recurso de polígono de entrada:

  • Crie um novo recurso de polígono que seja maior que o original por uma área especificada (como 10 km²) ou talvez um fator especificado (como 5%)
  • O novo recurso de polígono teria uma forma arbitrária, com a ressalva de que ...
  • O novo recurso de polígono conteria o recurso de polígono original (este ponto não é um rompimento de ofertas, mas seria bom ter)

Qualquer solução do mundo real teria que envolver modelagem de correntes oceânicas, dinâmica de fluidos e similares, que vão muito além do escopo do que estou tentando fazer (embora as soluções que incorporam isso sejam certamente bem-vindas e sejam interessantes de ver), mas a ideia despertou minha curiosidade sobre o problema espacial subjacente e estou curioso para saber quais soluções existem. Eu tenho uma solução em mente, mas gostaria de saber quais soluções outras pessoas podem ter.

Estou trabalhando no mundo ESRI, mas as soluções que envolvem outros pacotes / plataformas são certamente bem-vindas (embora eu possa não ser capaz de testá-las). Algoritmos gerais, pseudocódigo e código também são bons.


2
Existem soluções interessantes e inovadoras, mas estou preocupado com a premissa implícita de que esse exercício teria algo a ver com derramamentos de óleo. A quantidade de informações científicas envolvidas não está mais do que disponível para um filósofo olhando para o umbigo. Claro, é divertido espalhar polígonos - lembro-me de ouvir um representante da ESRI descrevendo isso para simulações de incêndio com o ArcView 2 em 96 -, mas como você justifica dizer que esse processo não é arbitrário e possivelmente enganoso?
whuber

1
@ whuber - Não estou afirmando que os resultados seriam tudo, menos arbitrários. Ter um resultado arbitrário é algo que estou buscando ativamente na questão. Você está certo de que os resultados não teriam semelhança com o mundo real. Essa é parte da razão pela qual intitulei a pergunta como o fiz (em vez de "Simular a expansão de um derramamento de óleo"). Estou interessado no aspecto da geometria computacional / metodologia GIS, não na sua aplicação em nenhum domínio específico. A parte do derramamento de óleo foi simplesmente o ímpeto para pensar em um problema espacial interessante. Vou tentar esclarecer isso na pergunta.
James M

Esqueci de mencionar: há uma pergunta na tarefa pedindo aos alunos que pensem sobre por que usar a ferramenta de buffer dessa maneira é uma má escolha se você está tentando refletir a realidade. Portanto, se alguém está preocupado que eu estou tentando passar isso como realista, não ser :)
James M

Obrigado. Eu estava preocupado que os alunos impressionáveis, ao ver uma demonstração gráfica interessante de polígonos em expansão, juntamente com alguma menção a "derramamento de óleo", aceitassem acriticamente o primeiro como uma representação realista do último.
whuber

Respostas:


7

Hallo

Aqui eu acho que é uma maneira divertida de fazer isso no PostGIS. Eu acho que isso poderia ser estendido, então a expansão segue algumas cadeias de linhas que representam a corrente. Mas agora apenas se expande em uma direção.

Ele itera 50 vezes e para cada iteração pega o polígono da última iteração, move-o, armazena-o em buffer (simplifica-o para tornar as coisas mais suaves) e une-o com casco convexo. Achei que o convexhull deu um resultado melhor do que uni-lo.

Portanto, o resultado são 50 polígonos cada vez maiores. Todos os polígonos maiores se sobrepõem totalmente a todos os polígonos menores.

Para ver o resultado, você pode experimentá-lo em http://postgisonline.org/map.php

Basta copiar o código sql abaixo e clicar em "map1"

Com RECURSIVO 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 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 FROM t WHERE n <50) SELECT the_geom FROM t ;

Se você quiser ver apenas o polígono da iteração 30: você pode adicionar o
limite 1 do deslocamento 30
entre ot e ponto e vírgula no final

a geração desses 50 polígonos usa cerca de 50 ms, portanto, deve ser possível expandir o modelo sem muita espera.

Atenciosamente Nicklas

Este foi ainda melhor, eu acho:

Com RECURSIVO 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 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 como n FROM t ONDE n <50) SELECT the_geom FROM t

simulando a expansão virando à direita


Essa é uma solução interessante e mais um lembrete de que preciso encontrar tempo para começar a aprender sobre GIS em um contexto de banco de dados espacial. É um bom exemplo de por que um site como esse funciona. Não apenas encontro uma solução completamente diferente do que eu tinha em mente, mas também encontro um novo recurso como bônus.
James M

Sim, existem muitas possibilidades com sql espacial. A consulta acima é um pouco mais difícil de ler do que o habitual, devido à parte recursiva. Existem muitas ótimas fontes para ajudar a começar.
Nicklas Avén 20/10/10

3

as advertências da whuber são importantes, e desde que você faça isso apenas para fins ilustrativos e não queira entrar em ação com a dinâmica de fluidos, o que é possível, mas complica o problema.

Dito isto, acho que é uma pergunta interessante e pode ser divertida para os alunos. Outra maneira de encarar o problema é considerá-lo um fenômeno baseado em varredura, com a densidade de óleo medida dentro de cada célula. A partir daí, você pode usar um modelo que leve em consideração a ansiotropia como r.spread( documentação ) para modelar a taxa de crescimento, talvez incluindo correntes falsas para 'direcionar' o spread. Da mesma forma, você poderia fazer algo com diferentes tipos de operações focais no ArcGIS, usando formas irregulares para contornar os problemas do buffer linear.


2

Acho que ficaria tentado a obter recursos vetoriais que representam as correntes e usá-los como vetores de controle em uma operação de distorção. A chave seria dimensionar os vetores corretamente, de modo a imitar a propagação de um único dia.

Concordo com Andy W que colocar os limites em pontos pode ser um pré-requisito. Você também pode precisar densificar o número de pontos para obter um resultado preciso.

Não sei ao certo como você se deforma no mundo da ESRI. Eu sei que a extensão de interoperabilidade de dados faria isso, mas presumo que também deve haver um método interno ou uma extensão específica para esse tipo de coisa.


1

Eu não ficaria surpreso se alguém realmente tivesse feito simulações semelhantes, mas aqui está como eu acho que abordaria o projeto (sem conhecimento prévio sobre processos oceânicos que difundiriam o derramamento de óleo).

Se você deseja trabalhar estritamente com polígonos, eu dividiria seu limite em um número predeterminado de pontos. Usando esses pontos, eu apresentaria suas simulações, com elementos estocásticos no que diz respeito à direção da expansão e à distância da expansão (dentro de limites razoáveis ​​pré-determinados), repetir essas etapas quantas vezes forem necessárias. Em seguida, refaça o casco convexo de todos os pontos com base nos novos locais (se você quiser que isso sempre inclua o polígono anterior, terá que limitar a expansão para o exterior). Para um curso introdutório de GIS, provavelmente eu apenas visualizaria várias iterações possíveis, dados esses elementos estocásticos.

Também com uma abordagem um pouco diferente, acho que visualizar o óleo como agentes em uma simulação pode ser bem legal. Por exemplo, para cada barril de petróleo bruto produzido, faça um novo agente e adicione os mesmos elementos estocásticos que eu disse antes. Você pode visualizar a expansão de agentes no Golfo no tempo ou visualizar a densidade do petróleo no tempo.

Parece um projeto muito legal e publique fotos quando terminar.


0

Apenas para ilustrar a variedade de resultados que uma pergunta como essa pode gerar, abordarei a solução que estava pensando quando publiquei a pergunta. Espero ter a chance de implementá-lo nos próximos dois dias e publicarei quando eu o fizer.

  1. Rasterize o polígono em uma varredura binária.
  2. Crie uma varredura maior que os resultados de 1 com valores 0 e 1 colocados aleatoriamente. A distribuição dos valores 0 e 1 corresponderia à quantidade que o polígono precisa expandir. Portanto, se o polígono precisar expandir 5 km quadrados. para atingir sua meta, seriam 5 km quadrados. valor de 1 célula.
  3. Resultados da União de (1) e (2).
  4. Remova todas as células do resultado de (3) que não são adjacentes ao polígono rasterizado original.
  5. Alimente os resultados de (4) em (2) no lugar do polígono rasterizado original e repita até que o número de (1) células corresponda à área de destino.

Provavelmente não é a maneira mais eficiente de fazer isso, mas deve funcionar. A idéia é baseada em um exercício de modelagem de crescimento urbano que uma classe do ano superior faz. Seu raster aleatório é criado com base na adequação ao crescimento, e eles não têm limitações de área, mas a parte do crescimento aleatório é essencialmente a mesma.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.