Raster kullanmadan çoklu noktalara göre erişilemeyen bir kutup bulmak


9

İskoçya'daki kasaba ve köyleri temsil eden bir dizi noktadan 'erişilemezlik noktası' bulmak istiyorum. FOSS GIS araçlarını (QGIS, SAGA, GRASS, Postgres / PostGIS ...) kullanma.

Bu, herhangi bir nüfus merkezinden en uzak nokta. Bu, bir kasaba içermeyen en büyük dairenin merkezi olacaktı, ancak kenarında bir kasaba olacak.

Çalışan bir raster yaklaşımı var - GDAL Proximity filtre.

Bunu yapmanın VEKTÖR tabanlı bir yolu var mı ? Rasterleştirme gerektirmeyen?

İşte rasterler ile olan girişimim ...

  • Metre cinsinden uygun bir projeksiyonda bir nokta katmanıyla başlayın (OSGB, 27700 kullanıyorum)
  • "One" adlı bir alan ekleyin ve sabit değer 1 ile tam sayıya ayarlayın.
  • Raster vektör, -a bir kullanmak için komut düzenleme ve piksel yerine GEO kullanma. Piksellerin kare olduğundan emin olun!
  • Yakınlık rasterinde konturlar oluşturun (bu durumda, 1 km genişliğinde)

İşte böyle görünüyor. Bazı aday noktaları elle çizdim ;-)

resim açıklamasını buraya girin

Tekrarlanan tamponların çözülmesinin ( Çoklu halka tampon eklentisini kullanarak ) işe yarayabileceğini düşündüm, ancak bunun çalışması için yeterli belleğe sahip olmadığımdan şüpheleniyorum.

Yanıtlar:


7

Sanırım en fazla yarıçapa sahip üçgen çemberin merkezi, en fazla 3 noktaya değiyor. Aşağıdaki resimde ilk 11 böyle merkez gösterilmiştir. Sıralama numaralarına göre etiketlenirler.

resim açıklamasını buraya girin

Üçgenlerin dışında kalanları ayıklamak ve şampiyonu, yani resimde No3'ü tanımlamak yeterlidir.

STEVEN BULUNDUĞU GÜNCELLEME:

resim açıklamasını buraya girin

Komut dosyası olmadan (ancak gelişmiş lisansla) ArcGIS'te elde edilen ilk çözümün aksine yukarıdaki sonuç ve işe yarıyor! Bununla birlikte, bir çalışma alanının kenarlarında şüpheli sonuçlar üretebilir, örneğin 1 numaralı nokta, yani bulunan ikinci uzak nokta ...


1
Vay canına, bunu paylaştığın için teşekkürler! Ben Delaunay (için (1) Points by QGIS da iş akışını takip etmeye çalıştı Vector | Delaunay Triangulation), (Hesaplanan (2) seç şampiyon üçgeni $area(Delaunay çokgen nitelik masaya) ve yeni bir katmana (3) circumcenter bul olarak büyük birini kurtardım Processing | GRASS | Vector | v.voronoi.skeletonüzerinde şampiyon üçgeni). Bu yöntemin doğru olduğunu düşünüyor musunuz?
Kazuhito

İlk adım doğrudur. TÜM üçgenler için eksradius merkezleri hesapladım. I merkezini bulmak için her 3 tarafın orta noktalarına dik olarak içeriye doğru inşa edilmiş ve kesişimi bulmuşlardır (kombinasyon 3,2).
FelixIP

Sınırlı üçgen çemberi, çember değil.
FelixIP

Çok teşekkürler! (ve güzel resim için teşekkürler. Bu konuda arka plan ne kadar
eğilirse

1
Güzel gözlem! Test edip yanıtı güncelleyeceğim. İlk çözümden farklı olarak, en azından Arcgis'te komut dosyası gerektirmez.
FelixIP

6

İşte bir takip. Beni doğru yöne yönlendirdiği için @FelixIP'e teşekkürler!

Avustralya'daki OSM verilerini kullanarak, Avustralya Anakarasında "erişilemezlik noktasını" bulabildim - POINT'te (137.234888 -24.966466) Akarnenehe, Bedourie ve Dare Dağı'ndan yaklaşık 260km eşit uzaklıkta olmasını sağladım.

resim açıklamasını buraya girin

Raster ve vektör yaklaşımlarının bir kombinasyonunu kullanan QGIS'te oldukça kolay bir iş akışı buldum. Eminim benzer bir yaklaşım diğer CBS'lerde de işe yarar.

'A-ha' anı bunu fark etmekten geldi

Maksimumlar, voronoi poligonlarının üçlülerinin buluştuğu noktalar olan voronoi ağındaki üç noktaya düşer.

Yaklaşım şöyleydi: -

  • metre tabanlı projeksiyonda çalışın. 3857 kullandım, ideal değil ama OSM verilerim bu formattaydı :)
  • ('şehir', 'köy', 'kasaba', 'mezra') ilgi noktalarını temsil eden bir katman elde edin
  • bu katmandan bir voronoi ağı oluşturun
  • kullanmak özü düğümleri tripoints almak
  • yakınlık rasterini oluşturma (soruda gösterildiği gibi)
  • tarama pikselini manzaranın dış çizgisine kırpın, böylece deniz pikselleri 0 olarak ayarlanır.
  • Rastere ayıklanan düğümlerde Nokta Örnekleme aracını kullanın

Ardından taramada en büyük mesafe değerine sahip düğümü bulmak için Db Yöneticisi ve Sanal Katmanları kullanın.

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;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.