Aqui está um mapa de contorno para o qual todos os polígonos dos níveis estão disponíveis.
Vamos perguntar como suavizar os polígonos, mantendo todos os vértices preservados em seus locais exatos?
Na verdade, o contorno é feito sobre os dados da grade, você pode sugerir suavizar os dados da grade e, portanto, o contorno resultante será mais suave. Observe que isso não está funcionando como meu desejo, pois a função de suavização, como o filtro Gaussian, removerá pequenos pacotes de dados e alterará o alcance da terceira variável, por exemplo, a altura que não é permitida no meu aplicativo.
Na verdade, estou procurando um pedaço de código (de preferência em Python ) que possa suavizar os polígonos 2D (qualquer tipo: convexo, côncavo, auto-interceptável etc.) razoavelmente indolor (esqueça as páginas de códigos) e preciso.
Para sua informação, existe uma função no ArcGIS que faz isso perfeitamente, mas o uso de aplicativos comerciais de terceiros não é minha escolha para esta pergunta.
1)
Scipy.interpolate:
Como você vê, as splines resultantes (vermelhas) não são satisfatórias!
2)
Aqui está o resultado usando o código fornecido aqui . Não está funcionando bem!
3)
Para mim, a melhor solução deve ser algo como a figura a seguir, na qual um quadrado está sendo suavizado gradualmente, alterando apenas um valor. Espero um conceito semelhante para suavizar qualquer forma de polígonos.
Satisfazer a condição que o spline passa nos pontos:
4)
Aqui está minha implementação da "idéia do whuber's" linha por linha no Python em seus dados. Possivelmente existem alguns erros, pois os resultados não são bons.
K = 2 é um desastre e, portanto, para k> = 4.
5)
Eu removi um ponto no local problemático e o spline resultante agora é idêntico ao do whuber's. Mas ainda é uma pergunta por que o método não funciona para todos os casos?
6)
Uma boa suavização para os dados do whuber pode ser a seguinte (desenhada pelo software de gráficos vetoriais), na qual um ponto extra foi adicionado sem problemas (compare com a atualização
4):
7)
Veja o resultado da versão Python do código do whuber para obter algumas formas icônicas:
Observe que o método parece não funcionar para polilinhas. Para o canto polilinha (contorno), verde é o que eu quero, mas fiquei vermelho. Isso precisa ser resolvido, pois os mapas de contorno são sempre polilinhas, embora as polilinhas fechadas possam ser tratadas como polígonos, como nos meus exemplos. Também não é que o problema surgido na atualização 4 ainda não tenha sido resolvido.
8) [meu último]
Aqui está a solução final (não perfeita!):
Lembre-se de que você terá que fazer algo sobre a área apontada por estrelas. Talvez haja um erro no meu código ou o método proposto precise de mais desenvolvimento para considerar todas as situações e fornecer os resultados desejados.