
Geometry : 
Subject: [ggl] sample: poisonous cloud
From: Barend Gehrels (Barend.Gehrels)
Date: 20090427 15:59:27
Hi,
Maybe it's nice to give an example of what can can be done with ggl, and
especially what's currently being added and why.
I created a small sample webpage here:
http://www.xs4all.nl/~barend/geodan/ve_mal.htm, showing a poisonous
cloud (in Dutch: gasmal). Those clouds are normally modelled, calculated
and displayed in 2D but for a project we decided to add a 3D version for
visualization. So if you go to the referred page and download the
Microsoft Virtual Earth plugin, you'll see a 3D representation of a
domeshaped ellipselike geometry.
How is this created?
 a polygon is read from a shapefile
 its longest axis is determined using the new algorithm "diameter"
which calculates the diameter (furthest point pair and its distance)
from a geometry (in this case a polygon). The diameter.hpp is not yet
added to svn, will be soon. It uses brute force now (n^2) but it is
possible to use O(n log n).
 the half of the polygon is selected (using the new
"circular_iterator") and copied to a linestring
 another version of this "half" linestring is generated: where all
vertices are exactly in between the vertices of the original (this is
called the algorithm "intermediate" but maybe a more appropriate name
can be invented)
 it is then rotated along its longest axis using a 4D matrix
(generation of this matrix will be added as a transformation), in steps
of 18 degrees, 10 times until it is totally rotated 180 degrees.
Rotation is done alternating the original and the "intermediate". All
those rotated 3D linestrings are collected in a std::vector
 then, using two of these rotated 3D linestrings at a time (so a normal
one and an "intermediate" one) 3D triangles are generated (> a 3D mesh)
 those triangles are transformed from Dutch Coordinate System (epsg
28992) to LatLong using "transform" with the new
"project_inverse_transformer". In transformation height is copied
 detail: within this generic transformation a corresponding type must
be generated with another pointtype. So for polygon<P> >
polygon<LatLong>. This is the new metafunction replace_point_type
* note that this one can be enhanced (if possible at all) by adding
constness, and by using the original point type. The last one is
probably hard or requires specializations per pointtype...
 all triangles are streamed to "VEShapes", these are Javascript Virtual
Earth shapes. Virtual Earth is Microsoft's Google Earth answer, a nice
environment where 3D can be displayed in your webbrowser
 it's also possible to generate KML (of course)
 I'll create a new sample of these procedure
 part of this procedure (rotation, intermediate and 3D mesh generation)
can be added in another algorithm, e.g. "create_mesh"
 there were already question raised: what's the volume of that cloud? NYI.
See also http://www.xs4all.nl/~barend/geodan/ve_mal_ggl.htm where more
steps are displayed:
 the ground shape in darker green
 the 3D triangles in lighter green
 the rotated linestrings in black
 the pair of points indicating the longest axis as pushpins
Note that VE even shows the weather (also clouds). Note also that during
weatherdisplay the semitransparante dome is sometimes not painted
correct...
Regards, Barend
Geometry list run by mateusz at loskot.net