/* -*-c++-*- */ /* osgEarth - Geospatial SDK for OpenSceneGraph * Copyright 2008-2014 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 */ #ifndef OSGEARTH_FEATURES_MVT #define OSGEARTH_FEATURES_MVT 1 #include #ifdef OSGEARTH_HAVE_MVT #include namespace osgEarth { namespace MVT { //! Reads features from an MVT stream for the specified tile. extern OSGEARTH_EXPORT bool readTile( std::istream& in, const TileKey& key, FeatureList& features); // Internal serialization options class OSGEARTH_EXPORT MVTFeatureSourceOptions : public FeatureSource::Options { public: META_LayerOptions(osgEarth, MVTFeatureSourceOptions, FeatureSource::Options); OE_OPTION(URI, url); OE_OPTION(int, minLevel); OE_OPTION(int, maxLevel); virtual Config getConfig() const; private: void fromConfig(const Config& conf); }; } } // osgEarth::MVT namespace osgEarth { /** * Feature Layer that accesses features according to the Mapnik Vector Tiles specification. */ class OSGEARTH_EXPORT MVTFeatureSource : public FeatureSource { public: // serialization typedef MVT::MVTFeatureSourceOptions Options; public: META_Layer(osgEarth, MVTFeatureSource, Options, FeatureSource, MVTFeatures); //! Location of the resource void setURL(const URI& value); const URI& getURL() const; //! Minimum level of detail to access void setMinLevel(const int& value); const int& getMinLevel() const; //! Maximum level of detail to access void setMaxLevel(const int& value); const int& getMaxLevel() const; typedef void(*FeatureTileCallback)(const TileKey& key, const FeatureList& features, void* context); /** * Iterates over the tiles in the mbtiles dataset */ void iterateTiles(int zoomLevel, int limit, int offset, const GeoExtent& extent, FeatureTileCallback callback, void* context); public: // Layer Status openImplementation() override; Status closeImplementation() override; protected: void init() override; public: // FeatureSource FeatureCursor* createFeatureCursorImplementation(const Query& query, ProgressCallback* progress) const override; const FeatureSchema& getSchema() const override { return _schema; } protected: virtual ~MVTFeatureSource(); private: FeatureSchema _schema; osg::ref_ptr _compressor; void* _database; unsigned _minLevel; unsigned _maxLevel; const FeatureProfile* createFeatureProfile(); void computeLevels(); bool getMetaData(const std::string& key, std::string& value); void closeDatabase(); }; } OSGEARTH_SPECIALIZE_CONFIG(osgEarth::MVTFeatureSource::Options); #else #pragma message("osgEarth was not built with MVT support") #endif #endif // OSGEARTH_FEATURES_MVT