Saya ingin mengambil set bangunan yang dapat saya lihat dari lokasi tertentu (titik -lat, lng) dan orientasi (interval sudut) + tentu dengan kedalaman tertentu (misalnya 100 meter). Idealnya saya ingin keluaran seperti: dari sudut 1 ke sudut2 pengguna dapat melihat bangunan 1, dari sudut 2 ke sudut3 kita melihat bangunan 2.
Data = Poligon yang mewakili bangunan sebuah kota di shapefile.
input: lokasi dan orientasi (rentang sudut) untuk mewakili persepsi visual seseorang.
output :
Versi 1 - daftar {BuildingID}
Versi 2 (lebih baik) - daftar {BuildingID, kumpulan segmen yang terlihat untuk setiap bangunan (fasad bangunan)}
Versi 3 (output ideal) - daftar {buildingID, rentang sudut }. (sebagai contoh, dari sudut 1 ke sudut2 pengguna dapat melihat bangunan 1, dari sudut 2 ke sudut3 kita melihat bangunan 2, dll.)
Toolbox yang dapat saya gunakan: PostGis, QGis, ruby, R
mulai dari solusi untuk output v1:
- membuat segitiga yang mewakili ruang lingkup visual pengguna yang disederhanakan untuk titik dan orientasi tertentu (jarak sudut) dan dengan radius / putaran tertentu (misalnya 100 meter)
- menghitung persimpangan dengan bangunan (mis. ST_INTERSECTION ) dan ruang lingkup visual. tetapi sebuah bangunan dapat menyembunyikan satu sama lain sehingga persimpangan murni antara ruang lingkup visual dan bangunan mungkin tidak menambah bangunan yang terlihat. masalah ini perlu ditangani.
pembaruan: solusi potensial 2
- membuat segitiga yang mewakili ruang lingkup visual pengguna yang disederhanakan untuk titik dan orientasi tertentu (jarak sudut) dan dengan jari-jari / putaran tertentu (misalnya 100 meter) - membuat n sinar (LINE) pada sudut yang berbeda mengisi cakupan.
- Mengubah semua bangunan (POLYGON) menjadi SEGMEN / GARIS
- untuk setiap sinar menemukan SEGMEN terdekat dan buildingID terkait. (ST_DISTANCE, ST_DWithin)
pada tahap ini sehingga kita harus memiliki daftar sinar dan ID bangunan terkait.
- lalu kita dapat menggabungkan daftar ini {rentang sudut, ID bangunan terkait}.
Adakah gagasan tentang cara yang lebih efisien untuk dilakukan?