示例#1
0
        protected virtual uint queueTasks(Profile profile, TaskManager task_man)
        {
            uint level = 0;

            foreach (MapLayerLevelOfDetail i in map_layer.getLevels())
            {
                MapLayerLevelOfDetail level_def = i;

                string s = level.ToString();

                FilterEnv cell_env = getSession().createFilterEnv();
                cell_env.setExtent(map_layer.getAreaOfInterest()); //GeoExtent.infinite() );
                cell_env.setTerrainNode(getTerrainNode());
                cell_env.setTerrainSRS(getTerrainSRS());
                foreach (Property prop in level_def.getEnvProperties())
                {
                    cell_env.setProperty(prop);
                }

                Task task = new CellCompiler(s,
                                             s,
                                             level_def.getFeatureLayer(),
                                             level_def.getFilterGraph(),
                                             level_def.getMinRange(),
                                             level_def.getMaxRange(),
                                             cell_env,
                                             null, null, null);

                task_man.queueTask(task);
            }
            return(level);
        }
示例#2
0
        public virtual bool continueCompiling(CompileSession cs_interface)
        {
            CompileSessionImpl cs = (CompileSessionImpl)cs_interface;

            cs.clearTaskQueue();

            if (cs.getTaskManager().wait(1000L))
            {
                Task completed_task = cs.getTaskManager().getNextCompletedTask();
                if (completed_task != null)
                {
                    CellCompiler cell_compiler = (CellCompiler)completed_task;
                    if (cell_compiler.isInExceptionState())
                    {
                        //TODO: replace this with Report facility
                        //osgGIS.notify( osg.WARN ) << "ERROR: cell failed; unhandled exception state."
                        //    << std.endl;
                        cs.getTaskQueue().Enqueue(cell_compiler);
                    }
                    else if (cell_compiler.getResult().isOK())
                    {
                        cell_compiler.runSynchronousPostProcess(cs.getReport());

                        // give the layer compiler an opportunity to do something:
                        processCompletedTask(cell_compiler);

                        // record the completed task to the caller can see it
                        cs.getTaskQueue().Enqueue(cell_compiler);

                        uint total_tasks     = cs.getTotalTasks();
                        uint tasks_completed = total_tasks - cs.getTaskManager().getNumTasks();

                        float p              = 100.0f * (float)tasks_completed / (float)total_tasks;
                        float elapsed        = (float)cs.getElapsedTimeSeconds();
                        float avg_task_time  = elapsed / (float)tasks_completed;
                        float time_remaining = ((float)total_tasks - (float)tasks_completed) * avg_task_time;

                        uint hrs, mins, secs;
                        TimeUtils.getHMSDuration(time_remaining, hrs, mins, secs);

                        //char buf[10];
                        //sprintf( buf, "%02d:%02d:%02d", hrs, mins, secs );
                        // osgGIS.notify(osg.NOTICE) << tasks_completed << "/" << total_tasks
                        //     << " tasks (" << (int)p << "%) complete, "
                        //     << buf << " remaining" << std.endl;
                    }
                    else
                    {
                        //TODO: replace this with Report facility
                        //osgGIS.notify( osg.WARN ) << "ERROR: compilation of cell "
                        //     << cell_compiler.getName() << " failed : "
                        //     << cell_compiler.getResult().getMessage()
                        //     << std.endl;
                    }
                }
            }

            return(cs.getTaskManager().hasMoreTasks());
        }
示例#3
0
        protected virtual void processCompletedTask(CellCompiler task)
        {
            if (task.getResult().isOK() && task.getResultNode())
            {
                if (!lod.valid())
                {
                    lod = new osg.LOD();
                }

                uint key = uint.Parse(task.getName());
                MapLayerLevelOfDetail def = getLodForKey(key, getMapLayer());
                if (def != null)
                {
                    lod.addChild(task.getResultNode(), def.getMinRange(), def.getMaxRange());
                }
            }
        }
示例#4
0
        protected Task createQuadKeyTask(QuadKey key)
        {
            // construct a filter environment template to use for all tasks:
            FilterEnv cell_env = getSession().createFilterEnv();

            cell_env.setTerrainNode(getTerrainNode());
            cell_env.setTerrainSRS(getTerrainSRS());

            string abs_path = createAbsPathFromTemplate("g" + key.toString());

            Task task = null;

            MapLayerLevelOfDetail def = getDefinition(key.createParentKey(), map_layer);

            if (def != null)
            {
                cell_env.setInputSRS(def.getFeatureLayer().getSRS());
                cell_env.setExtent(map_layer.getAreaOfInterest().getSRS().transform(key.getExtent()));
                cell_env.setProperty(new Property("compiler.cell_id", key.toString()));
                foreach (Property i in def.getEnvProperties())
                {
                    cell_env.setProperty(i);
                }

                task = new CellCompiler(
                    key.toString(),
                    abs_path,
                    def.getFeatureLayer(),
                    def.getFilterGraph(),
                    def.getMinRange(),
                    def.getMaxRange(),
                    cell_env,
                    def.getResourcePackager() ? def.getResourcePackager() : resource_packager.get(),
                    getArchive(),
                    def.getUserData());

                // osgGIS.info()
                //    << "Task: Key = " << key.toString() << ", LOD = " << key.getLOD() << ", Extent = " << key.getExtent().toString()
                //    << " (w=" << key.getExtent().getWidth() << ", h=" << key.getExtent().getHeight() << ")"
                //    << std.endl;
            }

            return(task);
        }
示例#5
0
 protected virtual void processCompletedTask(CellCompiler compiler)
 {
 }