This file is indexed.

/usr/include/osgEarthFeatures/FeatureTileSource is in libosgearth-dev 2.9.0+dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/* -*-c++-*- */
/* osgEarth - Dynamic map generation toolkit for OpenSceneGraph
 * Copyright 2016 Pelican Mapping
 * http://osgearth.org
 *
 * osgEarth is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 */

#ifndef OSGEARTHFEATURES_FEATURE_TILE_SOURCE_H
#define OSGEARTHFEATURES_FEATURE_TILE_SOURCE_H 1

#include <osgEarthFeatures/Common>
#include <osgEarthFeatures/FeatureSource>
#include <osgEarthSymbology/StyleSheet>
#include <osgEarth/TileSource>
#include <osgEarth/Map>
#include <osg/Node>
#include <osgDB/ReaderWriter>
#include <list>

namespace osgEarth { namespace Features
{
    using namespace osgEarth;
    using namespace osgEarth::Symbology;

    class OSGEARTHFEATURES_EXPORT FeatureTileSourceOptions : public TileSourceOptions
    {
    public: // serializable properties

        optional<FeatureSourceOptions>& featureOptions() { return _featureOptions; }
        const optional<FeatureSourceOptions>& featureOptions() const { return _featureOptions; }

        osg::ref_ptr<StyleSheet>& styles() { return _styles; }
        const osg::ref_ptr<StyleSheet>& styles() const { return _styles; }

        //TODO: deprecate in favor of convert filter
        optional<Geometry::Type>& geometryTypeOverride() { return _geomTypeOverride; }
        const optional<Geometry::Type>& geometryTypeOverride() const { return _geomTypeOverride; }

    public:
        /** A live feature source instance to use. Note, this does not serialize. */
        osg::ref_ptr<FeatureSource>& featureSource() { return _featureSource; }
        const osg::ref_ptr<FeatureSource>& featureSource() const { return _featureSource; }

        FeatureTileSourceOptions( const ConfigOptions& rhs =ConfigOptions() );

        virtual ~FeatureTileSourceOptions() { }

    public:
        virtual Config getConfig() const;

    protected:
        virtual void mergeConfig( const Config& conf );

        optional<FeatureSourceOptions> _featureOptions;
        osg::ref_ptr<StyleSheet>       _styles;
        optional<Geometry::Type>       _geomTypeOverride;
        osg::ref_ptr<FeatureSource>    _featureSource;

    private:
        void fromConfig( const Config& conf );
    };


    /**
     * A TileSource that renders Feature data from a FeatureSource. An implementation of
     * this base class will render image or heightfield tiles from feature data.
     */
    class OSGEARTHFEATURES_EXPORT FeatureTileSource : public TileSource
    {
    public:      
        /**
         * Constructs a new feature tile source with the provided options.
         */
        FeatureTileSource( const TileSourceOptions& options =TileSourceOptions() );

        //override
        virtual Status initialize( const osgDB::Options* options );

        //override
        virtual osg::Image* createImage(
            const TileKey&        key,
            ProgressCallback*     progress );

    public: // properties:

        /** The underlying feature source. */
        FeatureSource* getFeatureSource() { return _features.get(); }

        /** Sets the source from which to read feature data. It is only legal to call this method
            before this TileSource has been initialized by the map engine. Afterwards it will have
            no effect. */
        void setFeatureSource( FeatureSource* source );

    protected:

        /** Custom image allocation bu the subclass. Default image is getPixelsPerTile() RGBA. */
        virtual osg::Image* allocateImage() { return NULL; }

        /** Creates an implementation-specific data object to be passed to buildNodeForStyle */
        virtual osg::Referenced* createBuildData() { return NULL; }     

        /**
         * Creates OSG graph(s) representing the specified feature list.
         *
         * @param session
         *      Feature processing session (shared)
         * @param style
         *      Styling information for the feature geometry
         * @param features
         *      Features to render
         * @param buildData
         *      Implementation-specific build data (from createBuildData)
         * @param out_image 
         *      Pre-allocated image to which the implementation would render.
         *
         * @return true if the rendering succeeded, false if the out_image did not change.
         */
        virtual bool renderFeaturesForStyle(
            Session*           session,
            const Style&       style,
            const FeatureList& features,
            osg::Referenced*   buildData,
            const GeoExtent&   imageExtent,
            osg::Image*        out_image ) { return renderFeaturesForStyle(style, features, buildData, imageExtent, out_image); }

        /** Backwards compatibility */
        virtual bool renderFeaturesForStyle(
            const Style&       style,
            const FeatureList& features,
            osg::Referenced*   buildData,
            const GeoExtent&   imageExtent,
            osg::Image*        out_image ) { return false; }
            
        /**
         * Optional implementation hook to pre-process an image tile before any calls to 
         * renderFeaturesForStyle().
         */
        virtual bool preProcess(
            osg::Image* image,
            osg::Referenced* buildData ) { return true; }
            
        /**
         * Optional implementation hook to post-process an image tile after all calls to 
         * renderFeaturesForStyle() are complete.
         */
        virtual bool postProcess(
            osg::Image* image,
            osg::Referenced* buildData ) { return true; }

        /**
         * Gets all of the features to be rendered for the given query.
         * If a TileKey is specified on the query this will attempt to fallback on previous levels to get feature data.
         */
        void getFeatures(const Query& query, const GeoExtent& imageExtent, FeatureList& features);

    public:

        // META_Object specialization:
        virtual osg::Object* cloneType() const { return 0; } // cloneType() not appropriate
        virtual osg::Object* clone(const osg::CopyOp&) const { return 0; } // clone() not appropriate
        virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const FeatureTileSource*>(obj)!=NULL; }
        virtual const char* className() const { return "FeatureTileSource"; }
        virtual const char* libraryName() const { return "osgEarthFeatures"; }

    protected:

        /** DTOR is protected to prevent this object from being allocated on the stack */
        virtual ~FeatureTileSource() { }

        osg::ref_ptr<FeatureSource> _features;
        const FeatureTileSourceOptions _options;
        //osg::ref_ptr<const FeatureTileSourceOptions> _options;
        osg::ref_ptr<const osgEarth::Map> _map;
        bool _initialized;
        osg::ref_ptr<Session> _session;
        
        bool queryAndRenderFeaturesForStyle(
            const Style&     style,
            const Query&     query,
            osg::Referenced* data,
            const GeoExtent& imageExtent,
            osg::Image*      out_image );
    };

    } } // namespace osgEarth::Features

#endif // OSGEARTHFEATURES_FEATURE_TILE_SOURCE_H