Identificando clusters em dados de pontos vetoriais usando QGIS?

34

Eu tenho um conjunto de dados vetoriais de pontos de dados de banda larga rural (com que rapidez etc.) e gostaria de explorar se existem grupos de pontos com características semelhantes e plotar polígonos que os englobam.

Por exemplo, eu posso ter 45.000 pontos em um único conjunto de dados PostGIS distribuído em um cenário. Quero identificar clusters que se situam a x km um do outro e onde a velocidade está abaixo de y kbps e produzir cascos convexos para cada cluster qualificado.

Existe uma maneira simples de fazer isso no QGIS, por exemplo?

Adrian
fonte
3
Você pode prestar atenção à natureza da banda larga. Altas velocidades ocorrerão dentro das áreas urbanas; aglomerações industriais; irradiando pelas estradas a partir de COs, modems e outras infraestruturas de fibra / cabo / DSL; e transmissão de determinadas torres de celular (dependendo da sua definição de "banda larga"). Assim, as altas velocidades parecerão agrupar-se e as velocidades mais baixas parecerão lacunas nos clusters. Em particular, é improvável que os cascos convexos sejam descrições decentes de regiões de baixa velocidade. Seria bom saber como você pretende interpretar quaisquer "agrupamentos" que encontrar.
whuber
Obrigado pela ajuda. Estou estudando as áreas mais rurais, onde a arquitetura da banda larga com fio pode criar situações mais incomuns, devido à distribuição de armários de rua e linhas alimentadas diretamente em postes, assim como a geografia das áreas, por exemplo. Como resultado, você encontra clusters que podem ser um ponto de partida útil para a construção de soluções locais e podem ser um passo importante no desenvolvimento de uma estratégia. Na verdade, você pode encontrá-los em áreas urbanas, geralmente por causa do patrimônio industrial ou coisas como linhas ferroviárias e rios que se mostram difíceis de atravessar.
Adrian

Respostas:

15

Combinei bits de várias sugestões, adicionei um pouco e encontrei uma solução que funciona bem para mim - e tudo dentro do QGis!

Primeiro, executei um PostGis SELECT para encontrar os pontos que possuem os atributos comuns corretos e ficam a x km um do outro:

SELECT DISTINCT s1.postcode, s1.the_geom, s1.gid FROM broadband_data AS s1 JUNTE broadband_data AS s2 ON ST_DCom (s1.the_geom, s2.the_geom, 1000) ONDE s1.postcode! = S2.postcode AND s1.fastest_broadband <= 2000

(Bem direto do muito bom livro PostGis in Action de Manning , adicionando apenas uma auto-junção)

Em seguida, carreguei o plug-in ManageR do Carson Farmer e importei a camada. A partir daqui, segui o processo de cluster PAM sugerido aqui e exportei o resultado para um arquivo de forma, no qual os Cascos Convexos foram calculados em segundos usando o fTools (Carson se desloca!).

Adrian
fonte
A 1ª edição do PostGIS in Action está esgotada. Aqui está um link para a 2ª edição manning.com/books/postgis-in-action-second-edition e um link para o primeiro capítulo que é livre manning-content.s3.amazonaws.com/download/a/... que é ótimo para começar a tirar uma foto do PostGIS
Martin Hügi
8

Embora não seja a solução QGIS, eu pessoalmente optaria por algumas análises exploratórias usando o SaTScan . É rápido, bem documentado e amplamente aplicado, portanto você não deve ter problemas com a inicialização. 45k pontos podem exigir um pouco de RAM.

Não tenho certeza se ele pode ler diretamente do Postgres, mas importa facilmente de arquivos de texto e dbf.

A saída da análise pode ser facilmente lida novamente no Postgres ou no QGIS. Você pode optar por procurar por clusters ou elipses circulares (pode ser útil usar se houver um tipo específico de assentamento em seus dados, por exemplo, cidades / vilas de formato longo em vales etc.). Você pode gerar polígonos ou elipses ou exibir apenas os locais que são membros de clusters.

Para uma visualização rápida dos resultados no Google Earth, você também pode usar a ferramenta de conversão SaTScan para Google Earth do NAACCR .

Importante: se você decidir executar simulações de Monte Carlo (mínimo de 99, eu acho), também será capaz de dizer algo sobre a significância estatística de seus clusters. Interpretação e justificativa desses aglomerados serão outra questão, uma vez que tem sido debatido nas ciências espaciais há pelo menos duas décadas passadas (eu acho;).

Você pode tentar executar análises puramente espaciais procurando grupos de valores altos, baixos ou altos e baixos. Se você tem alguns atributos temporais em seus dados * diariamente, agregações semanais), acho que seria realmente interessante executar alguns modelos de espaço-tempo.

radek
fonte
2
Parece Bom - Boa Resposta
Mapperz
5

O SciPy possui um pacote de cluster (para python), você pode usá-lo no console python, escrever um plugin simples para fazer isso ou usar PL / python no postgis.

http://docs.scipy.org/doc/scipy/reference/cluster.html

Após a análise, use as ferramentas f para criar os cascos convexos.

Pablo
fonte
Sou um usuário simples, com muito pouca experiência em python, mas vou dar uma olhada - sei que preciso aprender!
Adrian
o cluster SciPy leva em consideração as relações espaciais entre os pontos?
Radek
11
Você acabou de adicionar mais duas covariáveis ​​para as coordenadas xey do seu ponto.
22411 Jose
5

Há um exemplo semelhante do que você deseja fazer usando R e GRASS aqui . Como alternativa, convém usar as ferramentas de cluster do scipy conforme sugerido e, em seguida, fazer os cálculos convexos do casco usando esse método .

Jose
fonte
3

Você pode tentar o plugin Ftools. Vector> Geoprocessing Tools> Convex Hulls.

Existe uma opção para Create convex hulls based on input field , o parâmetro do campo de entrada deve vir dos atributos dos seus pontos de entrada.

maning
fonte
Obrigado pela ajuda. O bit de casco convexo criará os polígonos, mas não identifica se existem clusters ou onde podem estar. Eu realmente gostaria de encontrar uma maneira de associar pontos com características semelhantes a um raio de x km um do outro primeiro. Acho que precisaria executar algum script que identifique exclusivamente a existência de clusters e atualize um campo adicional na tabela postgis para membros de cada cluster. Por exemplo, a criação de uma triangulação de Delaunay e filtrar todos os pontos onde os lados dos triângulos são mais de x km, mas não tenho idéia de como fazer isso
Adrian