Menemukan kutub yang tidak dapat diakses relatif terhadap banyak titik tanpa menggunakan raster

9

Saya ingin menemukan 'titik tidak dapat diakses' dari serangkaian titik, mewakili kota dan desa di Skotlandia. Menggunakan alat FOSS GIS (QGIS, SAGA, GRASS, Postgres / PostGIS ...).

Ini adalah titik terjauh dari pusat populasi mana pun. Ini akan menjadi pusat lingkaran terbesar yang tidak mengandung kota, tetapi akan memiliki kota di tepinya.

Ada pendekatan raster, yang berfungsi - filter Kedekatan GDAL .

Apakah ada cara berbasis VECTOR untuk melakukan ini? Yang tidak memerlukan rasterisasi?

Inilah upaya saya dengan raster ...

  • Mulailah dengan layer titik dalam proyeksi yang sesuai dalam meter (Saya menggunakan OSGB, 27700)
  • Tambahkan bidang yang disebut "satu", dan setel ke integer dengan nilai konstan 1.
  • Vektor ke raster, mengedit perintah untuk menggunakan -a satu dan menggunakan GEO daripada piksel. Pastikan pikselnya persegi!
  • Buat kontur pada kedekatan raster (dalam hal ini, lebar 1 km)

Begini tampilannya. Saya menarik beberapa poin kandidat dengan tangan ;-)

masukkan deskripsi gambar di sini

Saya berpikir bahwa melarutkan buffer berulang (menggunakan plugin multi ring buffer ) mungkin berhasil, tetapi saya kira saya tidak memiliki cukup memori untuk ini berfungsi.

Steven Kay
sumber

Jawaban:

7

Saya kira itu adalah pusat segitiga yang dikelilingi oleh jari-jari terbesar, yang menyentuh tidak lebih dari 3 poin. Pada gambar di bawah ini, pertama 11 centeres seperti ditunjukkan Mereka dilabeli oleh nomor peringkat mereka.

masukkan deskripsi gambar di sini

Cukup untuk menyingkirkan yang berada di luar segitiga dan menentukan juara, yaitu No3 dalam gambar.

DIPERBARUI INSPIRASI OLEH STEVEN FINDING:

masukkan deskripsi gambar di sini

Hasil di atas tidak seperti solusi pertama yang diperoleh di ArcGIS tanpa scripting (tetapi dengan lisensi canggih) dan berhasil! Namun dapat menghasilkan hasil yang dipertanyakan di tepi area studi, misalnya titik No 1, yaitu titik terpencil kedua yang ditemukan ...

FelixIP
sumber
1
Wow, terima kasih berbagi ini! Saya mencoba mengikuti alur kerja Anda di QGIS dengan (1) Poin ke Delaunay ( Vector | Delaunay Triangulation), (2) Pilih segitiga juara (Dihitung $areapada tabel atribut poligon Delaunay) dan menyimpan yang terbesar sebagai layer baru (3) Temukan circumcenter ( Processing | GRASS | Vector | v.voronoi.skeletondi segitiga juara). Apakah Anda pikir metode ini benar?
Kazuhito
Langkah pertama sudah benar. Saya menghitung pusat eksradius untuk SEMUA segitiga. Untuk menemukan pusat I dibangun ke dalam tegak lurus untuk titik tengah dari ketiga sisi dan menemukan persimpangan (kombinasi 3,2).
FelixIP
Lingkaran segitiga berbentuk lingkaran, bukan lingkaran.
FelixIP
Terima kasih banyak! (dan terima kasih untuk gambar yang bagus juga. Semakin saya bersandar pada latar belakang tentang hal itu, semakin menarik.)
Kazuhito
1
Pengamatan yang bagus! Saya akan mengujinya dan memperbarui jawabannya. Tidak seperti solusi pertama, itu tidak memerlukan skrip setidaknya di Arcgis.
FelixIP
5

Berikut ini tindak lanjutnya. Terima kasih kepada @FelixIP karena mengarahkan saya ke arah yang benar!

Dengan menggunakan data OSM dari Australia, saya dapat menemukan "titik tidak dapat diakses" di Daratan Australia - Saya berhasil menempuh jarak sejauh 260 km dari Akarnenehe, Bedourie, dan Mount Dare, di POINT (137.234888 -24.966466)

masukkan deskripsi gambar di sini

Saya menemukan alur kerja yang cukup mudah di QGIS yang menggunakan kombinasi pendekatan raster dan vektor. Saya yakin pendekatan serupa akan berhasil di GIS lainnya.

Momen 'a-ha' datang dari memerhatikan ini

Maksima semua jatuh pada tri-poin di mesh voronoi - titik di mana kembar tiga yang berdekatan dari poligon voronoi bertemu.

Pendekatannya adalah sebagai berikut: -

  • bekerja dalam proyeksi berbasis meter. Saya menggunakan 3857, tidak ideal tetapi data OSM saya berada dalam format itu :)
  • dapatkan lapisan yang mewakili tempat menarik di ('kota', 'desa', 'kota', 'dusun')
  • buat mesh voronoi dari layer ini
  • gunakan ekstrak node untuk mendapatkan tripoints
  • buat proximity raster (seperti yang ditunjukkan dalam pertanyaan)
  • klip raster ke garis besar lanskap, sehingga piksel laut diatur ke 0.
  • gunakan alat Point Sampling pada node yang diekstraksi terhadap raster

Kemudian gunakan Db Manager dan Virtual Layers untuk menemukan node dengan nilai jarak terbesar pada raster.

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;
Steven Kay
sumber