Я хотел бы получить набор зданий, которые я могу видеть из заданного местоположения (точка -lat, 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 лучей (LINE) под разными углами заполнение областей.
- преобразование всех зданий (ПОЛИГОНОВ) в СЕГМЕНТЫ / ЛИНИИ
- для каждого луча, находящего ближайший СЕГМЕНТ и связанный buildingID. (ST_DISTANCE, ST_DWithin)
на этом этапе, поэтому у нас должен быть список лучей и соответствующий идентификатор здания.
- тогда мы могли бы объединить этот список {диапазоны угла, связанный идентификатор здания}.
Любая идея о более эффективном способе сделать?