Пример #1
0
        static BuildLayerSlice decodeSlice(XmlElement e, Project proj)
        {
            BuildLayerSlice slice = null;

            if (e != null)
            {
                slice = new BuildLayerSlice();

                if (!string.IsNullOrEmpty(e.GetAttribute("min_range")))
                {
                    slice.setMinRange(float.Parse(e.GetAttribute("min_range")));
                }
                if (!string.IsNullOrEmpty(e.GetAttribute("max_range")))
                {
                    slice.setMaxRange(float.Parse(e.GetAttribute("max_range")));
                }

#if TODO_DANI
                // required filter graph:
                string graph = e.GetAttribute("graph");
                slice.setFilterGraph(proj.getFilterGraph(graph)); //TODO: warning?
#endif

                // optional source:
                slice.setSource(proj.getSource(e.GetAttribute("source")));

#if TODO_DANI
                // properties particular to this slice:
                XmlNodeList props = e.GetElementsByTagName("property");
                foreach (XmlNode i in props)
                {
                    XmlElement k_e   = (XmlElement)i;
                    string     name  = k_e.GetAttribute("name");
                    string     value = k_e.GetAttribute("value");
                    slice.getProperties().Add(new Property(name, value));
                }
#endif

                // now decode sub-slices:
                XmlNodeList slices = e.GetElementsByTagName("slice");
                foreach (XmlNode i in slices)
                {
                    BuildLayerSlice child = decodeSlice((XmlElement)i, proj);
                    if (child != null)
                    {
                        slice.getSubSlices().Add(child);
                    }
                }
            }
            return(slice);
        }
Пример #2
0
        static XmlElement encodeSlice(XmlDocument doc, BuildLayerSlice slice)
        {
            XmlElement e = null;

            if (slice != null)
            {
                e = doc.CreateElement("slice");
                if (slice.getMinRange() > 0)
                {
                    Property p = new Property("ignore", slice.getMinRange());
                    e.SetAttribute("min_range", p.getValue());
                }
                if (slice.getMaxRange() < float.MaxValue)
                {
                    Property p = new Property("ignore", slice.getMaxRange());
                    e.SetAttribute("max_range", p.getValue());
                }
                e.SetAttribute("graph", slice.getFilterGraph().getName());

                if (slice.getSource() != null)
                {
                    e.SetAttribute("source", slice.getSource().getName());
                }

                foreach (Property it in slice.getProperties())
                {
                    e.AppendChild(encodeProperty(doc, it));
                }

                foreach (BuildLayerSlice it in slice.getSubSlices())
                {
                    e.AppendChild(encodeSlice(doc, it));
                }
            }
            return(e);
        }
Пример #3
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);
        }
Пример #4
0
        static BuildLayer decodeLayer(XmlElement e, Project proj)
        {
            BuildLayer layer = null;

            if (e != null)
            {
                layer = new BuildLayer();

#if TODO_DANI
                layer.setBaseURI(proj.getBaseURI());
#endif

                layer.setName(e.GetAttribute("name"));

                string type = e.GetAttribute("type");
                if (type == "correlated")
                {
                    layer.setType(BuildLayer.LayerType.TYPE_CORRELATED);
                }
                else if (type == "gridded")
                {
                    layer.setType(BuildLayer.LayerType.TYPE_GRIDDED);
                }
                else if (type == "quadtree" || type == "new")
                {
                    layer.setType(BuildLayer.LayerType.TYPE_QUADTREE);
                }

                string source = e.GetAttribute("source");
                layer.setSource(proj.getSource(source));

                string terrain = e.GetAttribute("terrain");
                layer.setTerrain(proj.getTerrain(terrain));

                layer.setTargetPath(e.GetAttribute("target"));

                XmlNodeList slices = e.GetElementsByTagName("slice");
                foreach (XmlNode i in slices)
                {
                    BuildLayerSlice slice = decodeSlice((XmlElement)i, proj);
                    if (slice != null)
                    {
                        layer.getSlices().Add(slice);
                    }
                }

#if TODO_DANI
                XmlNodeList props = e.GetElementsByTagName("property");
                foreach (XmlNode i in props)
                {
                    XmlElement k_e   = (XmlElement)i;
                    string     name  = k_e.GetAttribute("name");
                    string     value = k_e.GetAttribute("value");
                    layer.getProperties().Add(new Property(name, value));
                }

                XmlNodeList env_props = e.GetElementsByTagName("env_property");
                foreach (XmlNode i in env_props)
                {
                    XmlElement k_e   = (XmlElement)i;
                    string     name  = k_e.GetAttribute("name");
                    string     value = k_e.GetAttribute("value");
                    layer.getEnvProperties().Add(new Property(name, value));
                }
#endif
            }
            return(layer);
        }