Extrair todos os pontos dentro de uma certa distância e diferença de altura de um Raster

11

Eu tenho uma varredura contendo dezenas de milhões de pontos, todos com dados X, Y e Z definidos. Preciso descobrir uma maneira simples de extrair e criar um novo raster ou vetor com TODOS os pontos a 720 m de distância um do outro (X, Y) e a 120 m de diferença de elevação (Z) um do outro.

Eu tenho ZERO conhecimento de SQL e Python. Eu tenho tentado fazer isso no VBA e criei alguns algoritmos, mas o tempo de processamento é irracional e irreal. Estou certo de que deve haver uma abordagem GIS simples para fazer isso, mas não consigo encontrá-la.

Estou usando o ArcMap.

user32882
fonte
Estou usando o ArcMap. Obrigado por seu comentário. Também vou alterá-lo na pergunta original :).
user32882
Você diz 720m na ​​horizontal e 120m na ​​vertical, mas de onde? Parece que você tem algum tipo de nuvem de pontos, mas você pode procurar pontos que preencham completamente seus critérios em qualquer local dentro dessa nuvem. Certamente você deve ter algum tipo de localização da semente ou outro critério que não tenha mencionado, como maximizar o número de pontos que preenchem completamente os critérios?
precisa saber é o seguinte
Como eu disse, estou tentando "extrair TODOS os pontos a 720 m de distância um do outro (X, Y) e a 120 m de diferença de altitude (Z) um do outro". Não há "local da semente", estou digitalizando TODOS os pontos.
user32882
Um dos maiores desafios que eu imagino com isso é como o resultado é retratado. Seria aceitável ter um resultado raster em que 0= não tem pontos a 720m de distância e elevação de ± 120m, 1= um ou mais pontos de 720m de distância e elevação de ± 120m? Ou você precisa contar quantos pontos atenderiam aos critérios?
Erica
Cara Erica, A primeira escolha seria mais do que aceitável. Não tenho necessidade de contar quantos pontos atendem a esses critérios, mas preciso ser capaz de vê-los em comparação com a varredura original. De acordo com a sua sugestão, qualquer ponto / pixel atribuído a um valor 1 terá outro ou vários outros pontos dentro da elevação e distância necessárias, o que é perfeito! A única pergunta que tenho é como fazer isso de maneira eficiente?
user32882

Respostas:

13

Uma abordagem talvez simples demais seria usar a estatística focal .

  • Defina a vizinhança de interesse como um espaço anular , com raio interno abaixo de 720m e raio externo acima de 720m. (Isso depende um pouco do tamanho da célula. Por exemplo, as células de 5m teriam um anel de 717,5 a 722,5; isso pode ser uma janela muito grande para uma varredura de célula de 1m.)
  • Use o tipo de estatística MINpara encontrar o menor valor de elevação na vizinhança.
  • Repita uma segunda vez, use o tipo de estatística MAX, para encontrar o valor de elevação mais alto na vizinhança.
  • Usando a Calculadora de varredura , avalie se as diferenças de elevação são grandes o suficiente. Algo como

    Con((Abs("DEM" - "FSMin") > 120) | (Abs("DEM" - "FSMax") > 120), 1, 0)

    Se a diferença min-original ou diferença max-original exceder 120 m, o valor será 1, caso contrário, 0. ( Nota: não testei a sintaxe. )

Isso informa apenas se uma célula possui uma ou mais células vizinhas que atendem aos seus critérios de distância / elevação, mas não informa quantas.

Érica
fonte
Uau .... acho que funcionou .... inacreditável. Muito obrigado. Passei semanas mexendo no VBA tentando fazer isso quando a solução é bastante simples no GIS. Deus te abençoê.
user32882
isso não identifica pontos com um vizinho que tem pelo menos 120m de diferença de altitude? Eu suspeito que essa seja a intenção da pergunta, mas a redação está "na diferença de 120m".
Llaves
@Llaves Sim, você está certo. Suspeito que encontrar exatamente 120m de diferença em exatamente 720m exigiria um script muito interessante.
Erica
Independentemente disso, tem que haver um intervalo, já que estamos lidando com terrenos naturais. Para minha aplicação específica, diferenças de elevação superiores a 120 metros são realmente mais interessantes. Eu deveria ter sido mais preciso na minha declaração original. Obrigado pessoal de qualquer maneira.
user32882