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.
Respostas:
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
fonte
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.fonte
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.
fonte
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.
fonte
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.
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.
fonte