Interpolates height or attribute values for arbitrary 2D geometries based on either point clouds (not yet implemented) or grids.
opalsQuery reads in 2D geometries in OGC Well-Known-Text (WKT) format and interpolates values (height or attribute) based on a set of point clouds (not yet implemented) or rasters. The result is again an OGC geometry in WKT syntax containing the interpolated values as height (Z) or attribute (M).
opalsQuery stellt ein Modul dar, welches Höhen- oder Attributwerte an beliebigen Stellen und auf Basis von beliebig vielen Input-Datensätzen ermittelt. In erster Linie ist als Werkzeug gedacht, um Rasterwerte aus mehreren Datensätzen zu interpolieren. Typischer Anwendungsfall ist zB. das Tool zur Forstraßenableitung. Dieses wird auf Kachel-Basis erstellt und die Linienzüge werden zusammengeführt (merging). In der Folge sind linienabschnittsweise Attribute zu ermitteln (Fahrbahnbreite etc.). Dazu muss Kachel übergreifend interpoliert werden.
Eine weitere Überlegung sieht die Erweiterung auf Punktwolken als Input vor. dadürch würde opalsQuery zu einem universellen Tool, mit dem an beliebigen Stellen entweder Höhen, aber auch Attributwerte ermittelt werden können. Während im Rasterfall die Resampling-Methode vorgegeben werden muss (nearest neighbor, bilinear, bicubic) müsste bei den Punktwolken die Nachbarschaft definiert werden; am besten im bereits in Arbeit befindlichen Konzept zur allgemeinen Suche (über nn und/oder Suchradius).
Überlappungsbereich: Die Datensätze, welche die Interpolationsgrundlagen darstellen können sich überlappen. Daher muss geregelt werden, wie im Überlappungsbereich vorgegangen wird. Hier wurde das Konzept von Algebra über eine Formel zur Anwendung gebracht. Unterstützt wird die generische Filtersyntax (nicht Python). Zur Verfügung stehen damit alle statistischen Operatoren (first(r), min(r), mean(r), median(r), ...). Analog für den Punktwolken Fall: first(n.z), etc. Ich denke, das sollte ausreichende Möglichkeiten zur Steuerung bieten.
IO: Das derzeitige Konzept sieht opalsQuery als Dienstmodul vor, dass eher von Scripts benutzt, denn von der Kommandozeile ausgeführt wird. Demnach erfolgt die Eingabe der Geometrien, für die Höhen/Attribute ermittelt werden sollen, über WKT Strings (OGC Simple Features Specification) --> inGeometry. Ausgegeben wird die selbe Geometrie erweitert um die Z/Attribut Komponente (outGeometry). Vorteil: Via Python GDAL/OGR Bindings können die Geometrien direkt weiterverarbeitet werden. Nachteil Ein/Ausgabe als Files nicht möglich/vorgesehen. Diskussionsbeiträge dazu erwünscht.
Für die Abfrage von Werten auf Basis von Raster-Datensätzen
Possible values: nearestNeighbour ... nearest neighbour bilinear ........... bi-linear interpolation bicubic ............ bi-cubic interpolationMethod to be used for interpolating grid values at the data point locations.
The data used in the subsequent examples are located in the $OPALS_ROOT/demo/
directory and the following preprocessing steps (data import and surface grid calculation) are required:
With the above commands the entire domain of the strip21
dataset is split up in four quadrants, for each of which a separate surface model is calculated.
In the following example a line geometry stored as WKT string satisfying the OGC Simple Feature Specification is processed and for each vertex of the line the corresponding heights are queried from the underlying surface grid models.
Please note that each of the four line vertices are located in a different grid model. The vertex heights are automatically calculated from the appropriate grid model. The resulting 3D line geometry is stored in the outGeometry parameter (c.f. output parameter file outGeom.xml
) as a WKT string:
LINESTRING (529635 5338727 270.45843505859375,529635 5338626 279.5660400390625,529763 5338626 272.25079345703125,529826 5338711 286.2608642578125)
In the following example the parameter lineVertixDist is specified resulting in a densified output line string.
The following (3D) output line string is generated (coordinates rounded to 3 digits):
LINESTRING (529635.000 5338727.000 270.458, 529653.286 5338712.571 270.667, 529671.571 5338698.143 271.098, 529689.857 5338683.714276.881, 529708.143 5338669.286 271.812, 529726.429 5338654.857 274.894, 529744.714 5338640.429 283.058, 529763.000 5338626.000 272.251, 529775.600 5338643.000 279.833, 529788.200 5338660.000 272.246, 529800.800 5338677.000 285.582, 529813.400 5338694.000 278.098, 529826.000 5338711.000 286.261)
opalsQuery is primarily designed as a utility module to be used in a scripting environment. As a Python script, example 1 can be written as:
In addition to the commandline example above the Python script not only prints out the resulting 3d-line WKT string but also creates an OGR line geometry object and prints the 2d envelope, 3d-envelope and line length. Please note, that the GDAL/OGR python bindings must be installed (c.f. OPALS Python AddOns ).
The command...
... creates the following screen log.
[...] Resulting 3D line geometry: LINESTRING (529635 5338727 270.45843505859375,529635 5338626 279.5660400390625,529763 5338626 272.25079345703125,529826 5338711 286.2608642578125) Envelope 2D: (529635.0, 529826.0, 5338626.0, 5338727.0) Envelope 3D: (529635.0, 529826.0, 5338626.0, 5338727.0, 270.45843505859375, 286.2608642578125) Line length: 334.80170131