Я хотів би знайти набір будівель, які я бачу з заданого місця (точка -лат, lng) та орієнтації (інтервал кутів) + безумовно, із заданою глибиною (наприклад, 100 метрів). В ідеалі я хотів би отримати щось подібне: від кута 1 до кута2 користувач може бачити будівлю 1, від кута 2 до кута3 ми бачимо будівлю 2.
Дані = Полігони, що представляють будівлі міста у формі файла.
вхід: місцеположення та орієнтація (діапазон кута) для відображення візуального сприйняття людини.
вихід :
Версія 1 - список {BuildingID}
Версія 2 (краща) - список {BuildingID, набір видимих сегментів для кожної будівлі (фасад будинків)}
Версія 3 (ідеальний вихід) - список {buildingID, кутові діапазони }. (наприклад, від кута 1 до кута2, користувач може бачити будівлю 1, від кута 2 до кута3, ми бачимо будівлю 2 тощо).
Панель інструментів, яку я можу використовувати: PostGis, QGis, ruby, R
початок рішення для виводу v1:
- створення трикутника, що представляє спрощений зоровий діапазон користувача для заданої точки та орієнтації (інтервал кута) та з певним радіусом / глибиною (наприклад, 100 метрів)
- обчислювальний перетин із будівлями (наприклад, ST_INTERSECTION ) і зоровий обсяг. але будівля може приховати ще одне, тому чистий перетин між візуальним розмахом і будівлями може не додати видимих будівель. це питання потрібно вирішити.
оновлення: потенційне рішення 2
- створення трикутника, що представляє спрощений зоровий діапазон користувача для заданої точки та орієнтації (інтернвал кута) та з певним радіусом / глибиною (наприклад, 100 метрів) - створення n променів (ЛІНІЯ) під різними кутами заповнення областей.
- перетворення всіх будівель (ПОЛІГОНІВ) у СЕГМЕНТИ / ЛІНІЇ
- для кожного променя, що знаходить найближчий СЕГМЕНТ і відповідний будівельний ID . (ST_DISTANCE, ST_DWithin)
на цьому етапі, тому ми повинні мати список променів та відповідний ідентифікатор будівлі.
- тоді ми могли б узагальнити цей список {діапазони кута, пов’язані з ідентифікацією будівлі}.
Якась ідея про більш ефективний спосіб зробити?