populated method
GeometryCollection<Geometry>
populated({
- int traverse = 0,
- bool onBounds = true,
- PositionScheme scheme = Position.scheme,
override
Returns a geometry of the same subtype as this with certain data members populated.
If nothing is populated then this
is returned.
If onBounds
is true (as by default):
- The
bounds
in a returned geometry object is ensured to be populated (expect when cannot be calculated, for example in the case of an empty geometry). - If
traverse
> 0, then also bounding boxes of child geometry objects of this geometry are populated for child levels indicated bytraverse
(0: no childs, 1: only direct childs, 2: direct childs and childs of them, ..).
Use scheme
to set the position scheme:
Position.scheme
for generic position data (geographic, projected or any other), this is also the defaultProjected.scheme
for projected position dataGeographic.scheme
for geographic position data
See also unpopulated.
Implementation
@override
GeometryCollection populated({
int traverse = 0,
bool onBounds = true,
PositionScheme scheme = Position.scheme,
}) {
if (onBounds) {
// populate geometries when traversing is asked
final coll = traverse > 0 && geometries.isNotEmpty
? geometries
.map<E>(
(f) => f.populated(
traverse: traverse - 1,
onBounds: onBounds,
scheme: scheme,
) as E,
)
.toList(growable: false)
: geometries;
// create a new collection if geometries changed or bounds was unpopulated
// or of other scheme
final b = bounds;
final empty = coll.isEmpty;
if (coll != geometries ||
(b == null && !empty) ||
(b != null && !b.conforming.conformsWith(scheme))) {
return GeometryCollection<E>._(
coll,
coordType,
bounds: empty
? null
: coll
.map((geom) => geom.getBounds(scheme: scheme))
.merge()
?.copyByType(coordType),
);
}
}
return this;
}