Wyodrębnianie wszystkich punktów w pewnej odległości odległości i wysokości z rastra

11

Mam raster zawierający dziesiątki milionów punktów, wszystkie ze zdefiniowanymi danymi X, Y i Z. Muszę wymyślić prosty sposób wyodrębnienia i utworzenia nowego rastra lub wektora ze WSZYSTKIMI punktami w odległości 720 m od siebie (X, Y) i przy różnicy wysokości 120 m (Z) od siebie.

Mam ZERO znajomość SQL i Pythona. Próbowałem to zrobić na VBA i wymyśliłem kilka algorytmów, ale czas przetwarzania jest nieuzasadniony i nierealny. Jestem pewien, że aby to osiągnąć, musi istnieć proste podejście GIS, ale wydaje się, że nie można go znaleźć.

Korzystam z ArcMap.

użytkownik32882
źródło
Korzystam z ArcMap. Dzięki za komentarz. Zmienię to również w pierwotnym pytaniu :).
user32882,
Mówisz 720 m na poziomie i 120 m na pionie, ale skąd? Wygląda na to, że masz chmurę punktów, ale możesz wyszukać punkty, które spełniają kryteria z dowolnej lokalizacji w tej chmurze. Z pewnością musisz mieć jakąś lokalizację nasion lub inne kryteria, o których nie wspomniałeś, takie jak maksymalizacja liczby punktów, które spełniają kryteria?
Hornbydd,
Tak jak powiedziałem, próbuję „wydobyć WSZYSTKIE punkty w odległości 720 m od siebie (X, Y) i przy różnicy wysokości 120 m (Z) od siebie”. Nie ma „lokalizacji nasion”, skanuję WSZYSTKIE punkty.
user32882,
Jednym z największych wyzwań, jakie sobie wyobrażam, jest sposób przedstawienia wyniku. Czy akceptowalny byłby wynik rastrowy, w którym 0= nie ma punktów oddalonych o 720 m i wysokości ± 120 m, 1= jednego lub więcej punktów oddalonych o 720 m i ± 120 m wysokości? A może musisz policzyć, ile punktów spełnia kryteria?
Erica
Droga Erico, Pierwszy wybór byłby bardziej niż do zaakceptowania. Nie muszę liczyć, ile punktów spełnia te kryteria, ale muszę je widzieć w porównaniu z oryginalnym rastrem. Zgodnie z twoją sugestią, każdy punkt / piksel, któremu przypisano wartość 1, będzie miał inny lub kilka innych punktów w wymaganej wysokości i odległości od niego, więc jest to idealne! Jedyne pytanie, jakie mam, to jak to zrobić skutecznie?
user32882,

Odpowiedzi:

13

Być może zbyt prostym podejściem byłoby użycie statystyki ogniskowej .

  • Zdefiniuj okolicę będącą przedmiotem zainteresowania jako pierścień o promieniu wewnętrznym nieco poniżej 720m i promieniu zewnętrznym nieco ponad 720m. (Zależy to nieco od wielkości komórki. Na przykład 5-metrowe komórki miałyby pierścień w wysokości 717,5 - 722,5; może to być jednak zbyt duże okno dla 1-metrowego rastra komórek.)
  • Użyj typu statystyki MIN, aby znaleźć najniższą wartość wysokości w okolicy.
  • Powtórz drugi raz, użyj typu statystyki MAX, aby znaleźć najwyższą wartość wysokości w okolicy.
  • Za pomocą kalkulatora rastrowego oceń, czy różnice wysokości są wystarczająco duże. Coś jak

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

    Jeśli różnica oryginalna-minimalna lub oryginalna-maksymalna przekracza 120 m, wartość wynosi 1, w przeciwnym razie 0. ( Uwaga: nie testowałem składni ).

To mówi tylko, czy komórka ma jedną lub więcej sąsiadujących komórek, które spełniają kryteria odległości / wysokości, ale nie mówi, ile.

Erica
źródło
Wow ... Myślę, że to zadziałało ... niewiarygodne. Dziękuję bardzo. Spędziłem tygodnie majstrując przy VBA, próbując to zrobić, gdy rozwiązanie GIS jest dość proste. Niech cię Bóg błogosławi.
user32882,
czy to nie identyfikuje punktów z sąsiadem o różnicy wysokości co najmniej 120 m? Podejrzewam, że taki jest cel pytania, ale sformułowanie brzmi „przy różnicy 120 m”.
Llaves,
@Llaves Tak, masz rację. Podejrzewam, że znalezienie dokładnie 120m różnicy na dokładnie 720m wymagałoby bardzo interesującego skryptu.
Erica,
Niezależnie od tego musi istnieć przerwa, ponieważ mamy do czynienia z naturalnym terenem. Dla mojej konkretnej aplikacji różnice wysokości powyżej 120 metrów są w rzeczywistości bardziej interesujące. Powinienem był być bardziej precyzyjny w moim oryginalnym oświadczeniu. W każdym razie dziękuję wam.
user32882,