public MapLayerCompiler(MapLayer _layer, Session _session)
 {
     map_layer = _layer;
     session = _session;
     paged = true;
     depth_first = true;
 }
Esempio n. 2
0
 public SimpleMapLayerCompiler(MapLayer map_layer, Session session) :
     base(map_layer, session)
 {
 }
Esempio n. 3
0
 /**
  * Constructs a new compiler.
  *
  * @param map_layer
  *      Layer that we are going to compile.
  *
  * @param session
  *      Session under which to compiler the map layer
  */
 public SimpleMapLayerCompiler(MapLayer map_layer)
     : this(map_layer, null)
 {
 }
 public SimpleMapLayerCompiler(MapLayer map_layer, Session session)
     : base(map_layer, session)
 {
 }
 static MapLayerLevelOfDetail getLodForKey(uint key, MapLayer map_layer)
 {
     uint level = 0;
     foreach (MapLayerLevelOfDetail i in map_layer.getLevels())
     {
         if (key == level)
             return i;
     }
     return null;
 }
Esempio n. 6
0
 public QuadTreeMapLayerCompiler(MapLayer _layer, Session _session)
     : base(_layer, _session)
 {
     //NOP
 }
Esempio n. 7
0
 /**
  * Constructs a new compiler.
  *
  * @param map_layer
  *      Layer that we are going to compile.
  *
  * @param session
  *      Session under which to compiler the map layer
  */
 public QuadTreeMapLayerCompiler(MapLayer map_layer) : this(map_layer, null)
 {
 }
 public QuadTreeMapLayerCompiler(MapLayer _layer, Session _session)
     : base(_layer, _session)
 {
     //NOP
 }
Esempio n. 9
0
        /*** Class methods ***************************************************/



        bool Builder.addSlicesToMapLayer(BuildLayerSliceList slices,
                                         Properties env_properties,
                                         MapLayer map_layer,
                                         ResourcePackager default_packager,
                                         uint depth,
                                         Session session,
                                         Source parent_source)
        {
            foreach (BuildLayerSlice i in slices)
            {
                BuildLayerSlice slice = i;

                if (slice.getSource() != null && !build(slice.getSource(), session))
                {
                    // osgGIS.warn()
                    //    << "Unable to build source \"" << slice.getSource().getName() << "\" or one of its dependencies."
                    //    << std.endl;
                    return(false);
                }

                Source slice_source = slice.getSource() != null?slice.getSource() : parent_source;

                ResourcePackager packager = default_packager ? default_packager.clone() : null;
                if (packager != null)
                {
                    packager.setMaxTextureSize(
                        slice.getProperties().getIntValue("max_texture_size", default_packager.getMaxTextureSize()));
                    packager.setCompressTextures(
                        slice.getProperties().getBoolValue("compress_textures", default_packager.getCompressTextures()));
                    packager.setInlineTextures(
                        slice.getProperties().getBoolValue("inline_textures", default_packager.getInlineTextures()));
                }

                if (slice_source != null)
                {
                    FeatureLayer feature_layer = Registry.instance().createFeatureLayer(
                        slice_source.getAbsoluteURI());

                    if (feature_layer == null)
                    {
                        //osgGIS.warn() << "Cannot access source \"" << slice_source.getName() << std.endl;
                        return(false);
                    }

                    map_layer.push(
                        feature_layer,
                        slice.getFilterGraph(),
                        env_properties,
                        packager.get(),
                        slice.getMinRange(),
                        slice.getMaxRange(),
                        true,
                        depth,
                        null);
                }

                // now add any sub-slice children:
                if (!addSlicesToMapLayer(slice.getSubSlices(), env_properties, map_layer, packager.get(), depth + 1, session, slice_source))
                {
                    return(false);
                }
            }

            return(true);
        }
Esempio n. 10
0
        /*** Class methods ***************************************************/
        bool Builder.addSlicesToMapLayer(BuildLayerSliceList slices,
            Properties env_properties,
            MapLayer map_layer,
            ResourcePackager default_packager,
            uint depth,
            Session session,
            Source parent_source)
        {
            foreach (BuildLayerSlice i in slices)
            {
                BuildLayerSlice slice = i;

                if (slice.getSource() != null && !build(slice.getSource(), session))
                {
                    // osgGIS.warn()
                    //    << "Unable to build source \"" << slice.getSource().getName() << "\" or one of its dependencies."
                    //    << std.endl;
                    return false;
                }

                Source slice_source = slice.getSource() != null ? slice.getSource() : parent_source;

                ResourcePackager packager = default_packager ? default_packager.clone() : null;
                if (packager != null)
                {
                    packager.setMaxTextureSize(
                        slice.getProperties().getIntValue("max_texture_size", default_packager.getMaxTextureSize()));
                    packager.setCompressTextures(
                        slice.getProperties().getBoolValue("compress_textures", default_packager.getCompressTextures()));
                    packager.setInlineTextures(
                        slice.getProperties().getBoolValue("inline_textures", default_packager.getInlineTextures()));
                }

                if (slice_source != null)
                {
                    FeatureLayer feature_layer = Registry.instance().createFeatureLayer(
                        slice_source.getAbsoluteURI());

                    if (feature_layer == null)
                    {
                        //osgGIS.warn() << "Cannot access source \"" << slice_source.getName() << std.endl;
                        return false;
                    }

                    map_layer.push(
                        feature_layer,
                        slice.getFilterGraph(),
                        env_properties,
                        packager.get(),
                        slice.getMinRange(),
                        slice.getMaxRange(),
                        true,
                        depth,
                        null);
                }

                // now add any sub-slice children:
                if (!addSlicesToMapLayer(slice.getSubSlices(), env_properties, map_layer, packager.get(), depth + 1, session, slice_source))
                {
                    return false;
                }
            }

            return true;
        }
Esempio n. 11
0
 private bool addSlicesToMapLayer(
     BuildLayerSliceList slices,
     Properties env_props,
     MapLayer map_layer,
     ResourcePackager default_packager,
     uint lod,
     Session session,
     Source source);
Esempio n. 12
0
        protected bool build(BuildLayer layer)
        {
            string work_dir_name = project.getAbsoluteWorkingDirectory();
            if ( string.IsNullOrEmpty(work_dir_name) )
            work_dir_name = "work_" + project.getName();

             string work_dir = PathUtils.combinePaths(
            project.getBaseURI(),
            work_dir_name );

            if ( osgDB.makeDirectory( work_dir ) )
            {
            Registry.instance().setWorkDirectory( work_dir );
            }

            //osgGIS.notice() << "Building layer \"" << layer.getName() << "\"." << std.endl;

            // first create and initialize a Session that will share data across the build.
             Session  session = new Session();

            // add shared scripts to the session:
            foreach( Script  i in project.getScripts())
            session.addScript( i );

            // add shared resources to the session:
            foreach( Resource i in project.getResources() )
            session.getResources().addResource( i );

            // now establish the source data record form this layer and open a feature layer
            // that connects to that source.
            Source  source = layer.getSource(); // default source.. may be overriden in slices
            //if ( !source )
            //{
            //    //TODO: log error
            //    osgGIS.notify( osg.WARN )
            //        << "No source specified for layer \"" << layer.getName() << "\"." << std.endl;
            //    return false;
            //}

            // recursively build any sources that need building.
            if ( source && !build( source, session.get() ) )
            {
               // osgGIS.warn()
               //    << "Unable to build source \"" << source.getName() << "\" or one of its dependencies."
               //     << std.endl;
            return false;
            }

             FeatureLayer  feature_layer;

            if ( source != null)
            {
            feature_layer = Registry.instance().createFeatureLayer( source.getAbsoluteURI() );

            if ( feature_layer == null )
            {
            //TODO: log error
            //osgGIS.warn()
            //    << "Cannot access source \"" << source.getName()
            //    << "\" for layer \"" << layer.getName() << "\"." << std.endl;
            return false;
            }
            }

            // The reference terrain:
             osg.Node         terrain_node;
             SpatialReference  terrain_srs;
            GeoExtent                      terrain_extent;

            Terrain  terrain = layer.getTerrain();
            if ( !getTerrainData( terrain, terrain_node, terrain_srs, terrain_extent ) )
            return false;

            // output file:
             string output_file = layer.getAbsoluteTargetPath();
            osgDB.makeDirectoryForFile( output_file );
            if ( !osgDB.fileExists( osgDB.getFilePath( output_file ) ) )
            {
            //osgGIS.warn()
            //    << "Unable to establish target location for layer \""
            //    << layer.getName() << "\" at \"" << output_file << "\"."
            //    << std.endl;
            return false;
            }

            // whether to include textures in IVE files:
            bool inline_ive_textures = layer.getProperties().getBoolValue( "inline_textures", false );

            // TODO: deprecate this as we move towards the ResourcePackager...
            osgDB.ReaderWriter.Options  options;
            if ( inline_ive_textures )
            {
            options = new osgDB.ReaderWriter.Options( "noWriteExternalReferenceFiles useOriginalExternalReferences" );
            }
            else
            {
            options = new osgDB.ReaderWriter.Options( "noTexturesInIVEFile noWriteExternalReferenceFiles useOriginalExternalReferences" );
            }

            osgDB.Registry.instance().setOptions( options );

            osgDB.Archive archive;
            string archive_file = output_file;

            if ( osgDB.getLowerCaseFileExtension( output_file ) == "osga" )
            {
            archive = osgDB.openArchive( output_file, osgDB.Archive.CREATE, 4096 );
            output_file = "out.ive";

            // since there's no way to set the master file name...fake it out
            osg.Group dummy = new osg.Group();
            archive.writeNode( dummy , output_file );
            }

            // intialize a task manager if necessary:
            TaskManager manager =
            num_threads > 1? new TaskManager( num_threads ) :
            num_threads < 1? new TaskManager() :
            null;

            // prep the map layer definition:
             MapLayer  map_layer = new MapLayer();

            // a resource packager if necessary will copy ext-ref files to the output location:
            ResourcePackager     packager = new ResourcePackager();
            packager.setArchive( archive.get() );
            packager.setOutputLocation( osgDB.getFilePath( output_file ) );

            if ( layer.getProperties().getBoolValue( "localize_resources", false ) )
            {
            packager.setMaxTextureSize( layer.getProperties().getIntValue( "max_texture_size", 0 ) );
            packager.setCompressTextures( layer.getProperties().getBoolValue( "compress_textures", false ) );
            packager.setInlineTextures( layer.getProperties().getBoolValue( "inline_textures", false ) );
            }

            if ( !addSlicesToMapLayer( layer.getSlices(), layer.getEnvProperties(), map_layer, packager, 0, session, source ) )
            {
            //osgGIS.warn() << "Failed to add all slices to layer " << layer.getName() << std.endl;
            return false;
            }

            // calculate the grid cell size:
            double col_size = layer.getProperties().getDoubleValue( "col_size", -1.0 );
            double row_size = layer.getProperties().getDoubleValue( "row_size", -1.0 );
            if ( col_size <= 0.0 || row_size <= 0.0 )
            {
            int num_cols = Math.Max( 1, layer.getProperties().getIntValue( "num_cols", 1 ) );
            int num_rows = Math.Max(1, layer.getProperties().getIntValue("num_rows", 1));
            col_size = map_layer.getAreaOfInterest().getWidth() / (double)num_cols;
            row_size = map_layer.getAreaOfInterest().getHeight() / (double)num_rows;
            }
            map_layer.setCellWidth( col_size );
            map_layer.setCellHeight( row_size );
            map_layer.setEncodeCellRadius( layer.getProperties().getBoolValue( "encode_cell_radius", true ) );

            MapLayerCompiler compiler;

            // figure out which compiler to use:
            if ( layer.getType() == BuildLayer.LayerType.TYPE_QUADTREE )
            {
            compiler = new QuadTreeMapLayerCompiler( map_layer, session );
            }
            else if (layer.getType() == BuildLayer.LayerType.TYPE_GRIDDED)
            {
            compiler = new GriddedMapLayerCompiler( map_layer.get(), session. );
            }
            else if (layer.getType() == BuildLayer.LayerType.TYPE_SIMPLE)
            {
            compiler = new SimpleMapLayerCompiler( map_layer, session );
            }

            if ( compiler.get() )
            {
            compiler.setAbsoluteOutputURI( output_file );
            compiler.setPaged( layer.getProperties().getBoolValue( "paged", true ) );
            compiler.setTerrain( terrain_node.get(), terrain_srs, terrain_extent );
            compiler.setArchive( archive.get(), archive_file );
            compiler.setResourcePackager( packager.get() );

            // build the layer and write the root file to output:
               osg.Group result = compiler.compile( manager.get() );

            if ( result != null )
            {
            packager.packageNode( result.get(), output_file );
            }
            }

            if ( archive != null )
            {
            archive.close();
            }

            //osgGIS.notice() << "Done building layer \"" << layer.getName() << "\"." << std.endl;

            return true;
        }
 static uint getTopLod(QuadMap qmap, MapLayer map_layer)
 {
     int bottom_lod = qmap.getBestLodForCellsOfSize(map_layer.getCellWidth(), map_layer.getCellHeight());
     uint max_depth = map_layer.getMaxDepth();
     long top_lod = Math.Max(0, bottom_lod - max_depth);
     return (uint)top_lod;
 }
 static MapLayerLevelOfDetail getDefinition(QuadKey key, MapLayer map_layer)
 {
     uint top_lod = getTopLod(key.getMap(), map_layer);
     uint depth_to_find = key.getLOD() - top_lod;
     foreach (MapLayerLevelOfDetail i in map_layer.getLevels())
     {
         if (i.getDepth() == depth_to_find)
             return i;
     }
     return null;
 }
Esempio n. 15
0
 /**
  * Constructs a new map layer compiler.
  *
  * @param map_layer
  *      Layer that we are going to compile.
  *
  * @param session
  *      Session under which to compiler the map layer
  */
 public MapLayerCompiler(MapLayer map_layer)
     : this(map_layer, null)
 {
 }
Esempio n. 16
0
        protected bool build(BuildLayer layer)
        {
            string work_dir_name = project.getAbsoluteWorkingDirectory();

            if (string.IsNullOrEmpty(work_dir_name))
            {
                work_dir_name = "work_" + project.getName();
            }

            string work_dir = PathUtils.combinePaths(
                project.getBaseURI(),
                work_dir_name);

            if (osgDB.makeDirectory(work_dir))
            {
                Registry.instance().setWorkDirectory(work_dir);
            }

            //osgGIS.notice() << "Building layer \"" << layer.getName() << "\"." << std.endl;

            // first create and initialize a Session that will share data across the build.
            Session session = new Session();

            // add shared scripts to the session:
            foreach (Script i in project.getScripts())
            {
                session.addScript(i);
            }

            // add shared resources to the session:
            foreach (Resource i in project.getResources())
            {
                session.getResources().addResource(i);
            }

            // now establish the source data record form this layer and open a feature layer
            // that connects to that source.
            Source source = layer.getSource(); // default source.. may be overriden in slices

            //if ( !source )
            //{
            //    //TODO: log error
            //    osgGIS.notify( osg.WARN )
            //        << "No source specified for layer \"" << layer.getName() << "\"." << std.endl;
            //    return false;
            //}



            // recursively build any sources that need building.
            if (source && !build(source, session.get()))
            {
                // osgGIS.warn()
                //    << "Unable to build source \"" << source.getName() << "\" or one of its dependencies."
                //     << std.endl;
                return(false);
            }

            FeatureLayer feature_layer;

            if (source != null)
            {
                feature_layer = Registry.instance().createFeatureLayer(source.getAbsoluteURI());

                if (feature_layer == null)
                {
                    //TODO: log error
                    //osgGIS.warn()
                    //    << "Cannot access source \"" << source.getName()
                    //    << "\" for layer \"" << layer.getName() << "\"." << std.endl;
                    return(false);
                }
            }

            // The reference terrain:
            osg.Node         terrain_node;
            SpatialReference terrain_srs;
            GeoExtent        terrain_extent;

            Terrain terrain = layer.getTerrain();

            if (!getTerrainData(terrain, terrain_node, terrain_srs, terrain_extent))
            {
                return(false);
            }

            // output file:
            string output_file = layer.getAbsoluteTargetPath();

            osgDB.makeDirectoryForFile(output_file);
            if (!osgDB.fileExists(osgDB.getFilePath(output_file)))
            {
                //osgGIS.warn()
                //    << "Unable to establish target location for layer \""
                //    << layer.getName() << "\" at \"" << output_file << "\"."
                //    << std.endl;
                return(false);
            }

            // whether to include textures in IVE files:
            bool inline_ive_textures = layer.getProperties().getBoolValue("inline_textures", false);

            // TODO: deprecate this as we move towards the ResourcePackager...
            osgDB.ReaderWriter.Options options;
            if (inline_ive_textures)
            {
                options = new osgDB.ReaderWriter.Options("noWriteExternalReferenceFiles useOriginalExternalReferences");
            }
            else
            {
                options = new osgDB.ReaderWriter.Options("noTexturesInIVEFile noWriteExternalReferenceFiles useOriginalExternalReferences");
            }

            osgDB.Registry.instance().setOptions(options);


            osgDB.Archive archive;
            string        archive_file = output_file;

            if (osgDB.getLowerCaseFileExtension(output_file) == "osga")
            {
                archive     = osgDB.openArchive(output_file, osgDB.Archive.CREATE, 4096);
                output_file = "out.ive";

                // since there's no way to set the master file name...fake it out
                osg.Group dummy = new osg.Group();
                archive.writeNode(dummy, output_file);
            }

            // intialize a task manager if necessary:
            TaskManager manager =
                num_threads > 1? new TaskManager(num_threads) :
                num_threads < 1? new TaskManager() :
                null;



            // prep the map layer definition:
            MapLayer map_layer = new MapLayer();

            // a resource packager if necessary will copy ext-ref files to the output location:
            ResourcePackager packager = new ResourcePackager();

            packager.setArchive(archive.get());
            packager.setOutputLocation(osgDB.getFilePath(output_file));

            if (layer.getProperties().getBoolValue("localize_resources", false))
            {
                packager.setMaxTextureSize(layer.getProperties().getIntValue("max_texture_size", 0));
                packager.setCompressTextures(layer.getProperties().getBoolValue("compress_textures", false));
                packager.setInlineTextures(layer.getProperties().getBoolValue("inline_textures", false));
            }

            if (!addSlicesToMapLayer(layer.getSlices(), layer.getEnvProperties(), map_layer, packager, 0, session, source))
            {
                //osgGIS.warn() << "Failed to add all slices to layer " << layer.getName() << std.endl;
                return(false);
            }

            // calculate the grid cell size:
            double col_size = layer.getProperties().getDoubleValue("col_size", -1.0);
            double row_size = layer.getProperties().getDoubleValue("row_size", -1.0);

            if (col_size <= 0.0 || row_size <= 0.0)
            {
                int num_cols = Math.Max(1, layer.getProperties().getIntValue("num_cols", 1));
                int num_rows = Math.Max(1, layer.getProperties().getIntValue("num_rows", 1));
                col_size = map_layer.getAreaOfInterest().getWidth() / (double)num_cols;
                row_size = map_layer.getAreaOfInterest().getHeight() / (double)num_rows;
            }
            map_layer.setCellWidth(col_size);
            map_layer.setCellHeight(row_size);
            map_layer.setEncodeCellRadius(layer.getProperties().getBoolValue("encode_cell_radius", true));


            MapLayerCompiler compiler;

            // figure out which compiler to use:
            if (layer.getType() == BuildLayer.LayerType.TYPE_QUADTREE)
            {
                compiler = new QuadTreeMapLayerCompiler(map_layer, session);
            }
            else if (layer.getType() == BuildLayer.LayerType.TYPE_GRIDDED)
            {
                compiler = new GriddedMapLayerCompiler(map_layer.get(), session.);
            }
            else if (layer.getType() == BuildLayer.LayerType.TYPE_SIMPLE)
            {
                compiler = new SimpleMapLayerCompiler(map_layer, session);
            }

            if (compiler.get())
            {
                compiler.setAbsoluteOutputURI(output_file);
                compiler.setPaged(layer.getProperties().getBoolValue("paged", true));
                compiler.setTerrain(terrain_node.get(), terrain_srs, terrain_extent);
                compiler.setArchive(archive.get(), archive_file);
                compiler.setResourcePackager(packager.get());

                // build the layer and write the root file to output:
                osg.Group result = compiler.compile(manager.get());

                if (result != null)
                {
                    packager.packageNode(result.get(), output_file);
                }
            }

            if (archive != null)
            {
                archive.close();
            }

            //osgGIS.notice() << "Done building layer \"" << layer.getName() << "\"." << std.endl;

            return(true);
        }
        protected const float MY_PRIORITY_SCALE = 1.0f; //0.5f

        #endregion Fields

        #region Constructors

        /**
         * Constructs a new compiler.
         *
         * @param map_layer
         *      Layer that we are going to compile.
         *
         * @param session
         *      Session under which to compiler the map layer
         */
        public QuadTreeMapLayerCompiler(MapLayer map_layer)
            : this(map_layer, null)
        {
        }