Znalezienie bieguna niedostępności względem wielu punktów bez użycia rastrów


9

Chcę znaleźć „punkt niedostępności” z szeregu punktów reprezentujących miasta i wsie w Szkocji. Korzystanie z narzędzi FOSS GIS (QGIS, SAGA, GRASS, Postgres / PostGIS ...).

Jest to punkt najbardziej oddalony od dowolnego centrum populacji. Byłby to środek największego kręgu, który nie zawiera miasta, ale będzie miał miasto na skraju.

Istnieje podejście rastrowe, które działa - filtr zbliżeniowy GDAL .

Czy istnieje sposób, aby to zrobić za pomocą VECTOR ? Taki, który nie wymaga rasteryzacji?

Oto moja próba z rastrami ...

  • Zacznij od warstwy punktowej w odpowiedniej projekcji w metrach (używam OSGB, 27700)
  • Dodaj pole o nazwie „one” i ustaw wartość całkowitą o stałej wartości 1.
  • Wektor do rastra, polecenie edycji do użycia -a jeden i użycie GEO zamiast piksela. Upewnij się, że piksele są kwadratowe!
  • Utwórz kontury na rastrze zbliżeniowym (w tym przypadku o szerokości 1 km)

Oto jak to wygląda. Ręcznie narysowałem kilka punktów kandydujących ;-)

wprowadź opis zdjęcia tutaj

Myślałem, że rozpuszczanie powtarzających się buforów (przy użyciu wtyczki buforowej Multi ring ) może działać, ale podejrzewam, że nie mam wystarczającej ilości pamięci, aby to zadziałało.

Odpowiedzi:


7

Wydaje mi się, że jest to środek trójkąta o największym promieniu, który dotyka nie więcej niż 3 punkty. Na zdjęciu poniżej pokazano pierwszych 11 takich centrów. Są oznaczone numerem porządkowym.

wprowadź opis zdjęcia tutaj

Wystarczy usunąć te, które są poza trójkątami i zdefiniować mistrza, tj. Nr 3 na zdjęciu.

AKTUALIZACJA INSPIROWANA PRZEZ STEVENA:

wprowadź opis zdjęcia tutaj

Wynik powyżej, w przeciwieństwie do pierwszego rozwiązania uzyskanego w ArcGIS bez skryptów (ale z zaawansowaną licencją) i działa! Może jednak dawać wątpliwe wyniki na krawędziach obszaru badań, np. Punkt nr 1, tj. Znaleziony drugi najdalszy punkt ...


1
Wow, dziękuję, udostępniając to! Próbowałem śledzić przebieg pracy w QGIS poprzez (1) Punkty do Delaunay ( Vector | Delaunay Triangulation), (2) Wybierz trójkąt bohatera (obliczony $areana tabeli atrybutów wielokątów Delaunay) i zapisałem największy jako nową warstwę (3) Znajdź środek koła ( Processing | GRASS | Vector | v.voronoi.skeletonna trójkąt mistrza). Czy uważasz, że ta metoda jest poprawna?
Kazuhito

Pierwszy krok jest poprawny. Obliczyłem centra exradius dla WSZYSTKICH trójkątów. Aby znaleźć środek, skonstruowałem prostopadłą do wewnątrz punkty środkowe wszystkich 3 boków i znajduję przecięcie (kombinacja 3,2).
FelixIP

Ograniczony okrąg trójkąta, a nie krąg.
FelixIP

Dzięki wielkie! (i dzięki za ładne zdjęcie. Im bardziej opieram się na tym tle, tym bardziej staje się ono fascynujące.)
Kazuhito

1
Niezła obserwacja! Przetestuję to i zaktualizuję odpowiedź. W przeciwieństwie do pierwszego rozwiązania, nie będzie wymagać skryptowania przynajmniej w Arcgis.
FelixIP

5

Oto kontynuacja. Dzięki @FelixIP za skierowanie mnie we właściwym kierunku!

Korzystając z danych OSM z Australii, udało mi się znaleźć „punkt niedostępności” na australijskiej kontynentalnej kontynencie - udało mi się uzyskać odległość około 260 km w równej odległości od Akarnenehe, Bedourie i Mount Dare, w POINT (137.234888 -24.966466)

wprowadź opis zdjęcia tutaj

Znalazłem dość łatwy przepływ pracy w QGIS, który wykorzystuje kombinację metod rastrowych i wektorowych. Jestem pewien, że podobne podejście zadziałałoby w innych systemach GIS.

Moment „a-ha” przyszedł od zauważenia tego

Wszystkie maksima spadają na trzy punkty na siatce voronoi - punkty, w których stykają się sąsiadujące ze sobą trojaczki wielokątów voronoi.

Podejście było następujące:

  • pracować w projekcji licznikowej. Użyłem 3857, nie idealnie, ale moje dane OSM były w tym formacie :)
  • uzyskaj warstwę reprezentującą interesujące miejsca („miasto”, „wieś”, „miasto”, „wioska”)
  • utwórz siatkę voronoi z tej warstwy
  • użyj ekstraktów węzłów, aby uzyskać tripoints
  • utwórz raster zbliżeniowy (jak pokazano w pytaniu)
  • przytnij raster do obrysu krajobrazu, aby piksele morskie były ustawione na 0.
  • użyj narzędzia Point Sampling na wyodrębnionych węzłach w stosunku do rastra

Następnie użyj Db Manager i wirtualnych warstw, aby znaleźć węzeł o największej wartości odległości na rastrze.

select 
    rowid,
    name,
    proximity2,
    st_astext(st_transform(geometry,4326)) as pt, 
    st_buffer(geometry, proximity2) as geometry
from 
    "samples" 
order by 
    proximity2 desc 
limit 1;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.