public class TLcdWFSProxyModel extends ALcdModel implements ILcd2DBoundsIndexedModel
ILcd2DBoundsIndexedModel
, which fetches its data from a WFS.
Instances of this model are created by providing the WFS service URL to the TLcdWFSProxyModel.Builder
.
A TLcdOGCFilter
can be specified in order to impose additional constraints on the
data that is retrieved from the WFS.
A caching mode can also be specified by invoking the setCachingMode(int)
method. The available modes are :
NO_CACHE
a query is sent to the WFS each time the function elements()
or applyOnInteract2DBounds(com.luciad.shape.ILcdBounds, boolean, com.luciad.util.ILcdFunction, double, double)
is invoked.
CACHE_ALL
a query is first sent to the WFS and all the data are kept in memory.
SMART_CACHE
in this mode, the caching strategy will depend on the size of the data set.
For small data sets, all data will be cached. For large datasets, it will only query the server when
it knows that new data might be returned by the server. For example, when all data for a certain region
is present in the cache, zooming in in that area will not re-query the server. Panning to a new area however
will re-query the server.
Note that this model is intended for read-only use. Its elements should not be edited, and it is not possible to add or remove elements. The model is thread-safe for accessing its elements.
Features are retrieved in GML. If the namespace of the feature type's schema equals a supported known XML format
(such as AIXM 5.1), the elements of the WFS proxy model are of the same type as those produced by the decoder of
the XML format. Otherwise, the elements of the WFS proxy model are the same as type as those produced by
TLcdGMLModelDecoder
.
Below a few snippets illustrating the configuration of the model for common use cases:
try (TLcdLockUtil.Lock autoUnlock = TLcdLockUtil.writeLock(proxyModel)) {
proxyModel.setCachingModel(TLcdWFSProxyModel.CACHE_ALL, ILcdFireEventMode.FIRE_LATER);
proxyModel.setFilter(null, ILcdFireEventMode.FIRE_LATER);
proxyModel.setMaxFeatures(null, ILcdFireEventMode.FIRE_LATER);
} finally {
proxyModel.fireCollectedModelChanges();
}
TLcdOGCBBoxOperator bboxOperator = new TLcdOGCBBoxOperator();
bboxOperator.setPropertyName(new TLcdOGCPropertyName(proxyModel.getGeometryPropertyName()));
bboxOperator.setBounds(new TLcdLonLatBounds(0, 0, 20, 20));
bboxOperator.setBoundsGeoReference(new TLcdGeodeticReference());
TLcdOGCFilter filter = new TLcdOGCFilter(bboxOperator);
try (TLcdLockUtil.Lock autoUnlock = TLcdLockUtil.writeLock(proxyModel)) {
proxyModel.setCachingModel(TLcdWFSProxyModel.CACHE_ALL, ILcdFireEventMode.FIRE_LATER);
proxyModel.setFilter(filter, ILcdFireEventMode.FIRE_LATER);
proxyModel.setMaxFeatures(null, ILcdFireEventMode.FIRE_LATER);
} finally {
proxyModel.fireCollectedModelChanges();
}
try (TLcdLockUtil.Lock autoUnlock = TLcdLockUtil.writeLock(proxyModel)) {
proxyModel.setCachingModel(TLcdWFSProxyModel.SMART_CACHE, ILcdFireEventMode.FIRE_LATER);
proxyModel.setFilter(null, ILcdFireEventMode.FIRE_LATER);
proxyModel.setMaxFeatures(1000, ILcdFireEventMode.FIRE_LATER);
} finally {
proxyModel.fireCollectedModelChanges();
}
TLcdWFSProxyModel.Builder
,
Serialized FormModifier and Type | Class and Description |
---|---|
static class |
TLcdWFSProxyModel.Builder
A builder class for
TLcdWFSProxyModel instances. |
ILcdModel.Query
Modifier and Type | Field and Description |
---|---|
static int |
CACHE_ALL
All data are retrieved and cached at first access.
|
static int |
NO_CACHE
No caching is performed.
|
static int |
SMART_CACHE
In this mode, data is requested on demand.
|
fModelEventSupport
FIRE_LATER, FIRE_NOW, NO_EVENT
Modifier and Type | Method and Description |
---|---|
void |
addElement(Object aObject,
int aIndex)
Always throws an UnsupportedOperationException, because TLcdWFSProxyModel is read-only.
|
void |
addElements(Vector aVector,
int aIndex)
Always throws an UnsupportedOperationException, because TLcdWFSProxyModel is read-only.
|
void |
addModelListener(ILcdModelListener aILcdModelListener)
Registers the specified model listener to receive notifications of model changes on this model.
|
int |
applyOnInteract2DBounds(ILcdBounds aBounds,
boolean aStrictInteract,
ILcdFunction aFunctionToApply,
double aPrecisionX,
double aPrecisionY)
Applies the specified function to all the model elements of which the 2D bounds overlap with the specified bounds.
|
int |
applyOnInteract2DBounds(ILcdBounds aBounds,
boolean aStrictInteract,
ILcdFunction aFunctionToApply,
double aPrecisionX,
double aPrecisionY,
double aMinSizeX,
double aMinSizeY,
boolean aIncludePoints)
Applies the specified function to all the elements of which the 2D bounds overlap with the specified bounds.
|
boolean |
canAddElement(Object aObject)
Always returns false, because TLcdWFSProxyModel is read-only.
|
boolean |
canRemoveElement(Object aObject)
Always returns false, because TLcdWFSProxyModel because read-only.
|
void |
dispose()
Disposes of this model and allows it to release any system resources that it is holding.
|
void |
elementChanged(Object aObject,
int aEventMode)
Does nothing, because TLcdWFSProxyModel is read-only.
|
Enumeration |
elements()
Returns an enumeration over all elements of this model.
|
void |
elementsChanged(Vector aVector,
int aEventMode)
Does nothing, because TLcdWFSProxyModel is read-only.
|
void |
fireCollectedModelChanges()
Notifies all listeners that are registered on this model of all the changes that have been
collected between the previous notification and now.
|
ILcdBounds |
getBounds()
Returns the
ILcdBounds by which the geometry of this ILcdBounded object
is bounded. |
int |
getCachingMode()
Gets the caching mode.
|
TLcdWFSFeatureType |
getFeatureType() |
TLcdOGCFilter |
getFilter()
Returns the current OGC Filter used in queries sent to the WFS.
|
QName |
getGeometryPropertyName()
Returns the name of the geometry property that will be used for building spatial filters.
|
Integer |
getMaxFeatures()
Returns the max features parameter that will be used for querying the remote WFS.
|
ILcdModelDescriptor |
getModelDescriptor()
Returns the
ILcdModelDescriptor providing meta information about this model and
its elements. |
ILcdModelEncoder |
getModelEncoder()
Returns, if available, a model encoder that is capable of encoding this model,
(
encoder.canEncode(this) ), null otherwise. |
ILcdModelReference |
getModelReference()
Returns the
ILcdModelReference describing how the geometry of the elements contained in this
model should be interpreted. |
TLcdWFSClient |
getWFSClient() |
void |
invalidate()
Invalidates the contents of the model, meaning that any locally cached
data is removed.
|
void |
invalidate(int aEventMode)
Invalidates the contents of the model, meaning any locally cached
data is removed.
|
<T> Stream<T> |
query(ILcdModel.Query aQuery)
Provides a
Stream of all elements in this model that match the given query. |
void |
removeAllElements(int aIndex)
Always throws an UnsupportedOperationException, because TLcdWFSProxyModel is read-only.
|
void |
removeElement(Object aObject,
int aIndex)
Always throws an UnsupportedOperationException, because TLcdWFSProxyModel is read-only.
|
void |
removeElements(Vector aVector,
int aIndex)
Always throws an UnsupportedOperationException, because TLcdWFSProxyModel is read-only.
|
void |
removeModelListener(ILcdModelListener aILcdModelListener)
Unregisters the specified model listener so that it no longer receives notifications of model changes on this model.
|
void |
setCachingMode(int aCachingMode)
Sets the caching mode and clears any cached content.
|
void |
setCachingMode(int aCachingMode,
int aFireEventMode)
Sets the caching mode.
|
void |
setExceptionHandler(ILcdExceptionHandler aExceptionHandler)
Sets an exception handler.
|
void |
setFilter(TLcdOGCFilter aFilter)
Sets the filter to be applied to features retrieved from the WFS.
|
void |
setFilter(TLcdOGCFilter aFilter,
int aEventMode)
Sets the filter to be applied to features retrieved from the WFS.
|
void |
setGeometryPropertyName(QName aGeometryPropertyName)
Sets the name of the geometry property to be used for building spatial filters.
|
void |
setMaxFeatures(Integer aMaxFeatures)
Sets the max features parameter to be used for querying the remote WFS.
|
allElementsChanged, allElementsRemoved, elementAdded, elementRemoved, elementsAdded, elementsRemoved, getModelMetadata, initializeTransientValues, isClassTraceOn, isTraceOn, setClassTraceOn, setModelDescriptor, setModelDisposer, setModelEncoder, setModelMetadataFunction, setModelReference, setTraceOn
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
all, filter, getModelMetadata
close
public static final int NO_CACHE
No caching is performed. Data are requested on demand.
Note that this mode is not suited for visualizing the TLcdWFSProxyModel
on the map.
Because this mode returns new domain object instances on each applyOnInteract2DBounds(ILcdBounds, boolean, ILcdFunction, double, double)
and elements()
call, it does not support labeling nor selection.
A possible use-case of this mode is when you want to use the TLcdWFSProxyModel
to send a certain query to
the server, obtain the results of that query and then dispose of the model.
In this scenario, the TLcdWFSProxyModel
is only used to send the query to the server and to accept the result:
TLcdWFSProxyModel model = TLcdWFSProxyModelFactory.createXXX;
//set all the query parameters on the model
model.setMaxFeatures(100);
model.setFilter( ... );
//Either use elements or applyOnInteract2DBounds,
//depending on whether you want to apply extra bounds filtering
Enumeration elements = model.elements();
while( elements.hasMoreElements() ){
Object element = elements.nextElement;
//do something with the element
}
model = null;//do no longer use the model
public static final int CACHE_ALL
public static final int SMART_CACHE
In this mode, data is requested on demand. For example when visualizing the data on a view, only the data currently visible in the view will be queried from the server. When panning around in the view, data for the new area will be loaded from the server if not yet available in the cache.
This is the recommended mode when working with large data sets.
For large data sets, make sure to limit the number of features that is requested from the server.
This can either be done by specifying the maximum number of features
,
or by specifying a filter
.
For small data sets which fit into memory, this mode works very similar to CACHE_ALL
.
As soon as all data is loaded into the cache, no extra requests to the server will be made.
For large data sets which do not fit completely in memory, care must be taken that the model never requests all
data from the server.
This would happen when visualizing the data on a view, and zooming out on the view so that the whole world becomes visible.
Avoiding that all data gets requested can for example by achieved by setting the maxFeatures
to a sensible value,
or specifying an OGC filter
to limit the data.
If the model is only used in a layer, another alternative is to set a scale range on the layer which visualizes the data.
public void setExceptionHandler(ILcdExceptionHandler aExceptionHandler)
aExceptionHandler
- the exception handler.public TLcdOGCFilter getFilter()
public void setFilter(TLcdOGCFilter aFilter)
This operation only sets the filter and clears the caches content,
without sending events and triggering new data queries. By itself, it is thus a cheap operation.
However, any access afterwards to the model content (either through elements()
or
through applyOnInteract2DBounds(com.luciad.shape.ILcdBounds, boolean, com.luciad.util.ILcdFunction, double, double)
) will trigger a new query to the server,
which can be a potential expensive operation.
Because this method does not send any event, the layer containing the model needs to be updated
manually. By using setFilter(TLcdOGCFilter, int)
instead of this method,
an event can be sent that automatically updates the layer.
As this method can update the content of this model, a write lock needs to be used.
Calling this method when the caching mode
is set to SMART_CACHE
might perform requests to the server, making this an expensive method call.
aFilter
- an OGC Filter to be used for any subsequent WFS queries sent by this modelsetFilter(TLcdOGCFilter, int)
public void setFilter(TLcdOGCFilter aFilter, int aEventMode)
This operation sets the filter, clears the cached content and sends a model changed event with the given mode. Depending on the event mode, it can trigger a new data query, which can potentially be an expensive operation.
As this method can update the content of this model, a write lock needs to be used.
Calling this method when the caching mode
is set to SMART_CACHE
might perform requests to the server, making this an expensive method call.
Usage example :
TLcdOGCFilter filter = ...;
try (TLcdLockUtil.Lock autoUnlock = TLcdLockUtil.writeLock(proxyModel)) {
proxyModel.setFilter(filter, ILcdFireEventMode.FIRE_LATER);
} finally {
proxyModel.fireCollectedModelChanges();
}
aFilter
- an OGC Filter to be used for any subsequent WFS queries sent by this modelaEventMode
- the mode for sending out the model change event. This can be one of FIRE_NOW, FIRE_LATER or NO_EVENT.public void invalidate()
This method does not send any event, in contrast with invalidate(int)
.
Sending an event automatically updates the layer containing the model. Without an event,
the layer needs to be updated manually.
As this method can update the content of this model, a write lock needs to be used.
Calling this method when the caching mode
is set to SMART_CACHE
might perform requests to the server, making this an expensive method call.
invalidate(int)
public void invalidate(int aEventMode)
As this method can update the content of this model, a write lock needs to be used.
Usage example:
try (TLcdLockUtil.Lock autoUnlock = TLcdLockUtil.writeLock(proxyModel)) {
proxyModel.invalidate(ILcdFireEventMode.FIRE_LATER);
} finally {
proxyModel.fireCollectedModelChanges();
}
Calling this method when the caching mode
is set to SMART_CACHE
might perform requests to the server, making this an expensive method call.
aEventMode
- the mode for sending out the model change event. This can be one of FIRE_NOW, FIRE_LATER or NO_EVENT.public int getCachingMode()
NO_CACHE
,
CACHE_ALL
,
SMART_CACHE
public void setCachingMode(int aCachingMode)
This method does not send any event.
As this method can update the content of this model, a write lock needs to be used.
Calling this method with mode SMART_CACHE
might perform requests to the server,
making this an expensive method call.
aCachingMode
- one of the constant defined in this class.getCachingMode()
,
NO_CACHE
,
CACHE_ALL
,
SMART_CACHE
public void setCachingMode(int aCachingMode, int aFireEventMode)
SMART_CACHE
might perform requests to the server,
making this an expensive method call.aCachingMode
- one of the constant defined in this class.getCachingMode()
,
NO_CACHE
,
CACHE_ALL
,
SMART_CACHE
public Integer getMaxFeatures()
This allows to limit the number of objects returned by the server and then preventing from downloading the full data set in one request.
public void setMaxFeatures(Integer aMaxFeatures)
caching mode
is set to SMART_CACHE
might perform requests to the server, making this an expensive method call.aMaxFeatures
- the max features parameter that will be used for querying the remote WFS.getMaxFeatures()
public QName getGeometryPropertyName()
A default geometry name is selected automatically from the feature type.
public void setGeometryPropertyName(QName aGeometryPropertyName)
aGeometryPropertyName
- the name of the geometry property that will be used for building spatial filters.public int applyOnInteract2DBounds(ILcdBounds aBounds, boolean aStrictInteract, ILcdFunction aFunctionToApply, double aPrecisionX, double aPrecisionY)
ILcd2DBoundsIndexedModel
false
.applyOnInteract2DBounds
in interface ILcd2DBoundsIndexedModel
aBounds
- the rectangle to test overlap with.aStrictInteract
- if false
, the spatial search may return more elements than the ones strictly
overlapping; if true
, the search only returns the elements that are
overlapping. The latter mode is more precise, but it may be slower.aFunctionToApply
- the function to apply on each element that overlaps with the given bounds.
The return value of the specified function is used as a stop criterion: the spatial query is interrupted
if the function returns false
.aPrecisionX
- the precision required in the x dimension, expressed in model units.
For example, for a cartesian grid system expressed in meters, the values
should be expressed in meters as well, for a geodetic coordinate system the accuracy
values should be expressed in degrees.
The precision is useful in combination with multi-leveled data (multiple representations of the same object, but with varying accuracy), so that the most appropriate accuracy level can be used. 0 means best possible accuracy, but it might trigger lazy-loaded implementations to load lots of data.
aPrecisionY
- the precision required in the y dimension, expressed in model units.ILcdFunction
has been applied.public int applyOnInteract2DBounds(ILcdBounds aBounds, boolean aStrictInteract, ILcdFunction aFunctionToApply, double aPrecisionX, double aPrecisionY, double aMinSizeX, double aMinSizeY, boolean aIncludePoints)
ILcd2DBoundsInteractable
false
for an element it was applied on.applyOnInteract2DBounds
in interface ILcd2DBoundsIndexedModel
applyOnInteract2DBounds
in interface ILcd2DBoundsInteractable
aBounds
- the rectangle to test overlap with.aStrictInteract
- if false
, the spatial search may return more elements than the ones strictly
overlapping; if true
, the search only returns the elements that are
overlapping. The latter mode is more precise, but it may be slower.aFunctionToApply
- the function to apply on each element that overlaps with the given bounds.aPrecisionX
- the precision required in the x dimension, expressed in model units.
For example, for a cartesian grid system expressed in meters, the values
should be expressed in meters as well, for a geodetic coordinate system the accuracy
values should be expressed in degrees.
The precision is useful in combination with multi-leveled data (multiple representations of the same object, but with varying accuracy), so that the most appropriate accuracy level can be used. 0 means best possible accuracy, but it might trigger lazy-loaded implementations to load lots of data.
aPrecisionY
- the precision required in the y dimension, expressed in model units.aMinSizeX
- the minimal element size in the x dimension (as in
ILcdBounds.getWidth()
), expressed in model units.
Elements that are smaller than this size will be skipped. This may, for example, be
useful when improving the efficiency of painting elements by skipping elements
that are smaller than some threshold (e.g. one pixel, converted to model units).aMinSizeY
- the minimal element size in the y dimension (as in
ILcdBounds.getHeight()
), expressed in model units.aIncludePoints
- if true
, zero-sized elements (points) are considered as well, even though they
might be smaller than the minimum size.ILcdFunction
has been applied.public <T> Stream<T> query(ILcdModel.Query aQuery)
ILcd2DBoundsIndexedModel
Stream
of all elements in this model that match the given query.
If the query condition contains a spatial component (either bounding-box test
,
or a spatial operator) applyOnInteracts2DBounds
is
used first to narrow down the set of relevant objects. The rest of the conditions are then evaluated on that subset.
If the query condition contains a minimum object size
aspect,
that minimum size is passed as arguments to the applyOnInteract2DBounds
call.
Stream
of all elements in this model that match the given query.
The query aspects are applied in this specific order, regardless of the order used to create the query:
filter
is applied first (if any).sorting
is applied second (if any).limit
is applied last (if any).condition
and sort-by
must never change after creation.
Examples:
query
(all
());query
(filter
(new TLcdOGCBBoxOperator(...)));query
(filter
(eq(property("name"), literal("Leuven")));query
(all
().sorted
(comparing(property("population"), DESC));query
(all
().limit
(150));query
(filter
(and(bboxCondition, ogcCondition)).sorted
(sortByPopulation).limit
(120));
A stream
is closeable
, and it depends on the implementation whether the stream
has to be closed or not.
You should use this template to ensure proper model locking and stream closing:
try (TLcdLockUtil.Lock autoUnlock = TLcdLockUtil.readLock(model);
Stream elements = model.query(all())) {
elements.forEach(System.err::println);
}
Model implementations:
By default, this method will invoke elements()
, loop over all elements and apply the filter, sorting and limit.
For ILcd2DBoundsIndexedModel
, this method will invoke applyOnInteract2DBounds()
if the condition contains a spatial component (either a bounding-box operator, or a spatial operator), and apply the rest of the filter on those elements.
Model implementers can override this method to apply the query more efficiently on their back-end format.
For example, if your back-end is a service or database that accepts certain queries, you can override this method and
transform the condition into a query on that service.
You can inspect the condition using instanceof
on the various condition classes.
query
in interface ILcd2DBoundsIndexedModel
query
in interface ILcdModel
aQuery
- The query, cannot be null
. Pass ILcdModel.all()
if you want all elements.TLcdOGCFilterFactory to easily create conditions
,
TLcdOGCSortBy "comparing" and "thenComparing" factory methods to easily create sorting orders
public ILcdModelReference getModelReference()
ALcdModel
ILcdModelReference
describing how the geometry of the elements contained in this
model should be interpreted.getModelReference
in interface ILcdModel
getModelReference
in class ALcdModel
ILcdModelReference
of this ILcdModel
.ALcdModel.setModelReference(ILcdModelReference)
public ILcdModelDescriptor getModelDescriptor()
ALcdModel
ILcdModelDescriptor
providing meta information about this model and
its elements.getModelDescriptor
in interface ILcdModel
getModelDescriptor
in class ALcdModel
ILcdModelDescriptor
of this ILcdModel
. Should not be null
.ALcdModel.setModelDescriptor(ILcdModelDescriptor)
public ILcdModelEncoder getModelEncoder()
ALcdModel
encoder.canEncode(this)
), null
otherwise.getModelEncoder
in interface ILcdModel
getModelEncoder
in class ALcdModel
null
otherwise.ALcdModel.setModelEncoder(ILcdModelEncoder)
public Enumeration elements()
ILcdModel
public void addElement(Object aObject, int aIndex) throws IllegalArgumentException
addElement
in interface ILcdModel
addElement
in class ALcdModel
aObject
- the element to be added to this model.aIndex
- the mode for sending out the model change event. This can be FIRE_LATER
or NO_EVENT
.UnsupportedOperationException
- this method is not implementedIllegalArgumentException
ILcdModel.canAddElement(Object)
public boolean canAddElement(Object aObject)
canAddElement
in interface ILcdModel
canAddElement
in class ALcdModel
aObject
- the element to be verified.true
if the specified element can be added to this model, false
otherwise.public void addElements(Vector aVector, int aIndex)
addElements
in interface ILcdModel
addElements
in class ALcdModel
aVector
- the vector of elements to be added to this model.aIndex
- the mode for sending the model change events This can be FIRE_LATER
or NO_EVENT
.UnsupportedOperationException
- this method is not implementedILcdModel.canAddElement(Object)
public void removeElement(Object aObject, int aIndex) throws IllegalArgumentException
removeElement
in interface ILcdModel
removeElement
in class ALcdModel
aObject
- the element to be removed from this model.aIndex
- the mode for sending out the model change event. This can be FIRE_LATER
or NO_EVENT
.UnsupportedOperationException
- this method is not implementedIllegalArgumentException
ILcdModel.canRemoveElement(Object)
public boolean canRemoveElement(Object aObject)
canRemoveElement
in interface ILcdModel
canRemoveElement
in class ALcdModel
aObject
- the element to be verified.true
if the specified element can be removed from this model, false
otherwise.public void removeElements(Vector aVector, int aIndex)
removeElements
in interface ILcdModel
removeElements
in class ALcdModel
aVector
- the vector of elements to be removed from this model.aIndex
- the mode for sending out the model change event. This can be FIRE_LATER
or NO_EVENT
.UnsupportedOperationException
- this method is not implementedILcdModel.canRemoveElement(Object)
public void removeAllElements(int aIndex)
removeAllElements
in interface ILcdModel
removeAllElements
in class ALcdModel
aIndex
- the mode for sending out the model change event. This can be FIRE_LATER
or NO_EVENT
.UnsupportedOperationException
- this method is not implementedpublic void elementChanged(Object aObject, int aEventMode)
elementChanged
in interface ILcdModel
elementChanged
in class ALcdModel
aObject
- the element that has changed.aEventMode
- the mode for sending out the model change event. This can be FIRE_LATER
or NO_EVENT
.public void elementsChanged(Vector aVector, int aEventMode)
elementsChanged
in interface ILcdModel
elementsChanged
in class ALcdModel
aVector
- the vector of elements that have changed.aEventMode
- the mode for sending out the model change event. This can be FIRE_LATER
or NO_EVENT
.public void fireCollectedModelChanges()
fireCollectedModelChanges
in interface ILcdModel
fireCollectedModelChanges
in class ALcdModel
ILcdModelListener.modelChanged(TLcdModelChangedEvent)
public void addModelListener(ILcdModelListener aILcdModelListener)
Model changes are sent out when settings of this model have been changed that impact the content.
This can be through setFilter(TLcdOGCFilter, int)
, setCachingMode(int)
(TLcdOGCFilter, int)}
and invalidate(int)
. Model changes can be sent out individually, grouped or silently applied without
notifications, depending on the ILcdFireEventMode that was specified with the change.
In case you need to register a listener which keeps a reference to an object with a shorter life-time than this model,
you can use a ALcdWeakModelListener
instance as model listener.
addModelListener
in interface ILcdModel
addModelListener
in class ALcdModel
aILcdModelListener
- the ILcdModelListener
to register on this model.ILcdModel.removeModelListener(com.luciad.model.ILcdModelListener)
,
ILcdModelListener
public void removeModelListener(ILcdModelListener aILcdModelListener)
removeModelListener
in interface ILcdModel
removeModelListener
in class ALcdModel
aILcdModelListener
- the ILcdModelListener
to remove.ILcdModel.addModelListener(com.luciad.model.ILcdModelListener)
,
ILcdModelListener
public void dispose()
ALcdModel
finalize
) on this model subsequent to a call to
this method is undefined.
When a model disposer has been provided it is called, otherwise this method does nothing.
When overriding this method it is recommended to call super.dispose()
.
dispose
in interface ILcdModel
dispose
in interface ILcdDisposable
dispose
in class ALcdModel
ALcdModel.setModelDisposer(Consumer)
public ILcdBounds getBounds()
ILcdBounded
ILcdBounds
by which the geometry of this ILcdBounded
object
is bounded.
If the geometry does not allow retrieving valid bounds (for example a polyline with 0 points)
the return value is unspecified.
It is highly recommended to return an undefined
bounds.
You can create undefined bounds using the default constructors
of TLcdLonLatBounds
or TLcdXYBounds
.
getBounds
in interface ILcdBounded
ILcdBounds
by which the geometry of this ILcdBounded
object
is bounded.public TLcdWFSFeatureType getFeatureType()
public TLcdWFSClient getWFSClient()