Eu tenho duas camadas no ArcGIS: uma é um ponto vetorial e a outra é uma camada raster. Quero acrescentar o valor da grade de dados raster ao ponto do vetor. O problema é que o ponto do vetor está longe de qualquer grade raster existente com valor; portanto, o comando "Amostra" não retorna nenhum valor para esse ponto do vetor.
Portanto, minha pergunta é: como posso encontrar a célula raster mais próxima com um ponto vetorial e extrair o valor da célula?
Na verdade, há duas coisas que preciso fazer:
- Identificar o contorno dentro de uma guarda florestal (geralmente 1-2 células de distância da minha varredura existente)
- Atribua um valor da varredura mais próxima a eles, se eles estiverem em um intervalo
Editado: tenho cerca de 3000 pontos vetoriais e meu problema é este:
Preciso acrescentar o valor da varredura com base nos locais para os pontos do vetor. Eu usei a ferramenta "Sample" e funciona bem na maioria dos pontos.
No entanto, há uma situação como esta
O ponto certo pode obter o valor da varredura ("Amostra" funciona), mas o ponto esquerdo não pode devido aos problemas de alinhamento.
A varredura para polígono não está funcionando porque recebo uma mensagem de erro de que não posso transformá-los em vetor porque estão fora do domínio. Também tenho pontos como este
Esses pontos superiores não devem receber nenhum valor porque estão muito longe da varredura.
Pensei em algumas maneiras de contornar:
Etapa 1. Faça a "amostra" primeiro
Etapa 2. Selecione o valor nulo após as operações "sample"
Etapa 3. construir zonas de buffer (com 1 grau decimal) com base nos pontos nulos
Etapa 4. use estatísticas zonais? ? ou outras ferramentas para percorrer todas as células raster no buffer, encontrar a mais próxima, extrair seu valor e colocá-lo no ponto do vetor.
Estou preso na etapa 4. Não sei qual ferramenta no ArcSDK posso usar para atingir essa função.
Ou então ... Você tem uma idéia melhor para lidar com isso?
Eu tenho 20 camadas rasterizadas como esta e gostaria de fazer isso automaticamente (usando o model builder e o arcobject).
Sample
ferramenta.Respostas:
Um contorno raster ocupa um retângulo delimitado na parte inferior esquerda pela origem, com coordenadas (digamos) (x0, y0) e no canto superior direito por (x1, y1): essas são propriedades facilmente descobertas em qualquer raster. Você pode usar essas informações para mover qualquer ponto fora da extensão da varredura para o ponto mais próximo no limite da varredura e extrair os valores da varredura nos novos locais.
Tarefas como essa costumam ser prontamente realizadas considerando dimensões inferiores . A extensão de uma varredura unidimensional é apenas um intervalo de números, digamos de x0 a x1> x0, convencionalmente escrito [x0, x1]. Suponha que você queira encontrar o ponto mais próximo nesse intervalo para um determinado número x. Existem três casos: x <x0 (x está à esquerda), x0 <= x <= x1 (x está no intervalo) e x1 <x (x está à direita). Claramente, os pontos mais próximos são x0, x e x1, respectivamente. Uma fórmula para esse resultado é
x -> min (máximo (x, x0), x1),
como você pode ver, contemplando cada um dos três casos separadamente.
Como a extensão de uma varredura é o produto cartesiano de dois intervalos, [x0, x1] * [y0, y1], a mesma fórmula funciona em duas dimensões. Basta aplicá-lo a cada intervalo. Assim, as coordenadas do ponto projetado podem ser calculadas (em uma Calculadora de Campo, por exemplo) como
(x, y) -> (min (max (x, x0), x1), min (max (y, y0), y1).
Aqui está esta fórmula em ação com 100 pontos aleatoriamente colocados ao redor e dentro da extensão de uma grade:
As linhas tracejadas associam visualmente pontos fora da extensão aos locais para onde serão movidos.
Crie uma camada de pontos a partir dessas coordenadas computadas e aplique a
Sample
ferramenta para extrair os valores de varredura. Junte os resultados de volta à camada de pontos original.Como uma questão prática , para evitar problemas com o arredondamento dos pontos flutuantes que possam impedir que os novos pontos fiquem dentro da extensão da grade, seria prudente tornar x0 e y0 um pouco maiores que a verdadeira origem (você pode adicionar metade do tamanho da célula a eles) e, da mesma forma, torne x1 e y1 um pouco menores.
Em resumo , o fluxo de trabalho consiste em calcular dois campos (as novas coordenadas) na tabela da camada de pontos original, criando uma camada de eventos de pontos a partir dessas novas coordenadas, executando a
Sample
ferramenta e executando uma junção ao banco de dados (não uma junção espacial).Quando você tem muito mais pontos vetoriais do que células na varredura , deve preferir a solução fornecida por @celenius (que propõe converter a varredura em pontos e usar uma junção espacial). Normalmente, porém, os raspadores têm muitas células - milhões a bilhões - e a conversão em pontos é tão demorada e demorada que deve ser abordada com cautela.
Como alternativa, você pode acelerar a solução da Celenius usando um cálculo de varredura para criar uma grade inteira com valores apenas ao longo de seus limites. Converter isso em uma camada de pontos é rápido e fácil, pois terá poucos pontos. Vamos chamar isso de "camada limite". Prove a grade nos pontos da camada de limite, copiando assim os valores da grade na tabela de atributos da camada de limite. Após executar
Sample
com a camada de pontos original, remova todos os pontos em que uma amostra foi obtida com sucesso. Una espacialmente a camada limite aos pontos restantes para concluir o processo de amostragem.(Uma maneira de criar uma grade com valores somente ao longo de seu limite é aplicar uma operação de vizinhança focal que falhe ao longo do limite: exemplos incluem encontrar encostas, sombreamento, estatísticas focais de bairro 3 x 3. Isso cria uma grade com uma célula anel grosso de NoData em torno de sua borda. Usar IsNull e SetNull para detectar células NoData e converter entre NoData e células de dados produz uma grade cheia de valores NoData, exceto ao redor do limite.)
fonte
Você pode converter a varredura em pontos ( ref ) e, em seguida, fazer uma junção espacial nos pontos (das rasters) para o ponto.
(Acabei de saber que os pontos podem ser unidos espacialmente aqui ontem )
fonte
Você pode converter a camada raster em um polígono usando a ferramenta Raster to Polygon e executar junção espacial (clique com o botão direito do mouse na camada de ponto e selecione Junções e relações - Junção, no primeiro menu suspenso, selecione a opção de junção espacial e selecione a opção mais próxima opção no botão Readio) ou use a ferramenta Próximo.
fonte