osgEarth 2.1.1
|
00001 /* -*-c++-*- */ 00002 /* osgEarth - Dynamic map generation toolkit for OpenSceneGraph 00003 * Copyright 2008-2010 Pelican Mapping 00004 * http://osgearth.org 00005 * 00006 * osgEarth is free software; you can redistribute it and/or modify 00007 * it under the terms of the GNU Lesser General Public License as published by 00008 * the Free Software Foundation; either version 2 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public License 00017 * along with this program. If not, see <http://www.gnu.org/licenses/> 00018 */ 00019 #ifndef OSGEARTHFEATURES_FEATURE_CURSOR_OGR 00020 #define OSGEARTHFEATURES_FEATURE_CURSOR_OGR 1 00021 00022 #include <osgEarthFeatures/Feature> 00023 #include <osgEarthFeatures/FeatureSource> 00024 #include <osgEarthFeatures/Filter> 00025 #include <osgEarthSymbology/Query> 00026 #include <ogr_api.h> 00027 #include <queue> 00028 00029 using namespace osgEarth; 00030 using namespace osgEarth::Features; 00031 00032 class FeatureCursorOGR : public FeatureCursor 00033 { 00034 public: 00047 FeatureCursorOGR( 00048 OGRLayerH dsHandle, 00049 OGRLayerH layerHandle, 00050 const FeatureProfile* profile, 00051 const Symbology::Query& query, 00052 const FeatureFilterList& filters ); 00053 00054 public: // FeatureCursor 00055 00056 bool hasMore() const; 00057 Feature* nextFeature(); 00058 00059 protected: 00060 virtual ~FeatureCursorOGR(); 00061 00062 private: 00063 OGRDataSourceH _dsHandle; 00064 OGRLayerH _layerHandle; 00065 OGRLayerH _resultSetHandle; 00066 OGRGeometryH _spatialFilter; 00067 Symbology::Query _query; 00068 int _chunkSize; 00069 OGRFeatureH _nextHandleToQueue; 00070 osg::ref_ptr<const FeatureProfile> _profile; 00071 std::queue< osg::ref_ptr<Feature> > _queue; 00072 osg::ref_ptr<Feature> _lastFeatureReturned; 00073 const FeatureFilterList& _filters; 00074 00075 private: 00076 void readChunk(); 00077 }; 00078 00079 00080 #endif // OSGEARTHFEATURES_FEATURE_CURSOR_OGR