Wie finde ich die Gebäude (Polygone), die ein Benutzer von einem bestimmten Ort (Punkt) und einer bestimmten Ausrichtung (Winkelbereich) aus sehen kann?

10

Ich möchte die Gebäude abrufen, die ich von einem bestimmten Ort (Punkt -lat, lng) und Orientierung (Winkelintervall) + sicher mit einer bestimmten Tiefe (z. B. 100 Meter) sehen kann. Idealerweise möchte ich als Ausgabe etwas wie: Von Winkel 1 bis Winkel 2 kann der Benutzer Gebäude 1 sehen, von Winkel 2 bis Winkel 3 sehen wir Gebäude 2.

Daten = Polygone, die die Gebäude einer Stadt im Shapefile darstellen.

Eingabe: Ein Ort und eine Ausrichtung (Winkelbereich) zur Darstellung der visuellen Wahrnehmung einer Person.

Ausgabe :
Version 1 - eine Liste von {BuildingID}
Version 2 (besser) - Liste von {BuildingID, Satz sichtbarer Segmente für jedes Gebäude (Fassade von Gebäuden)}
Version 3 (ideale Ausgabe) - eine Liste von {buildingID, Winkelbereichen }. (Zum Beispiel kann der Benutzer von Winkel 1 bis Winkel 2 Gebäude 1 sehen, von Winkel 2 bis Winkel 3 sehen wir Gebäude 2 usw.)

Toolbox, die ich verwenden kann: PostGis, QGis, Ruby, R.

Beginn der Lösung für die Ausgabe v1:
- Erstellen eines Dreiecks, das den vereinfachten visuellen Bereich des Benutzers für einen bestimmten Punkt und eine bestimmte Ausrichtung (Winkelintervall) und mit einem bestimmten Radius / einer bestimmten Tiefe (z. B. 100 Meter) darstellt
- Berechnen der Schnittmenge mit Gebäuden (z. B. ST_INTERSECTION) ) und visueller Umfang. Ein Gebäude kann jedoch ein anderes Gebäude verbergen, sodass durch die reine Schnittstelle zwischen visuellem Umfang und Gebäuden möglicherweise keine sichtbaren Gebäude hinzugefügt werden. Dieses Problem muss angegangen werden.

Update: Mögliche Lösung 2 - Erstellen eines Dreiecks, das den vereinfachten visuellen Bereich des Benutzers für einen bestimmten Punkt und eine bestimmte Ausrichtung (Winkelintervall) und mit einem bestimmten Radius / einer bestimmten Tiefe (z. B. 100 Meter) darstellt - Erstellen von n Strahlen (LINE) in verschiedenen Winkeln Füllen Sie die Bereiche.
- Umwandlung aller Gebäude (POLYGONE) in SEGMENTE / LINIEN
- für jeden Strahl, der das nächstgelegene SEGMENT und die zugehörige Gebäude-ID findet. (ST_DISTANCE, ST_DWithin)
zu diesem Zeitpunkt sollten wir also eine Liste der Strahlen und die zugehörige Gebäude-ID haben.
- Dann könnten wir diese Liste zusammenfassen {Winkelbereiche, zugehörige Gebäude-ID}.

Haben Sie eine Idee für einen effizienteren Weg?

nmaisonn
quelle

Antworten: