Jak znaleźć budynki (wielokąty), które użytkownik może zobaczyć z danej lokalizacji (punktu) i orientacji (zakresu kątów)?

10

Chciałbym odzyskać zestaw budynków, które widzę z danej lokalizacji (point -lat, lng) i orientacji (przedział kątów) + na pewno z określoną głębokością (np. 100 metrów). Idealnie chciałbym, aby na wyjściu było coś takiego: od kąta 1 do kąta 2 użytkownik może zobaczyć budynek 1, od kąta 2 do kąta 3 widzimy budynek 2.

Dane = Wieloboki reprezentujące budynki miasta w pliku kształtu.

dane wejściowe: lokalizacja i orientacja (zakres kątów), które reprezentują postrzeganie wizualne osoby.

wyjście :
Wersja 1 - lista {BuildingID}
Wersja 2 (lepsza) - lista {BuildingID, zestaw widocznych segmentów dla każdego budynku (fasada budynków)}
Wersja 3 (idealny wynik) - lista {buildingID, zakresy kątów }. (na przykład od kąta 1 do kąta 2 użytkownik widzi budynek 1, od kąta 2 do kąta 3 widzimy budynek 2 itd.)

Przybornik, którego mogę używać: PostGis, QGis, ruby, R

początek rozwiązania dla wyjścia v1:
- utworzenie trójkąta reprezentującego uproszczony zasięg wizualny użytkownika dla danego punktu i orientacji (przedział kąta) oraz o określonym promieniu / głębokości (np. 100 metrów)
- obliczenie przecięcia z budynkami (np. ST_INTERSECTION ) i zakres wizualny. ale budynek może ukryć inny, więc czyste skrzyżowanie zasięgu wizualnego z budynkami może nie dodawać żadnych widocznych budynków. należy rozwiązać ten problem.

aktualizacja: potencjalne rozwiązanie 2 - utworzenie trójkąta reprezentującego uproszczony zasięg wizualny użytkownika dla danego punktu i orientacji (odstęp kątowy) oraz o określonym promieniu / głębokości (np. 100 metrów) - tworzenie n promieni (LINIA) pod różnymi kątami wypełnianie zakresów.
- przekształcenie wszystkich budynków (POLYGONS) w SEGMENTY / LINIE
- dla każdego promienia znajdującego najbliższy SEGMENT i powiązany identyfikator budynku. (ST_DISTANCE, ST_DWithin)
na tym etapie, więc powinniśmy mieć listę promieni i powiązany identyfikator budynku.
- wtedy moglibyśmy zagregować tę listę {zakresy kątów, powiązany identyfikator budynku}.

Masz pomysł na bardziej wydajny sposób?

nmaisonn
źródło

Odpowiedzi: