Bir kullanıcının belirli bir konumdan (nokta) ve yönlendirmeden (açı aralığı) görebileceği binaları (çokgenler) nasıl bulurum?


10

Gördüğüm binalar setini belirli bir yerden (nokta-tor, lng) ve yönlendirmeden (açı aralığı) + kesinlikle belirli bir derinlikte (örneğin 100 metre) almak istiyorum. İdeal olarak şöyle bir şey çıktı istiyorum: Açı 1'den açı2'ye kullanıcı bina 1'i, açı 2'den açı3'e bina 2'yi görebiliriz.

Veri = Bir şehrin binalarını şekil dosyasında temsil eden çokgenler.

girdi: bir kişinin görsel algısını temsil eden bir konum ve bir yön (açı aralığı).

çıktı :
Sürüm 1 - {BuildingID} listesi
Sürüm 2 (daha iyi) - {BuildingID listesi, her bina için görünür bölüm kümesi (binaların cephesi)}
Sürüm 3 (ideal çıktı) - {buildingID, açı aralıkları listesi }. (örnek için, açı 1'den açı2'ye kadar kullanıcı bina 1'i, açı 2'den açı3'e göre bina 2'yi vb. görebiliriz.)

Kullanabileceğim araç kutusu : PostGis, QGis, ruby, R

v1 çıkışı için çözümün başlangıcı:
- belirli bir nokta ve yönlendirme (açının iç açısı) ve belirli bir yarıçap / derinlik (örneğin 100 metre) için kullanıcının basitleştirilmiş görsel kapsamını temsil eden bir üçgen oluşturma
- binalarla kesişimin hesaplanması (örn. ST_INTERSECTION ) ve görsel kapsamı içerir. ancak bir bina diğerini gizleyebilir, böylece görsel kapsam ve binalar arasındaki saf kavşak görünür binalar ekleyemez. bu sorunun ele alınması gerekiyor.

güncelleme: potansiyel çözüm 2 - belirli bir nokta ve yönlendirme (açı iç açısı) ve belirli bir yarıçap / derinlik (örneğin 100 metre) için kullanıcının basitleştirilmiş görsel kapsamını temsil eden bir üçgen oluşturmak - farklı açılardan n ışınları (LINE) oluşturmak kapsamları doldurmak.
- tüm binaları (POLYGONS) SEGMENTS / LINES'e dönüştürmek
- her bir ışın için en yakın SEGMENT'i ve ilgili bina ID'sini bulmak. (ST_DISTANCE, ST_DWithin)
bu aşamada ışınların ve ilgili bina kimliğinin bir listesine sahip olmalıyız.
- o zaman bu listeyi {açı aralıkları, ilgili bina kimliği} toplayabiliriz.

Yapmanın daha verimli bir yolu hakkında herhangi bir fikriniz var mı?

Yanıtlar:


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.