Wie implementiere ich die Viewshed-Berechnung?

11

Ich suche nach einer Möglichkeit, Sichtbarkeit zu implementieren (auch bekannt als Viewshed). Ich habe eine frühere GIS SE-Frage gefunden , die einige GIS-Anwendungen vorschlug (nicht das, was ich brauche - ich versuche, die Berechnungen einzubetten), sowie SAGA. SAGA ähnelt eher dem, wonach ich suche (C ++ -, Java-, C # -Klassen), aber ich kann die API-Dokumentation nicht genug verstehen, um herauszufinden, welche Klassen ich überhaupt instanziieren muss (oder welche Unterklasse).

Ich bin nicht an die Idee von SAGA gebunden - ich suche nur nach einer Bibliothek / Engine, die Sichtbarkeitsberechnungen durchführen kann.

Die Einschränkungen sind, dass es sein muss:

  • einigermaßen "leicht" (da ich Embedded / Mobile abdecken möchte)
  • einigermaßen Open Source (da meine Anwendung Open Source sein wird, obwohl ich flexibel bin, welche Lizenz genau verwendet wird, solange sie (L) GPL-kompatibel ist).

Kann jemand eine solche Bibliothek oder Engine empfehlen und eine Beschreibung oder einen Link zu dem Teil der Bibliothek oder Engine bereitstellen, den ich zum Anzeigen von Shed-Berechnungen verwenden muss?

Alternativ / zusätzlich würde ich mich auch über Verweise auf Artikel oder Tutorials freuen, in denen erklärt wird, wie diese Berechnungen auf effiziente Weise durchgeführt werden (wie dies für eingebettete / mobile Geräte gilt, sodass eine GPU-basierte Implementierung möglicherweise nicht so nützlich ist wie etwas, das ist allgemeiner und handhabt Geräte mit geringem Stromverbrauch)

Ich bevorzuge eine vorhandene Implementierung, anstatt selbst etwas zu erstellen (was eine Sicherungsoption ist).

Bearbeiten: C ++ ist keine feste Anforderung - alles, was einigermaßen portabel ist (C #, C ++, Java), reicht aus. Ich versuche, eine Bibliothek oder Vorlagen zu finden, anstatt eine große Anwendung einzubetten.

BradHards
quelle
2
Benötigen Sie tatsächlich einen vollständigen ZTV-Algorithmus? Vielleicht das Terrain in OpenGL modellieren und die Ergebnisse davon analysieren? Smartphones haben eine zunehmend gute Grafikbeschleunigung, die Sie ausnutzen können. OpenGL unterstützt sogar orthografische Projektionen.
Matthew Snape
Ich bin glücklich, solange es die "richtigen" Antworten liefert, also ist OpenGL einen Blick wert. Haben Sie ein Beispiel / einen Zeiger, der dies aus GIS-Typdaten macht?
BradHards

Antworten:

8

Wie Sie aus der referenzierten GIS SE-Frage gesehen haben , scheint es zumindest im Open Source-Markt jenseits von SAGA und GRASS GIS nicht viel zu geben, was eigenständige Pakete betrifft. Abgesehen davon, dass Sie einen Wrapper um den Code für diese Algorthims schreiben, können Sie Viewshed möglicherweise selbst implementieren. (Obwohl ich gerne korrigiert würde.)

Wenn Sie die Dokumentation zur GRASS r.viewshed- Funktion lesen, finden Sie eine umfassende Beschreibung des Algorithmus und einen Verweis auf das folgende Dokument, in dem ein Viewshed-Algorithmus ausführlich erläutert wird:

Berechnen der Sichtbarkeit auf Terrains im externen Speicher . Herman Haverkort, Laura Toma und Yi Zhuang. In den Proceedings des 9. Workshops zu Algorithm Engineering and Experiments / Workshop zu analytischen Algorithmen und Kombinatorik (ALENEX / ANALCO 2007).

Alternativ bietet der Wikipedia-Artikel auf Viewshed Referenzen:

Wu, H., Pan, M., Yao, L. & Luo, B. (2007). Ein partitionsbasierter serieller Algorithmus zum Generieren von Viewshed auf massiven DEMs . Internationales Journal für Geographische Informationswissenschaft, 21 (9), 955-964.

om_henners
quelle
Nicht genau die Antwort, auf die ich gehofft hatte, aber die beste Antwort. Vielen Dank für Ihre Arbeit.
BradHards
Keine Bange. Viel Glück damit!
om_henners
4

Es gibt ein Freeware-Paket namens RadioMobile, das für Funkkommunikationsstudien entwickelt wurde und einen Sichtschuppen generiert. Die Ausgabe basiert auf einer DEM-Eingabe und kann entweder ein Vektor (Punktdatei) oder ein Raster sein. Ich konnte die Vektorpunktdatei verwenden, um Polygone durch Skripte zu erstellen, die ich gerne mit Ihnen teilen werde. Da Sie für die Rasterausgabe eine Palette festlegen können, können Sie das Raster auch mit gdal in einen Vektor konvertieren.

Das Programm verfügt über eine GUI, kann aber auch im Batch-Modus ausgeführt werden, sodass Sie es problemlos in ein Programm integrieren können. Es gibt zwar viel mehr Optionen als für ein herkömmliches Ansichtsfenster erforderlich, Sie können diese jedoch auf Null setzen, damit die Auswirkungen wie die Sendeleistung nicht berücksichtigt werden - siehe http://www.g3tvu.co.uk/RM_Batch_Files.htm

Das Programm finden Sie unter http://www.cplus.org/rmw/rme.html. Der Autor ist ebenfalls sehr hilfreich.

Hoffe das hilft,

GeorgeC
quelle
Interessant, scheint aber nicht Open Source zu sein und nur für Windows. In einer mobilen Umgebung funktioniert das also nicht.
BradHards