20 #include <tbb/atomic.h>
22 namespace MAKVRinTerra
24 template <
typename FS,
typename S =
typename FS::Sink>
27 ,
public boost::enable_shared_from_this<DtIndexingFeatureSet<FS,S> >
30 typedef boost::shared_ptr<DtIndexingFeatureSet>
Ptr;
31 typedef boost::shared_ptr<const DtIndexingFeatureSet>
CPtr;
32 typedef boost::weak_ptr<DtIndexingFeatureSet>
WPtr;
46 typedef boost::shared_ptr<Config>
Ptr;
83 return Make(boost::shared_ptr<Config>(cfg), bounds);
101 return FS::Wrap(this->shared_from_this());
106 return myConfig->inputSink->label() +
" index level "
107 + boost::lexical_cast<std::string>(
myLevel);
137 const boost::optional<DtFeatureGeometry>& geometry,
142 return myFeatures->filter(query, boost::none_t(), load);
146 return myFeatures->filter(query, geometry, load);
148 bool covers[4] = {
false,
false,
false,
false };
149 bool intersections[4] = {
false,
false,
false,
false };
150 size_t lastIntersection = 0;
151 unsigned numIntersects = 0;
155 switch (geometry->type())
158 for (
unsigned i=0; i != 4; ++i)
160 if (!geometry->intersects(this->getSubtile(i).geometry()))
163 intersections[i] =
true;
165 lastIntersection = i;
172 for (
unsigned i=0; i != 4; ++i)
174 if (!geometry->intersects(this->getSubtile(i).geometry()))
177 intersections[i] =
true;
179 lastIntersection = i;
185 for (
unsigned i=0; i != 4; ++i)
187 std::auto_ptr<DtFeatureGeometry::RelationshipMatrix> matrix
188 = geometry->relate(this->
getSubtile(i).geometry());
190 if (!matrix->intersects())
194 if (matrix->touches())
197 intersections[i] =
true;
199 lastIntersection = i;
202 if (matrix->covers())
206 if (matrix->coveredBy())
213 switch (numIntersects)
218 !covers[lastIntersection] ? geometry : boost::none_t(),
224 for (
size_t i=0; i != 4; ++i)
226 if (!intersections[i])
231 !covers[i] ? geometry : boost::none_t(),
235 return list.release();
268 const boost::shared_ptr<Config>& cfg,
294 DtTHROW_NEW(
DtException,
"Tile index out of bounds");
300 Ptr This(this->shared_from_this());
318 Ptr This(this->shared_from_this());
332 DtWarn <<
"Error activating subtile" << std::endl;
370 :
myBounds(pbounds.makeSubBounds(i,2,2))
378 Caller caller(parent, *
this);
379 mySink->addLoadedCallback(caller);
407 size_t c =
mySink->numberOfFeatures();
412 if (pc <= parent.myConfig->minFeaturesToIndexTile)
417 if (pc/(
double)c >= parent.
myConfig->featuresIndexRatio)
432 : set(set), subtile(subtile)
boost::shared_ptr< DtFeatureSet::Source > tileFeatures
Definition: indexingFeatureSet.h:71
Definition: indexingFeatureSet.h:458
friend class Subtile
Definition: indexingFeatureSet.h:449
Class DtTerrainInterfaceConfig is a readable-writable class holding terrain interface configuration o...
Definition: terrainInterfaceConfig.h:32
static const int PathType
Definition: featureGeometry.h:53
Definition: indexingFeatureSet.h:25
tbb::atomic< State > myState
Definition: indexingFeatureSet.h:461
Sink::Ptr SinkPtr
Definition: indexingFeatureSet.h:40
static FS * Make(const Config &cfg, const DtProj::Bounds &bounds)
Definition: indexingFeatureSet.h:76
void init()
Delayed init needed b/c we need a shared_ptr to ourself.
Definition: indexingFeatureSet.h:298
boost::shared_ptr< const DtIndexingFeatureSet > CPtr
Definition: indexingFeatureSet.h:31
void operator()() const
Definition: indexingFeatureSet.h:436
Definition: indexingFeatureSet.h:458
FS * filter(const DtQuery &query, const boost::optional< DtFeatureGeometry > &geometry, DtLoadType load) const
Definition: indexingFeatureSet.h:135
boost::shared_ptr< DtIndexingFeatureSet > Ptr
Definition: indexingFeatureSet.h:30
Subtile mySubtile3
Definition: indexingFeatureSet.h:454
void init(const Ptr &parent)
Definition: indexingFeatureSet.h:376
const int myLevel
Level in hierarchy.
Definition: indexingFeatureSet.h:344
FS::DetachCallback DetachCallback
Definition: indexingFeatureSet.h:37
const Subtile & getSubtile(unsigned i) const
Definition: indexingFeatureSet.h:283
const boost::shared_ptr< Config > myConfig
Configuration data for this node.
Definition: indexingFeatureSet.h:341
Definition: featureGeometry.h:56
Subtile mySubtile2
Definition: indexingFeatureSet.h:453
FS::ForEachFunction ForEachFunction
Definition: indexingFeatureSet.h:35
bool elided() const
Definition: indexingFeatureSet.h:125
Subtile(const Sink &parentFeatures, const DtProj::Bounds &pbounds, unsigned i)
Definition: indexingFeatureSet.h:369
Definition: indexingFeatureSet.h:458
Subtile mySubtile1
Definition: indexingFeatureSet.h:452
boost::shared_ptr< Config > Ptr
Definition: indexingFeatureSet.h:46
const FS & indexedFeatures() const
Definition: indexingFeatureSet.h:367
bool empty() const
Definition: indexingFeatureSet.h:130
Subtile & subtile
Definition: indexingFeatureSet.h:445
DetachCallback forEachFeatureAsync(const ForEachFunction &func) const
Definition: indexingFeatureSet.h:243
const WPtr myParent
Weak pointer to parent node.
Definition: indexingFeatureSet.h:347
SinkPtr myFeatures
Features in this tile.
Definition: indexingFeatureSet.h:353
Represents a set of characeters a DtFeature object can have.
Definition: query.h:38
const DtFeatureGeometry & geometry() const
Definition: indexingFeatureSet.h:364
Subtile mySubtile0
Definition: indexingFeatureSet.h:451
boost::weak_ptr< DtIndexingFeatureSet > WPtr
Definition: indexingFeatureSet.h:32
void checkIndex(DtIndexingFeatureSet &parent)
Definition: indexingFeatureSet.h:391
FS::LoadedCallback LoadedCallback
Definition: indexingFeatureSet.h:36
static const int PointType
Definition: featureGeometry.h:52
Definition: indexingFeatureSet.h:428
static FS * Make(const boost::shared_ptr< Config > &cfg, const DtProj::Bounds &bounds)
Definition: indexingFeatureSet.h:86
Set of subtiles.
Definition: indexingFeatureSet.h:356
const SinkPtr inputSink
Definition: indexingFeatureSet.h:73
State
Definition: indexingFeatureSet.h:456
bool loaded(double timeout) const
Definition: indexingFeatureSet.h:110
boost::shared_ptr< DtIndexingFeatureSet > myIndexingSet
Definition: indexingFeatureSet.h:361
static FS * Make(Config *cfg, const DtProj::Bounds &bounds)
Definition: indexingFeatureSet.h:81
Caller(const Ptr &set, Subtile &subtile)
Definition: indexingFeatureSet.h:431
~DtIndexingFeatureSet()
Definition: indexingFeatureSet.h:94
void forEachFeatureParallel(const ForEachFunction &func) const
Definition: indexingFeatureSet.h:238
std::string label() const
Definition: indexingFeatureSet.h:104
FS * clone() const
Definition: indexingFeatureSet.h:99
S Sink
Definition: indexingFeatureSet.h:39
DtProj::Bounds myBounds
Definition: indexingFeatureSet.h:358
Configuration information.
Definition: indexingFeatureSet.h:43
Config(FS *input)
Definition: indexingFeatureSet.h:48
DtLoadType
Used to indicate whether to load features.
Definition: featureSet.h:36
const DtFeatureGeometry::Area myTileGeometry
Geometry object representing this tile.
Definition: indexingFeatureSet.h:350
const DtProj::Bounds & bounds() const
Definition: indexingFeatureSet.h:365
DtIndexingFeatureSet(const Ptr &parent, const Subtile &subtile)
Definition: indexingFeatureSet.h:251
WPtr set
Definition: indexingFeatureSet.h:444
Config(const Config &cfg)
Definition: indexingFeatureSet.h:58
Definition: featureSet.h:62
Definition: indexingFeatureSet.h:458
DtFeatureSet used to combine multiple feature sets into one.
Definition: featureSetList.h:26
void addTile(const DtFeature &feature)
Definition: indexingFeatureSet.h:65
SinkPtr mySink
Definition: indexingFeatureSet.h:360
void activate(const Ptr &parent)
Definition: indexingFeatureSet.h:384
Represents a GIS feature.
Definition: feature.h:37
DtIndexingFeatureSet(const boost::shared_ptr< Config > &cfg, const DtProj::Bounds &bounds)
Definition: indexingFeatureSet.h:267
DetachCallback addLoadedCallback(const LoadedCallback &cb) const
Definition: indexingFeatureSet.h:115
FS::Feature Feature
Definition: indexingFeatureSet.h:34
Config(const SinkPtr &input)
Definition: indexingFeatureSet.h:53
DtFeatureGeometry myGeometry
Definition: indexingFeatureSet.h:359
Represents a feature geometry.
Definition: featureGeometry.h:35
unsigned numberOfFeatures() const
Definition: indexingFeatureSet.h:120
bool activateSubtiles()
Mark subtiles and read to use.
Definition: indexingFeatureSet.h:309
const SinkPtr & sink() const
Definition: indexingFeatureSet.h:366