Help with 3D
- 1 Raster 2.5D Surfaces
- 2 Raster 3D Volumes (voxels)
- 3 Vector 3D point data
- 4 Vector 3D lines
- 5 Vector 3D polygons
- 6 Visualization Tools
Raster 2.5D Surfaces
This is the "typical" case, and most(GRASS r.* modules) work in this mode. The GIS layer is defined by north,south,east,west and the raster map's cell values represent the elevation.
- : An introduction to raster processing in GRASS GIS
Snippet from the Wikipedia definition for 2.5D: "The idea is that the program's canvas represents a normal 2D painting surface, but that the data structure that holds the pixel information is also able to store information regarding z-index (depth) as well as other information such as material settings, specularity, etc. With this data it is thus possible to simulate lighting, shadows, and so on."
Horizontal (2D) region settings are handled by the g.region module. The third dimension is unbound.
2.5D rasters may be visualized in 3D with GRASS's NVIZ program, or as a shaded relief in 2D space with the module.
- Olympus Mons (Mars) topography viewed with NVIZ
g.region rast=elevation.10m nviz elev=elevation.10m
Raster 3D Volumes (voxels)
Support for 3D rasters (voxels) is relatively new in GRASS and is primarily handled by the. A 3D raster can be thought of as a stack of 2D raster maps forming a 3D cube of data cells.
The third dimension need not be limited to "z" elevation! It can just as well represent the time dimension in a time series of 2.5D raster surfaces. It is possible to make a 4D visualization using the NVIZ software's animation panels and movie making facility.
- Chesapeake Bay Nitrogen Levels (4D) from NCSU GMS Lab (Mitasova et al.)
Region settings are handled by themodule. Special 3D raster controls for g.region include:
-3 flag: Prints 3D settings rast3d Set region to match this 3D raster map (both 2D and 3D values) t Value for the top edge b Value for the bottom edge res3 3D grid resolution (north-south, east-west and top-bottom) tbres Top-bottom grid resolution 3D
- From the mailing list: Raster 3D from DEMs (drillhole data)
- Custom volume creation. Here is a small Octave (Matlab) script to create a text file suitable for loading as a 3D raster with . Here is the file that this script creates: vox_data50.txt.gz
% f(x,y,z) = x + (y^2 /2) + z^2 x= y= z= 50; cd ~/grass/ fp = fopen('vox_data50.txt', 'wt') fprintf(fp, 'north: %d\n', y); fprintf(fp, 'south: 0\n'); fprintf(fp, 'east: %d\n', x); fprintf(fp, 'west: 0\n'); fprintf(fp, 'top: %d\n', z); fprintf(fp, 'bottom: 0\n'); fprintf(fp, 'rows: %d\n', y); fprintf(fp, 'cols: %d\n', x); fprintf(fp, 'levels: %d\n', z); for dep = 1:z for row = 1:y for col = 1:x fprintf(fp, '%.4f', col + (row^2 /2) + dep^2 ); if(col < 50) fprintf(fp, ' '); end end fprintf(fp, '\n'); end disp(['dep ' num2str(dep)]) fflush(stdout); end fclose(fp)
Load the data with:
r3.in.ascii in=vox_data50.txt out=vox50
display isosurfaces with:
g.region rast3d=vox50 nviz -q Panel->Raster volumes [New] vox50 Isosurface [Add] [New Constant] 500 [Accept] (repeat for 1000,2000,3000) Change main view height to 125.00 (manual entry)
extract a slice to a 2D raster map with:
g.region t=26.0 b=25.0 r3.to.rast in=vox50 out=vox50x
Vector 3D point data
Historical note: known as "site data" in GRASS GIS 5
In the "typical" case, "z" data is stored as a non-spatial attribute in a vector point map. In GRASS 6 it is possible to create 3D vector files, i.e. points exist in 3D space.
- - An introduction to vector processing in GRASS GIS
- Import x,y,z,... data as 3D with the "-z" flag and "z=" column parameter:
v.in.ascii -z format=point cat=1 x=2 y=3 z=4
- You can convert a 2D vector into a 3D vector with (take elevation values from vector attribute column) or (interpolate elevation values from a raster DEM map).
- It may be more convenient to import massive datasets (millions and millions of points) with to create a 2.5D raster map.
Conversion to 3D raster volume
- Use the module to interpolate 3D vector points into a 3D raster volume.
3D points defining the hull of a ship, visualized using NVIZ
TODO: import star guide and display using NVIZ, using magnitude column in database table for dynamic sizing. Requires a "Free" dataset, if you have any leads, please add links to this wiki page. Thanks.
Vector 3D lines
The GRASS vector engine is fully 3D aware, so 3D lines such as highways which cross at a bridge, but do not touch, can be modelled.
- 3D line objects can be displayed with NVIZ
- (place above a 2D raster isosurface)
Vector 3D polygons
In the "typical" case, "z" data is stored as a non-spatial attribute in a vector point map. In GRASS 6 it is possible to create 3D vector files, i.e. lines and polygons exist in 3D space. The topological nature of GRASS 6's vector engine means that roads can cross via a bridge without topologically meeting.
- 3D feature types
- face: The 3D equivalent of a boundary. These combine to form a volume surface (e.g. a teapot)
- kernel: The 3D equivalent of a centroid (infrastructure for kernels is in place, but they are currently mostly unused)
- volume: An enclosed 3D space. The 3D equivalent to GRASS's area vector feature, meaning an alias to a "face(s)+kernel" set. (some infrastructure and place-holders exist, but not much in the way of practical applications has been coded yet)
- : An introduction to vector processing in GRASS GIS
- The v.in.ascii -z flag must be used to create a 3D file
- The or v.in.dwg modules can import 3D vector surfaces. DXF files are usually imported without georeference. To move into the geo-space of the rest of your data they must be projected with v.proj or translated with v.transform. If working with them alone, it is recommended to use a simple XY location.
- Visualization with NVIZ: must be placed on a raster surface or constant surface. It may be useful to set the transparency attribute of the raster surface to something unobtrusive.
Getting data and data conversion
There are many free 3D mesh files available for research purposes from INRIA.fr's GAMMA project. These can be converted from e.g. 3D Studio (.3ds) format into DXF files with a converter program like wcvt2pov.exe (runs well in Linux under wine). Then use v.in.dxf. Also Blender does a nice job for exporting to 3D DXF.
wcvt2pov.exe supported file formats
- load: AOFF (*.geo), AutoCAD DXF (*.dxf), 3D Studio (*.3ds), Neutral File Format (*.nff), RAW (*.raw), TPOLY (*.tpo), True Type Font (*.ttf), Wavefront (*.obj), World Toolkit (*.nff)
- save: AutoCAD DXF (*.dxf), 3D Studio (*.asc), Neutral File Format (*.nff), Povray V2.2 (*.pov), Povray V2.2 Include (*.inc), RAW (*.raw), TPOLY (*.tpo), True Space (*.cob), VRML V1.0 (*.wrl), Wavefront (*.obj), World Toolkit (*.nff)
- 3D DXF Mesh object, created in Blender and imported into GRASS (screenshot: A. Bezzi, M. Neteler)
- GRASS: building footprints extruded to 3D blocks (screenshot: M. Neteler)
- (data courtesy City of Trento, Italy - see "Mostra Strumenti Dati" for geodata download)
- Watertower imported with v.in.dwg (or use v.in.dxf) displayed over a 2.5D raster surface with color orthophoto raster providing ground coloration.
pyramid: the following is an example of 3D vector surfaces in GRASS's standard ascii format. load with v.in.ascii.
# 3D Pyramid in GRASS: (kernel type still unused in GRASS 6) # v.in.ascii in=pyramid.vasc out=pyramid_3d format=standard -nz # g.region n=150 s=-50 w=-50 e=150 res=10 # r.mapcalc one=1 # nviz elev=one vect=pyramid_3d # # tip: in nviz try setting the raster surface transparency to 50% # F 5 0 0 10 0 100 10 100 100 10 100 0 10 0 0 10 F 4 0 0 10 50 50 80 100 0 10 0 0 10 F 4 0 100 10 50 50 80 0 0 10 0 100 10 F 4 100 100 10 50 50 80 0 100 10 100 100 10 F 4 100 0 10 50 50 80 100 100 10 100 0 10 K 1 1 40 50 40 1 1
- wxNviz: wxGUI 3D view mode extension
- output to Vis5D ( )
- output to VRML (3D virtual reality) ( )
- output to KML (Google Earth) ( , , )
- output to DXF (Blender, AutoCAD, ...) ( )