22 namespace MAKVRinTerra
24 template <
typename FS,
typename S =
typename FS::Sink>
27 ,
public std::enable_shared_from_this<DtIndexingFeatureSet<FS,S> >
30 typedef std::shared_ptr<DtIndexingFeatureSet>
Ptr;
31 typedef std::shared_ptr<const DtIndexingFeatureSet>
CPtr;
32 typedef std::weak_ptr<DtIndexingFeatureSet>
WPtr;
46 typedef std::shared_ptr<Config>
Ptr;
83 return Make(std::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::unique_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 std::shared_ptr<Config>& cfg,
294 DtTHROW_NEW(
DtException,
"Tile index out of bounds");
300 Ptr This(this->shared_from_this());
313 auto expected =
START;
319 Ptr This(this->shared_from_this());
334 DtWarn <<
"Error activating subtile" << std::endl;
372 :
myBounds(pbounds.makeSubBounds(i,2,2))
380 Caller caller(parent, *
this);
381 mySink->addLoadedCallback(caller);
409 size_t c =
mySink->numberOfFeatures();
414 if (pc <= parent.myConfig->minFeaturesToIndexTile)
419 if (pc/(
double)c >= parent.
myConfig->featuresIndexRatio)
434 : set(set), subtile(subtile)
Definition: indexingFeatureSet.h:460
std::shared_ptr< DtFeatureSet::Source > tileFeatures
Definition: indexingFeatureSet.h:71
friend class Subtile
Definition: indexingFeatureSet.h:451
Class DtTerrainInterfaceConfig is a readable-writable class holding terrain interface configuration o...
Definition: terrainInterfaceConfig.h:33
static const int PathType
Definition: featureGeometry.h:58
Definition: indexingFeatureSet.h:25
const std::shared_ptr< Config > myConfig
Configuration data for this node.
Definition: indexingFeatureSet.h:343
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
void operator()() const
Definition: indexingFeatureSet.h:438
Definition: indexingFeatureSet.h:460
FS * filter(const DtQuery &query, const boost::optional< DtFeatureGeometry > &geometry, DtLoadType load) const
Definition: indexingFeatureSet.h:135
Subtile mySubtile3
Definition: indexingFeatureSet.h:456
void init(const Ptr &parent)
Definition: indexingFeatureSet.h:378
const int myLevel
Level in hierarchy.
Definition: indexingFeatureSet.h:346
std::shared_ptr< DtIndexingFeatureSet > Ptr
Definition: indexingFeatureSet.h:30
FS::DetachCallback DetachCallback
Definition: indexingFeatureSet.h:37
const Subtile & getSubtile(unsigned i) const
Definition: indexingFeatureSet.h:283
Definition: featureGeometry.h:61
Subtile mySubtile2
Definition: indexingFeatureSet.h:455
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:371
Definition: indexingFeatureSet.h:460
Subtile mySubtile1
Definition: indexingFeatureSet.h:454
const FS & indexedFeatures() const
Definition: indexingFeatureSet.h:369
bool empty() const
Definition: indexingFeatureSet.h:130
Subtile & subtile
Definition: indexingFeatureSet.h:447
DetachCallback forEachFeatureAsync(const ForEachFunction &func) const
Definition: indexingFeatureSet.h:243
const WPtr myParent
Weak pointer to parent node.
Definition: indexingFeatureSet.h:349
SinkPtr myFeatures
Features in this tile.
Definition: indexingFeatureSet.h:355
Represents a set of characeters a DtFeature object can have. DtQuery objects are the way to communica...
Definition: query.h:37
const DtFeatureGeometry & geometry() const
Definition: indexingFeatureSet.h:366
static FS * Make(const std::shared_ptr< Config > &cfg, const DtProj::Bounds &bounds)
Definition: indexingFeatureSet.h:86
Subtile mySubtile0
Definition: indexingFeatureSet.h:453
std::atomic< State > myState
Definition: indexingFeatureSet.h:463
void checkIndex(DtIndexingFeatureSet &parent)
Definition: indexingFeatureSet.h:393
FS::LoadedCallback LoadedCallback
Definition: indexingFeatureSet.h:36
static const int PointType
Definition: featureGeometry.h:57
Definition: indexingFeatureSet.h:430
Set of subtiles.
Definition: indexingFeatureSet.h:358
const SinkPtr inputSink
Definition: indexingFeatureSet.h:73
std::shared_ptr< DtIndexingFeatureSet > myIndexingSet
Definition: indexingFeatureSet.h:363
State
Definition: indexingFeatureSet.h:458
bool loaded(double timeout) const
Definition: indexingFeatureSet.h:110
static FS * Make(Config *cfg, const DtProj::Bounds &bounds)
Definition: indexingFeatureSet.h:81
Caller(const Ptr &set, Subtile &subtile)
Definition: indexingFeatureSet.h:433
std::weak_ptr< DtIndexingFeatureSet > WPtr
Definition: indexingFeatureSet.h:32
DtIndexingFeatureSet(const std::shared_ptr< Config > &cfg, const DtProj::Bounds &bounds)
Definition: indexingFeatureSet.h:267
~DtIndexingFeatureSet()
Definition: indexingFeatureSet.h:94
std::shared_ptr< Config > Ptr
Definition: indexingFeatureSet.h:46
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:360
Configuration information.
Definition: indexingFeatureSet.h:43
Config(FS *input)
Definition: indexingFeatureSet.h:48
DtLoadType
Used to indicate whether to load features. See DtFeatureSetTemplate::filter.
Definition: featureSet.h:33
const DtFeatureGeometry::Area myTileGeometry
Geometry object representing this tile.
Definition: indexingFeatureSet.h:352
const DtProj::Bounds & bounds() const
Definition: indexingFeatureSet.h:367
DtIndexingFeatureSet(const Ptr &parent, const Subtile &subtile)
Definition: indexingFeatureSet.h:251
WPtr set
Definition: indexingFeatureSet.h:446
Config(const Config &cfg)
Definition: indexingFeatureSet.h:58
Definition: featureSet.h:66
Definition: indexingFeatureSet.h:460
DtFeatureSet used to combine multiple feature sets into one. This class allows all feature set algori...
Definition: featureSetList.h:26
void addTile(const DtFeature &feature)
Definition: indexingFeatureSet.h:65
SinkPtr mySink
Definition: indexingFeatureSet.h:362
std::shared_ptr< const DtIndexingFeatureSet > CPtr
Definition: indexingFeatureSet.h:31
void activate(const Ptr &parent)
Definition: indexingFeatureSet.h:386
Represents a GIS feature. Features consist of a DtFeatureGeometry (2.5D geometric vector data) and a ...
Definition: feature.h:36
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:361
Represents a feature geometry.
Definition: featureGeometry.h:40
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:368