Извлечение всех точек на определенном расстоянии и разнице в высоте из растра

11

У меня есть растр, содержащий десятки миллионов точек, все с определенными данными X, Y и Z. Мне нужно найти простой способ извлечь и создать новый растр или вектор со ВСЕМИ точками на расстоянии 720 м друг от друга (X, Y) и на расстоянии 120 м по высоте (Z) друг от друга.

У меня НУЛЕВОЕ знание SQL и Python. Я пытался сделать это на VBA и придумал пару алгоритмов, но время обработки неоправданно и нереально. Я уверен, что для этого должен быть простой ГИС-подход, но, похоже, не могу его найти.

Я использую ArcMap.

user32882
источник
Я использую ArcMap. Спасибо за ваш комментарий. Я также изменю это в оригинальном вопросе :).
user32882
Вы говорите 720 м по горизонтали и 120 м по вертикали, но откуда? Похоже, у вас есть какое-то облако точек, но вы можете искать точки, которые полностью соответствуют вашим критериям, из любого места в этом облаке. Конечно, у вас должно быть какое-то место посева или другие критерии, которые вы не упомянули, такие как максимизация количества точек, которые полностью соответствуют критериям?
Хорнбидд
Как я уже говорил, я пытаюсь «извлечь ВСЕ точки на расстоянии 720 м друг от друга (X, Y) и на высоте 120 м (Z) друг от друга». Там нет "локации", я сканирую ВСЕ точки.
user32882
Одна из самых больших проблем, которые я предполагаю, заключается в том, как изобразить результат. Будет ли приемлемым иметь растровый результат, в котором 0= нет точек на расстоянии 720 м и отметки ± 120 м, 1= одна или несколько точек на расстоянии 720 м и отметка ± 120 м? Или вам нужно посчитать, сколько очков будет соответствовать критериям?
Эрика
Уважаемая Эрика, первый выбор будет более чем приемлемым. У меня нет требования подсчитывать, сколько точек соответствуют этим критериям, но мне нужно, чтобы их можно было увидеть по сравнению с исходным растром. Согласно вашему предложению, любая точка / пиксель, которому присвоено значение 1, будет иметь другую или несколько других точек в пределах требуемой высоты и расстояния от нее, так что это идеально! Единственный вопрос, который у меня есть, это как сделать это эффективно?
user32882

Ответы:

13

Возможно, слишком простой подход заключается в использовании целевой статистики .

  • Определите интересующий район в виде кольца с внутренним радиусом чуть менее 720 м и внешним радиусом чуть более 720 м. (Это в некоторой степени зависит от размера ячейки. Например, 5-метровые ячейки будут иметь кольцо 717,5 - 722,5; хотя это может быть слишком большое окно для растра 1-метровой ячейки.)
  • Используйте тип статистики MIN, чтобы найти самое низкое значение высоты в окрестности.
  • Повторите второй раз, используйте тип статистики MAX, чтобы найти наибольшее значение высоты в окрестности.
  • Используя Raster Calculator , оцените, достаточно ли велики перепады высот. Что-то типа

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

    Если разница между исходной минимальной или исходной максимальной длиной превышает 120 м, значение равно 1, в противном случае - 0. ( Примечание: я не проверял синтаксис. )

Это только говорит вам , есть ли у ячейки одна или несколько соседних ячеек, которые соответствуют вашим критериям расстояния / высоты, но не говорит вам, сколько.

вересковые
источник
Вау .... Я думаю, что это сработало .... невероятно. Огромное спасибо. Я потратил недели, работая с VBA, пытаясь сделать это, когда решение ГИС довольно простое. Будьте здоровы.
user32882
разве это не идентифицирует точки с соседом, у которого разница высот составляет не менее 120 м? Я подозреваю, что это цель вопроса, но формулировка "с разницей в 120 м".
Llaves
@ Лавес Да, ты прав. Я подозреваю, что для нахождения разницы ровно в 120 м и ровно в 720 м потребуется очень интересный сценарий.
Эрика
Несмотря на это, должен быть интервал, так как мы имеем дело с естественной местностью. Для моего конкретного применения перепады высот, превышающие 120 метров, на самом деле более интересны. Я должен был быть более точным в своем первоначальном утверждении. Спасибо, ребята, в любом случае.
user32882