Me gustaría recuperar el conjunto de edificios que puedo ver desde una ubicación dada (punto-lta, lng) y orientación (intervalo de ángulos) + ciertamente con una profundidad dada (por ejemplo, 100 metros). Idealmente, me gustaría como salida algo como: desde el ángulo 1 hasta el ángulo 2, el usuario puede ver el edificio 1, desde el ángulo 2 hasta el ángulo 3 vemos el edificio 2.
Datos = Polígonos que representan los edificios de una ciudad en shapefile.
entrada: una ubicación y una orientación (rango de ángulo) para representar la percepción visual de una persona.
salida :
Versión 1 - una lista de {BuildingID}
Versión 2 (mejor) - lista de {BuildingID, conjunto de segmentos visibles para cada edificio (fachada de edificios)}
Versión 3 (salida ideal) - una lista de {buildingID, rangos de ángulos }. (por ejemplo, desde el ángulo 1 hasta el ángulo 2, el usuario puede ver el edificio 1, desde el ángulo 2 hasta el ángulo 3 vemos el edificio 2, etc.)
Caja de herramientas que puedo usar: PostGis, QGis, ruby, R
inicio de la solución para la salida v1:
- crear un triángulo que represente el alcance visual simplificado del usuario para un punto y orientación dados (intervalo de ángulo) y con un cierto radio / profundidad (por ejemplo, 100 metros)
- calcular la intersección con edificios (por ejemplo, ST_INTERSECTION ) y alcance visual. pero un edificio puede ocultar otro, por lo que la intersección pura entre el alcance visual y los edificios podría no agregar edificios visibles. Este problema debe abordarse.
actualización: solución potencial 2
: crear un triángulo que represente el alcance visual simplificado del usuario para un punto y orientación dados (intervalo de ángulo) y con un cierto radio / profundidad (por ejemplo, 100 metros), creando n rayos (LÍNEA) en diferentes ángulos llenando los ámbitos.
- transformando todos los edificios (POLÍGONOS) en SEGMENTOS / LÍNEAS
- para cada rayo encontrando el SEGMENTO más cercano y el ID de edificio relacionado. (ST_DISTANCE, ST_DWithin)
en esta etapa, por lo que deberíamos tener una lista de rayos y el ID de edificio relacionado.
- entonces podríamos agregar esta lista {rangos de ángulo, ID de construcción relacionada}.
¿Alguna idea sobre una forma más eficiente de hacer?