Gostaria de recuperar o conjunto de edifícios que posso ver de um determinado local (ponto-lat, lng) e orientação (intervalo de ângulos) + certamente com uma profundidade específica (por exemplo, 100 metros). Idealmente, eu gostaria de produzir algo como: do ângulo 1 ao ângulo2, o usuário pode ver o edifício 1, do ângulo 2 ao ângulo3, vemos o edifício 2.
Data = Polígonos que representam os edifícios de uma cidade no shapefile.
entrada: um local e uma orientação (faixa de ângulo) para representar a percepção visual de uma pessoa.
output :
Versão 1 - uma lista de {BuildingID}
Versão 2 (melhor) - lista de {BuildingID, conjunto de segmentos visíveis para cada edifício (fachada dos edifícios)}
Versão 3 (saída ideal) - uma lista de {buildingID, intervalos de ângulo } (por exemplo, do ângulo 1 ao ângulo2, o usuário pode ver o edifício 1, do ângulo 2 ao ângulo3, vemos o edifício 2, etc.)
Caixa de ferramentas que posso usar: PostGis, QGis, ruby, R
início da solução para a saída v1:
- criação de um triângulo que representa o escopo visual simplificado do usuário para um determinado ponto e orientação (intervalo interno de ângulo) e com um determinado raio / profundidade (por exemplo, 100 metros)
- interseção computacional com edifícios (por exemplo, ST_INTERSECTION ) e escopo visual. mas um edifício pode ocultar outro, de modo que a interseção pura entre o escopo visual e os edifícios possa não adicionar edifícios visíveis. esse problema precisa ser resolvido.
update: solução potencial 2
- criando um triângulo representando o escopo visual simplificado do usuário para um determinado ponto e orientação (intervalo interno de ângulo) e com um certo raio / profundidade (por exemplo, 100 metros) - criando n raios (LINE) em ângulos diferentes preenchendo os escopos.
- transformar todos os edifícios (POLÍGONOS) em SEGMENTOS / LINHAS
- para cada raio que encontrar o SEGMENTO mais próximo e o ID do edifício relacionado. (ST_DISTANCE, ST_DWithin)
nesse estágio, portanto, devemos ter uma lista de raios e o ID do edifício relacionado.
- então poderíamos agregar esta lista {intervalos de ângulo, ID de construção relacionado}.
Alguma idéia sobre uma maneira mais eficiente de fazer?