Küre üzerinde görünürlük grafiğini hesaplama


9

Bazı çokgenler (Coğrafya veri türü kullanılarak saklanan) ile bir PostGIS tablo var. Küresel bir dünya üzerindeki bölgeleri temsil ederler.

Tüm çokgenler arasından seçilen her bir köşe çifti için, bu iki köşenin birbirine "görünür" olup olmadığını hesaplamak istiyorum. (Bu tür n * ( n -1) / 2 vardır, burada n , tablodaki tüm çokgenler arasındaki toplam benzersiz köşe noktası sayısıdır.) "Birbirine görünür" derken, iki köşe tablodaki çokgenlerle kesişmez.

Tercihen PostgreSQL / PostGIS'de bu hesaplamayı yapmanın en hızlı yolu nedir?

İşe yarayan bir şeyim var, ama yavaş. Sadece tüm çiftler üzerinde saf bir şekilde tekrar ediyorum ve aralarındaki LineString'in herhangi bir çokgenle kesişip kesişmediğini görüyorum. (PostGIS'in coğrafya veri türü, küredeki tüm zor matematiği benim için işler.) Bu yüzden, işleri hızlandırabilecek akıllı bir veri yapısı veya algoritma olup olmadığını merak ediyorum.


6
İlgili kavramlar: görünürlük grafikleri ve bu işi 3D yerine 2D olarak yapmak istiyorsanız, Gnomonic projeksiyon .
whuber

"tüm çiftler üzerinde yineleme" işlemi, bir satırın tüm çokgenlerle kesişip kesişmediğini test eden FOR döngüsüne sahip olduğunuz anlamına mı gelir? Öyleyse (muhtemelen) daha hızlı, sadece tüm olası kombinasyonlarla linestring tablosu oluşturun ve hattın çokgen tabloyla kesişip kesişmediğini test ettiğiniz bir sorgu yapın
simplexio

Sorunun bir resmini paylaşabilir misiniz?
addcolor

Yaklaşık bir koordinat sınırlama kutusu ile hızlı bir şekilde yapılan küresel ufkun ötesindeki her şeyi (artı kenara yakın uzun nesneler için bit) hariç tutabilirsiniz. Aksi takdirde temelde NP zor olduğunu düşünüyorum.
AnserGIS

Yanıtlar:


1

Görünmeyenleri çıkarın. Komşu bir çokgenin iki uzak köşesine bakarak sahilde bir tepe noktasında durduğunuzu varsayalım. O zaman tüm sektörde bu köşelerin arkasındaki herhangi bir tepe noktasının bu tepe noktasından görünmez olduğunu varsayabilirsiniz.

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.