This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch experimental
in repository osgearth.

commit a78a71164dc50200431f38849e532c8b5e780990
Author: Bas Couwenberg <sebas...@xs4all.nl>
Date:   Thu Jan 25 07:32:15 2018 +0100

    New upstream version 2.9~rc2+dfsg
---
 .../drivers/feature/mapnikvectortiles.rst          |  22 ++
 docs/source/references/drivers/terrain/mp.rst      |   2 +-
 .../drivers/terrain/terrain_options_shared.rst     |   2 +-
 docs/source/references/earthfile.rst               |   4 +-
 .../osgearth_tilesource/osgearth_tilesource.cpp    |  36 +++-
 src/osgEarth/ElevationPool.cpp                     |   2 +-
 src/osgEarth/TerrainLayer.cpp                      |   8 +-
 src/osgEarth/Units                                 |  10 +-
 src/osgEarth/Version                               |   2 +-
 src/osgEarth/catch.hpp                             |   2 +-
 .../agglite/AGGLiteRasterizerTileSource.cpp        |  18 +-
 .../engine_mp/MPEngine.NormalMap.vert.glsl         |   2 +-
 .../engine_mp/MPEngine.vert.model.glsl             |   2 +-
 .../engine_rex/RexEngine.NormalMap.vert.glsl       |   4 +-
 src/osgEarthDrivers/fastdxt/CMakeLists.txt         |   2 +-
 src/osgEarthSymbology/Color.cpp                    |   2 +-
 src/osgEarthSymbology/StyleSheet                   |   5 +
 src/osgEarthSymbology/StyleSheet.cpp               |   3 +
 src/osgEarthUtil/MouseCoordsTool.cpp               |  29 +--
 tests/feature_mapnikvectortiles.earth              | 221 +++++++++++++++++++++
 20 files changed, 311 insertions(+), 67 deletions(-)

diff --git a/docs/source/references/drivers/feature/mapnikvectortiles.rst 
b/docs/source/references/drivers/feature/mapnikvectortiles.rst
new file mode 100644
index 0000000..ffc87d6
--- /dev/null
+++ b/docs/source/references/drivers/feature/mapnikvectortiles.rst
@@ -0,0 +1,22 @@
+Mapnik Vector Tiles
+===========================
+This plugin reads vector data from an `MBTiles`_ file which contains `vector 
tiles<https://github.com/mapbox/vector-tile-spec>`_.
+
+Note:  This driver does not currently support multi-level mbtiles files.  It 
will only load the maximum level in the database.  This will change in the 
future when
+osgEarth has better support for non-additive feature datasources.
+
+This driver requires that you build osgEarth with SQLite3 support and Protobuf 
support.
+
+Example usage::
+
+    <model driver="feature_geom">
+        <features name="osm" driver="mapnikvectortiles">
+            <url>../data/osm.mbtiles</url>
+        </features>
+        ...
+
+Properties:
+
+    :url:      Location of the mbtiles file.
+
+.. _MBTiles:  https://www.mapbox.com/developers/mbtiles/
diff --git a/docs/source/references/drivers/terrain/mp.rst 
b/docs/source/references/drivers/terrain/mp.rst
index 7d90c70..bcb6433 100644
--- a/docs/source/references/drivers/terrain/mp.rst
+++ b/docs/source/references/drivers/terrain/mp.rst
@@ -13,7 +13,7 @@ Example usage::
                      normalize_edges          = "false"
                      incremental_update       = "false"
                      quick_release_gl_objects = "true"
-                     min_tile_range_factor    = "6.0"
+                     min_tile_range_factor    = "7.0"
                      cluster_culling          = "true" />
 
 Properties:
diff --git a/docs/source/references/drivers/terrain/terrain_options_shared.rst 
b/docs/source/references/drivers/terrain/terrain_options_shared.rst
index 3619f14..1d99017 100644
--- a/docs/source/references/drivers/terrain/terrain_options_shared.rst
+++ b/docs/source/references/drivers/terrain/terrain_options_shared.rst
@@ -2,7 +2,7 @@ Common Properties:
 
     :min_tile_range_factor:     The "maximum visible distance" ratio for all 
tiles. The 
                                 maximum visible distance is computed as tile 
radius * 
-                                this value. (default = 6.0)
+                                this value. (default = 7.0)
     :cluster_culling:           Cluster culling discards back-facing tiles by 
default. You
                                 can disable it be setting this to ``false``, 
for example if
                                 you want to go underground and look up at the 
surface.
diff --git a/docs/source/references/earthfile.rst 
b/docs/source/references/earthfile.rst
index 7333a01..943fd62 100644
--- a/docs/source/references/earthfile.rst
+++ b/docs/source/references/earthfile.rst
@@ -117,8 +117,8 @@ These options control the rendering of the terrain surface.
 
+-----------------------+--------------------------------------------------------------------+
 | min_tile_range_factor | Determines how close you need to be to a terrain 
tile for it to    |
 |                       | display. The value is the ratio of a tile's extent 
to its          |
-|                       | For example, if a tile has a 10km radius, and the 
MTRF=6, then the |
-|                       | tile will become visible at a range of about 60km.   
              |
+|                       | For example, if a tile has a 10km radius, and the 
MTRF=7, then the |
+|                       | tile will become visible at a range of about 70km.   
              |
 
+-----------------------+--------------------------------------------------------------------+
 | min_lod               | The lowest level of detail that the terrain is 
guaranteed to       |
 |                       | display, even if no source data is available at that 
LOD. The      |
diff --git a/src/applications/osgearth_tilesource/osgearth_tilesource.cpp 
b/src/applications/osgearth_tilesource/osgearth_tilesource.cpp
index aa3ae1a..42a1cba 100644
--- a/src/applications/osgearth_tilesource/osgearth_tilesource.cpp
+++ b/src/applications/osgearth_tilesource/osgearth_tilesource.cpp
@@ -56,6 +56,7 @@ public:
     // Constructor that takes the user-provided options.
     CustomTileSource() : TileSource(TileSourceOptions())
     {
+        // Create a shape that we will use to render tile images.
         _geom = new Ring();
         _geom->push_back( osg::Vec3(5, 5, 0) );
         _geom->push_back( osg::Vec3(250, 5, 0) );
@@ -68,12 +69,25 @@ public:
     {
         if ( !getProfile() )
         {
+            // Set the profile for this tile source. The profile defines the 
+            // tiling scheme native to this tile source. The terrain engine 
will
+            // call createImage or createHeightField with TileKeys according to
+            // the profile you set here.
             setProfile( Registry::instance()->getGlobalGeodeticProfile() );
+
+            // Create custom data extents. This is optional, but giving the 
terrain
+            // engine information about the extents of your dataset will 
improve
+            // performance in most cases. In this case, the data covers the
+            // entire profile, but we want to tell the terrain engine that this
+            // tile source only has data up to LOD 15:
+            getDataExtents().push_back(DataExtent(getProfile()->getExtent(), 
0u, 15u));
         }
         return STATUS_OK;
     }
 
     // Tells the layer not to cache data from this tile source.
+    // Overriding this function is optional - by default it will inherit the 
+    // caching policy from the Layer.
     CachePolicy getCachePolicyHint(const Profile* profile) const 
     {
         return CachePolicy::NO_CACHE;
@@ -94,18 +108,26 @@ public:
 int main(int argc, char** argv)
 {
     osg::ArgumentParser arguments(&argc,argv);
-
     osgViewer::Viewer viewer(arguments);
 
-    // Start by creating the map:
-    MapOptions mapOptions;
-    mapOptions.cachePolicy() = CachePolicy::NO_CACHE;
-    Map* map = new Map( mapOptions );
+    // Start by creating an empty map:
+    Map* map = new Map();
 
     // Create out image layer with a custom tile source.
-    ImageLayerOptions options( "custom" );
     CustomTileSource* tileSource = new CustomTileSource();
-    tileSource->open();
+
+    // Open the tile source. If you don't do this, the Map will automatically 
try to 
+    // open it when you add the Layer later on. But doing so here allows us to 
check
+    // for any errors beforehand.
+    Status status = tileSource->open();
+    if (status.isError())
+    {
+        OE_WARN << "Error opening the tile source; message = " << 
status.message() << std::endl;
+        return -1;
+    }
+
+    // Add a new ImageLayer to the map with our custom tile source.
+    ImageLayerOptions options( "My custom ImageLayer" );
     map->addLayer( new ImageLayer(options, tileSource) );
 
     // That's it, the map is ready; now create a MapNode to render the Map:
diff --git a/src/osgEarth/ElevationPool.cpp b/src/osgEarth/ElevationPool.cpp
index 4606fb7..4faeb69 100644
--- a/src/osgEarth/ElevationPool.cpp
+++ b/src/osgEarth/ElevationPool.cpp
@@ -307,7 +307,7 @@ ElevationPool::getTile(const TileKey& key, MapFrame& frame, 
osg::ref_ptr<Elevati
     if ( !tile.valid() && OE_GET_TIMER(get) >= timeout )
     {
         // this means we timed out trying to fetch the map tile.
-        OE_TEST << LC << "Timout fetching tile " << key.str() << std::endl;
+        OE_TEST << LC << "Timeout fetching tile " << key.str() << std::endl;
     }
 
     if ( tile.valid() )
diff --git a/src/osgEarth/TerrainLayer.cpp b/src/osgEarth/TerrainLayer.cpp
index 8fa92ea..6e94015 100644
--- a/src/osgEarth/TerrainLayer.cpp
+++ b/src/osgEarth/TerrainLayer.cpp
@@ -380,12 +380,8 @@ TerrainLayer::open()
         }
         else
         {
-            // User supplied the tile source, so attempt to get its profile:
-            setProfile(_tileSource->getProfile() );
-            if (!_profile.valid())
-            {
-                setStatus( Status::Error(getName(), "Cannot establish 
profile") );
-            }
+            // User supplied the tile source, so attempt to initialize it:
+            _tileSource = createAndOpenTileSource();
         }
 
         // Finally, open and activate a caching bin for this layer if it
diff --git a/src/osgEarth/Units b/src/osgEarth/Units
index 0c8259f..56629cb 100644
--- a/src/osgEarth/Units
+++ b/src/osgEarth/Units
@@ -23,14 +23,6 @@
 #include <osgEarth/Config>
 #include <ostream>
 
-#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + 
__GNUC_PATCHLEVEL__)
-
-#if GCC_VERSION >= 50300
-#define OPTIMIZE __attribute__((optimize("no-ipa-sra")))
-#else
-#define OPTIMIZE
-#endif
-
 namespace osgEarth
 {
     class Registry;
@@ -113,7 +105,7 @@ namespace osgEarth
             return false;
         }
 
-        static OPTIMIZE double convert( const Units& from, const Units& to, 
double input ) {
+        static double convert( const Units& from, const Units& to, double 
input ) {
             double output = input;
             convert( from, to, input, output );
             return output;
diff --git a/src/osgEarth/Version b/src/osgEarth/Version
index 2005429..b31fdc1 100644
--- a/src/osgEarth/Version
+++ b/src/osgEarth/Version
@@ -31,7 +31,7 @@ extern "C" {
 #define OSGEARTH_MINOR_VERSION    9
 #define OSGEARTH_PATCH_VERSION    0
 #define OSGEARTH_SOVERSION        0
-#define OSGEARTH_RC_VERSION       1
+#define OSGEARTH_RC_VERSION       2
 #define OSGEARTH_DEVEL_VERSION    0     // 0 = release; >0 = interim devel 
version
 
 /* Convenience macro that can be used to decide whether a feature is present 
or not i.e.
diff --git a/src/osgEarth/catch.hpp b/src/osgEarth/catch.hpp
index 6bcdd04..f1b283d 100644
--- a/src/osgEarth/catch.hpp
+++ b/src/osgEarth/catch.hpp
@@ -4751,7 +4751,7 @@ namespace Catch {
             ss << seed;
             ss >> config.rngSeed;
             if( ss.fail() )
-                throw std::runtime_error( "Argment to --rng-seed should be the 
word 'time' or a number" );
+                throw std::runtime_error( "Argument to --rng-seed should be 
the word 'time' or a number" );
         }
     }
     inline void setVerbosity( ConfigData& config, int level ) {
diff --git a/src/osgEarthDrivers/agglite/AGGLiteRasterizerTileSource.cpp 
b/src/osgEarthDrivers/agglite/AGGLiteRasterizerTileSource.cpp
index f366afc..e2029f7 100644
--- a/src/osgEarthDrivers/agglite/AGGLiteRasterizerTileSource.cpp
+++ b/src/osgEarthDrivers/agglite/AGGLiteRasterizerTileSource.cpp
@@ -189,13 +189,21 @@ public:
 
                 if ( masterLine || f->get()->style()->has<LineSymbol>() )
                 {
-                    Feature* newFeature = new Feature( *f->get() );
-                    if ( !newFeature->getGeometry()->isLinear() )
+                    // Use the GeometryIterator to get all the geometries so 
we can clone them as rings
+                    GeometryIterator gi(f->get()->getGeometry());
+                    while (gi.hasMore())
                     {
-                        newFeature->setGeometry( 
newFeature->getGeometry()->cloneAs(Geometry::TYPE_RING) );
+                        Geometry* geom = gi.next();
+                        // Create a new feature for each geometry
+                        Feature* newFeature = new Feature(*f->get());
+                        newFeature->setGeometry(geom);
+                        if (!newFeature->getGeometry()->isLinear())
+                        {
+                            
newFeature->setGeometry(newFeature->getGeometry()->cloneAs(Geometry::TYPE_RING));
+                        }
+                        lines.push_back( newFeature );
+                        hasLine = true;
                     }
-                    lines.push_back( newFeature );
-                    hasLine = true;
                 }
 
                 // if there are no geometry symbols but there is a coverage 
symbol, default to polygons.
diff --git a/src/osgEarthDrivers/engine_mp/MPEngine.NormalMap.vert.glsl 
b/src/osgEarthDrivers/engine_mp/MPEngine.NormalMap.vert.glsl
index c7afe67..6dfd7ad 100644
--- a/src/osgEarthDrivers/engine_mp/MPEngine.NormalMap.vert.glsl
+++ b/src/osgEarthDrivers/engine_mp/MPEngine.NormalMap.vert.glsl
@@ -20,5 +20,5 @@ void oe_mp_NormalMap_vertex(inout vec4 unused)
     oe_normalMapCoords = (oe_tile_normalTexMatrix * oe_layer_tilec).st;
 
     // send the bi-normal vector to the fragment shader.
-    oe_normalMapBinormal = gl_NormalMatrix * vec3(0,1,0);
+    oe_normalMapBinormal = normalize(gl_NormalMatrix * vec3(0,1,0));
 }
diff --git a/src/osgEarthDrivers/engine_mp/MPEngine.vert.model.glsl 
b/src/osgEarthDrivers/engine_mp/MPEngine.vert.model.glsl
index 7fcae7c..d41f24c 100644
--- a/src/osgEarthDrivers/engine_mp/MPEngine.vert.model.glsl
+++ b/src/osgEarthDrivers/engine_mp/MPEngine.vert.model.glsl
@@ -17,7 +17,7 @@ void oe_mp_vertModel(inout vec4 vertexModel)
     oe_layer_texc  = gl_MultiTexCoord$MP_PRIMARY_UNIT;
     oe_layer_tilec = gl_MultiTexCoord$MP_SECONDARY_UNIT;
 
-    oe_UpVectorView = gl_NormalMatrix * oe_terrain_attr.xyz;
+    oe_UpVectorView = normalize(gl_NormalMatrix * oe_terrain_attr.xyz);
 
     // internal variable to support the oe_terrain_getElevation() SDK method
     // in the fragment shader stage
diff --git a/src/osgEarthDrivers/engine_rex/RexEngine.NormalMap.vert.glsl 
b/src/osgEarthDrivers/engine_rex/RexEngine.NormalMap.vert.glsl
index 54fc492..bf8b271 100644
--- a/src/osgEarthDrivers/engine_rex/RexEngine.NormalMap.vert.glsl
+++ b/src/osgEarthDrivers/engine_rex/RexEngine.NormalMap.vert.glsl
@@ -23,7 +23,7 @@ void oe_normalMapVertex(inout vec4 unused)
 #endif
 
     // calculate the sampling coordinates for the normal texture
-//    oe_normalMapCoords = (oe_tile_normalTexMatrix * oe_layer_tilec).st;
+    //oe_normalMapCoords = (oe_tile_normalTexMatrix * oe_layer_tilec).st;
     
     oe_normalMapCoords = oe_layer_tilec.st
         * oe_tile_elevTexelCoeff.x * oe_tile_normalTexMatrix[0][0]
@@ -31,5 +31,5 @@ void oe_normalMapVertex(inout vec4 unused)
         + oe_tile_elevTexelCoeff.y;
 
     // send the bi-normal to the fragment shader
-    oe_normalMapBinormal = gl_NormalMatrix * vec3(0,1,0);
+    oe_normalMapBinormal = normalize(gl_NormalMatrix * vec3(0,1,0));
 }
diff --git a/src/osgEarthDrivers/fastdxt/CMakeLists.txt 
b/src/osgEarthDrivers/fastdxt/CMakeLists.txt
index c90e8a4..fb35fc3 100644
--- a/src/osgEarthDrivers/fastdxt/CMakeLists.txt
+++ b/src/osgEarthDrivers/fastdxt/CMakeLists.txt
@@ -1,4 +1,4 @@
-OPTION(OSGEARTH_ENABLE_FASTDXT "Set to ON to build optional FastDXT image 
compressor." ON)
+OPTION(OSGEARTH_ENABLE_FASTDXT "Set to ON to build optional FastDXT image 
compressor." OFF)
 IF(OSGEARTH_ENABLE_FASTDXT)
 
 OPTION(CURL_IS_STATIC "on if curl is a static lib " ON)
diff --git a/src/osgEarthSymbology/Color.cpp b/src/osgEarthSymbology/Color.cpp
index ea0db27..48f9903 100644
--- a/src/osgEarthSymbology/Color.cpp
+++ b/src/osgEarthSymbology/Color.cpp
@@ -140,7 +140,7 @@ Color::Color( const std::string& input, Format format )
         c.g() |= t[e+3]<='9' ? (t[e+3]-'0')    : (10+(t[e+3]-'a'));
         c.b() |= t[e+4]<='9' ? (t[e+4]-'0')<<4 : (10+(t[e+4]-'a'))<<4;
         c.b() |= t[e+5]<='9' ? (t[e+5]-'0')    : (10+(t[e+5]-'a'));
-        if ( t.length() >= 8 ) {
+        if ( len >= 8 ) {
             c.a() = 0;
             c.a() |= t[e+6]<='9' ? (t[e+6]-'0')<<4 : (10+(t[e+6]-'a'))<<4;
             c.a() |= t[e+7]<='9' ? (t[e+7]-'0')    : (10+(t[e+7]-'a'));
diff --git a/src/osgEarthSymbology/StyleSheet b/src/osgEarthSymbology/StyleSheet
index 32d427c..ab188bb 100644
--- a/src/osgEarthSymbology/StyleSheet
+++ b/src/osgEarthSymbology/StyleSheet
@@ -56,6 +56,10 @@ namespace osgEarth { namespace Symbology
         /** Constructs a new style sheet */
         StyleSheet( const Config& conf );
 
+       /** Optional name of the style sheet */
+       optional<std::string>& name() { return _name; }
+       const optional<std::string>& name() const { return _name; }
+
         /** Gets the context for relative path resolution */
         const URIContext& uriContext() const { return _uriContext; }
 
@@ -103,6 +107,7 @@ namespace osgEarth { namespace Symbology
         virtual void mergeConfig( const Config& conf );
 
     protected:
+        optional<std::string>        _name;
         URIContext                   _uriContext;
         osg::ref_ptr<ScriptDef>      _script;
         StyleSelectorList            _selectors;
diff --git a/src/osgEarthSymbology/StyleSheet.cpp 
b/src/osgEarthSymbology/StyleSheet.cpp
index 9f3a293..4ece9b0 100644
--- a/src/osgEarthSymbology/StyleSheet.cpp
+++ b/src/osgEarthSymbology/StyleSheet.cpp
@@ -178,6 +178,7 @@ Config
 StyleSheet::getConfig() const
 {
     Config conf;
+    conf.set("name", _name);
 
     for( StyleSelectorList::const_iterator i = _selectors.begin(); i != 
_selectors.end(); ++i )
     {
@@ -226,6 +227,8 @@ StyleSheet::getConfig() const
 void
 StyleSheet::mergeConfig( const Config& conf )
 {
+    conf.getIfSet("name", _name);
+
     _uriContext = URIContext( conf.referrer() );
 
     // read in any resource library references
diff --git a/src/osgEarthUtil/MouseCoordsTool.cpp 
b/src/osgEarthUtil/MouseCoordsTool.cpp
index 5b2d348..837ad10 100644
--- a/src/osgEarthUtil/MouseCoordsTool.cpp
+++ b/src/osgEarthUtil/MouseCoordsTool.cpp
@@ -67,25 +67,6 @@ MouseCoordsTool::handle( const osgGA::GUIEventAdapter& ea, 
osgGA::GUIActionAdapt
             for( Callbacks::iterator i = _callbacks.begin(); i != 
_callbacks.end(); ++i )
                 i->get()->reset( aa.asView(), _mapNode );
         }
-
-#if 1 // testing AGL, Dist to Point
-        osg::Vec3d eye, center, up;
-        aa.asView()->getCamera()->getViewMatrixAsLookAt(eye, center, up);
-        osgUtil::LineSegmentIntersector* lsi = new 
osgUtil::LineSegmentIntersector(eye, osg::Vec3d(0,0,0));
-        osgUtil::IntersectionVisitor iv(lsi);
-        lsi->setIntersectionLimit(lsi->LIMIT_NEAREST);
-        //iv.setUserData( new Map() );
-        _mapNode->accept(iv);
-
-        if ( !lsi->getIntersections().empty() )
-        {            
-            double agl = (eye - 
lsi->getFirstIntersection().getWorldIntersectPoint()).length();
-            double dtp = (eye - world).length();
-            //OE_NOTICE << "AGL = " << agl << "m; DPT = " << dtp << "m" << 
std::endl;
-            Registry::instance()->startActivity("AGL", Stringify() << agl << " 
m");
-            Registry::instance()->startActivity("Range", Stringify() << dtp << 
" m");
-        }
-#endif
     }
 
     return false;
@@ -97,14 +78,7 @@ MouseCoordsLabelCallback::MouseCoordsLabelCallback( 
LabelControl* label, Formatt
 _label    ( label ),
 _formatter( formatter )
 {
-#if 0
-    if ( !formatter )
-    {
-        LatLongFormatter* formatter = new LatLongFormatter( 
LatLongFormatter::FORMAT_DECIMAL_DEGREES );
-        formatter->setPrecision( 5 );
-        _formatter = formatter;
-    }
-#endif
+    //nop
 }
 
 void
@@ -139,6 +113,7 @@ MouseCoordsLabelCallback::reset( osg::View* view, MapNode* 
mapNode )
     if ( _label.valid() )
     {
         _label->setText( "" );
+        _label->setText(Stringify() << "No data  |  " << 
mapNode->getMapSRS()->getName() );
     }
 }
 
diff --git a/tests/feature_mapnikvectortiles.earth 
b/tests/feature_mapnikvectortiles.earth
new file mode 100644
index 0000000..4a65c61
--- /dev/null
+++ b/tests/feature_mapnikvectortiles.earth
@@ -0,0 +1,221 @@
+<!--
+osgEarth Sample - Feature Mapnik Vector Tiles
+
+This example shows how to load a local mbtiles file that contains vector tiles.
+
+You must have the mapnik vector tiles driver built by including the protobuf 
libraries in cmake.
+
+For reference, the honolulu.mbtiles file was generated using the extract at 
https://mapzen.com/data/metro-extracts/metro/honolulu_hawaii/
+
+This was the command line used:
+
+osmium export -f geojsonseq --config=config.json honolulu_hawaii.osm.pbf | 
tippecanoe -f -pf -pk -ps -Z14 -z14 -d12 --no-tile-stats -b0 -l osm -n honolulu 
-o honolulu.mbtiles
+
+config.json was:
+{
+    "attributes": {
+        "type":      false,
+        "id":        false,
+        "version":   false,
+        "changeset": false,
+        "timestamp": false,
+        "uid":       false,
+        "user":      false,
+        "way_nodes": false
+    },
+    "linear_tags":  ["highway", "barrier", "natural=coastline"],
+    "area_tags":    ["aeroway", "amenity", "building", "landuse", "leisure", 
"man_made", "natural!=coastline"],
+    "exclude_tags": ["created_by", "source", "source:*"],
+    "include_tags": []
+}
+-->
+<map type="geocentric" version="2">
+
+    <feature_model name="osm">
+
+        <features name="osm" driver="mapnikvectortiles">
+            <url>../data/honolulu.mbtiles</url>
+        </features>
+
+        <instancing>true</instancing>
+
+        <feature_indexing enabled="false"></feature_indexing>
+
+        <styles>
+
+            <library name="us_resources">
+                <url>../data/resources/textures_us/catalog.xml</url>
+            </library>
+
+            <style type="text/css">
+                hospital {
+                     icon: "../data/hospital.png";
+                     icon-align:    center-center;
+                     icon-declutter: true;
+                     text-content:  getName();
+                     altitude-clamping:       terrain;
+                }
+
+                school {
+                     icon: "../data/school.png";
+                     icon-align:    center-center;
+                     icon-declutter: true;
+                     text-content:  getName();
+                     altitude-clamping:       terrain;
+                }
+
+                bank {
+                     icon: "../data/bank.png";
+                     icon-align:    center-center;
+                     icon-declutter: true;
+                     text-content:  getName();
+                     altitude-clamping:       terrain;
+                }
+
+                forest {
+                   model:               "../data/tree.ive";
+                   model-placement:     random;
+                   model-density:       10000;
+                   model-scale:         2.5;
+                   model-random-seed:   1;
+                   altitude-clamping:       terrain;
+                }
+
+                grass {
+                   model:               "../data/tree.ive";
+                   model-placement:     random;
+                   model-density:       10000;
+                   model-scale:         2.5;
+                   model-random-seed:   1;
+                   altitude-clamping:       terrain;
+                }
+
+                water {
+                   fill:               #6BA8FF;
+                   render-depth-test:  false;
+                   altitude-clamping:  terrain-drape;
+                }
+
+                buildings {
+                  extrusion-height:      getBuildingHeight();
+                  extrusion-flatten:     true;
+                  extrusion-wall-style:  building-wall;
+                  extrusion-roof-style:  building-rooftop;
+                  altitude-clamping:     terrain;
+                }
+
+                building-wall {
+                  skin-library:     us_resources;
+                  skin-tags:        building;
+                  skin-random-seed: 1;
+                  fill:             #ffffff;
+                }
+                building-rooftop {
+                  skin-library:     us_resources;
+                  skin-tags:        rooftop;
+                  skin-tiled:       true;
+                  skin-random-seed: 1;
+                  fill:             #ffffff;
+                }
+
+            </style>
+
+            <selector name="default" style_expr="selectStyle()"/>
+
+            <script language="javascript">
+                <![CDATA[
+
+                function selectStyle() {
+                    if ("building" in feature.properties) {
+                        return "buildings";
+                    }
+                    else if ("landuse" in feature.properties) {
+                        var landuse = feature.properties["landuse"];
+                        if ( landuse == "forest" ||
+                             landuse == "grass" ||
+                             landuse == "meadow"
+                            ) {
+                                return "forest";
+                            }
+                        else if (landuse == "reservoir") {
+                            return "water";
+                        }
+                    }
+                    else if ("natural" in feature.properties) {
+                        var natural = feature.properties["natural"];
+                        if (natural == "wood" || natural == "tree") {
+                            return "forest"
+                        }
+                        else if (natural == "water") {
+                            return "water";
+                        }
+                    }
+                    else if ("surface" in feature.properties) {
+                        var surface = feature.properties["surface"];
+                        if (surface == "grass") {
+                            return "grass";
+                        }
+                    }
+                    else if ("amenity" in feature.properties) {
+                        var amenity = feature.properties["amenity"];
+                        if (amenity == "hospital") {
+                            return "hospital";
+                        }
+                        else if (amenity == "school") {
+                            return "school";
+                        }
+                        else if (amenity == "bank") {
+                            return "bank";
+                        }
+                    }
+                    return null;
+                }
+
+                function getName() {
+                    if ("name" in feature.properties) {
+                        return feature.properties["name"];
+                    }
+                    return "";
+                }
+
+                function getBuildingHeight() {
+                                       if ("height" in feature.properties) {
+                                               var h = 
feature.properties["height"].replace('m','');
+                                               return Math.max(h, 4.0);
+                                       } else if ("building:height" in 
feature.properties) {
+                                               var h = 
feature.properties["building:height"].replace('m','');
+                                               return Math.max(h, 4.0);
+                                       } else if ("building:levels" in 
feature.properties){
+                                               var l = 
feature.properties["building:levels"];
+                                               return Math.max(l * 4.0, 4.0);
+                                       }
+                                       return Math.floor((Math.random() * 5.0) 
+ 4.0);
+                }
+              ]]>
+            </script>
+
+        </styles>
+    </feature_model>
+
+    <image name="esri imagery" driver="arcgis">
+        
<url>http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer</url>
+        
<nodata_image>http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer/tile/100/0/0.jpeg</nodata_image>
+    </image>
+
+    <elevation name="readymap_elevation" driver="tms">
+        <url>http://readymap.org/readymap/tiles/1.0.0/116/</url>
+    </elevation>
+
+    <viewpoints>
+      <viewpoint>
+        <name>Honolulu</name>
+        <heading>-22.7465</heading>
+        <pitch>-5.28948</pitch>
+        <range>7310.49m</range>
+        <long>-157.8255773676917</long>
+        <lat>21.28116313649227</lat>
+        <height>10.88873224053532</height>
+      </viewpoint>
+    </viewpoints>
+
+</map>

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-grass/osgearth.git

_______________________________________________
Pkg-grass-devel mailing list
Pkg-grass-devel@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

Reply via email to