Table of Contents

ThinkGeo.MapSuite.SilverlightCore.FeatureSource

Note: The page was created before Map Suite 10. Map Suite 10.0 organized many classes into new namespaces and assemblies as well as had a few minor breaks in compatibility. The majority of previously built code should work without modification assuming the new namespaces are added. For guidance on upgrading your existing code, please check out MapSuite 10 Upgrade Guide.

The abstract class from which all feature sources inherit. Feature sources represent feature data that can be integrated into Map Suite.This class is key, as it is the abstract class from which all other feature sources are derived. In this sense it encapsulates much of the logic for handling transactions and ensuring the data is consistent regardless of any projections applied.

Inheritance Hierarchy

Members Summary

Public Constructors

Protected Constructors

FeatureSource()

Remarks
Parameters

Public Methods

GetFeaturesNearestTo(BaseShape,GeographyUnit,Int32,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesNearestTo(BaseShape,GeographyUnit,Int32,ReturningColumnsType)

Remarks
Return Value
Parameters

GetFeaturesNearestTo(Feature,GeographyUnit,Int32,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesNearestTo(Feature,GeographyUnit,Int32,ReturningColumnsType)

Remarks
Return Value
Parameters

GetFeaturesNearestTo(BaseShape,GeographyUnit,Int32,IEnumerable<String>,Double,DistanceUnit)

Remarks
Return Value
Parameters

GetFeaturesNearestTo(Feature,GeographyUnit,Int32,IEnumerable<String>,Double,DistanceUnit)

Remarks
Return Value
Parameters

GetFeaturesWithinDistanceOf(BaseShape,GeographyUnit,DistanceUnit,Double,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesWithinDistanceOf(BaseShape,GeographyUnit,DistanceUnit,Double,ReturningColumnsType)

Remarks
Return Value
Parameters

GetFeaturesWithinDistanceOf(Feature,GeographyUnit,DistanceUnit,Double,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesWithinDistanceOf(Feature,GeographyUnit,DistanceUnit,Double,ReturningColumnsType)

Remarks
Return Value
Parameters

GetFeatureById(String,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeatureById(String,ReturningColumnsType)

Remarks
Return Value
Parameters

GetFeaturesByIds(IEnumerable<String>,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesByIds(IEnumerable<String>,ReturningColumnsType)

Remarks
Return Value
Parameters

GetBoundingBoxById(String)

Remarks
Return Value
Parameters

GetBoundingBoxByIds(IEnumerable<String>)

Remarks
Return Value
Parameters

GetBoundingBoxesByIds(IEnumerable<String>)

Remarks
Return Value
Parameters

GetFirstFeaturesWellKnownType()

Remarks
Return Value
Parameters

ExecuteNonQuery(String)

Remarks
Return Value
Parameters

GetFeaturesByColumnValue(String,String,ReturningColumnsType)

Remarks
Return Value
Parameters

GetFeaturesByColumnValue(String,String,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesByColumnValue(String,String)

Remarks
Return Value
Parameters

GetColumns()

Remarks
Return Value
Parameters

RefreshColumns()

Remarks
Return Value
Parameters

GetCount()

Remarks
Return Value
Parameters

GetBoundingBox()

Remarks
Return Value
Parameters

Open()

Remarks
Return Value
Parameters

Close()

Remarks
Return Value
Parameters

BeginTransaction()

Remarks
Return Value
Parameters

AddFeature(Feature)

Remarks
Return Value
Parameters

AddFeature(BaseShape)

Remarks
Return Value
Parameters

AddFeature(BaseShape,IDictionary<String,String>)

Remarks
Return Value
Parameters

DeleteFeature(String)

Remarks
Return Value
Parameters

UpdateFeature(Feature)

Remarks
Return Value
Parameters

UpdateFeature(BaseShape)

Remarks
Return Value
Parameters

UpdateFeature(BaseShape,IDictionary<String,String>)

Remarks
Return Value
Parameters

RollbackTransaction()

Remarks
Return Value
Parameters

CommitTransaction()

Remarks
Return Value
Parameters

GetAllFeatures(IEnumerable<String>)

Remarks
Return Value
Parameters

GetAllFeatures(ReturningColumnsType)

Remarks
Return Value
Parameters

GetFeaturesOutsideBoundingBox(RectangleShape,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesOutsideBoundingBox(RectangleShape,ReturningColumnsType)

Remarks
Return Value
Parameters

GetFeaturesInsideBoundingBox(RectangleShape,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesInsideBoundingBox(RectangleShape,ReturningColumnsType)

Remarks
Return Value
Parameters

GetFeaturesForDrawing(RectangleShape,Double,Double,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesForDrawing(RectangleShape,Double,Double,ReturningColumnsType)

Remarks
Return Value
Parameters

SpatialQuery(BaseShape,QueryType,IEnumerable<String>)

Remarks
Return Value
Parameters

SpatialQuery(BaseShape,QueryType,ReturningColumnsType)

Remarks
Return Value
Parameters

SpatialQuery(Feature,QueryType,IEnumerable<String>)

Remarks
Return Value
Parameters

SpatialQuery(Feature,QueryType,ReturningColumnsType)

Remarks
Return Value
Parameters

ToString()

Remarks
Return Value
Parameters

Equals(Object)

Remarks
Return Value
Parameters

GetHashCode()

Remarks
Return Value
Parameters

GetType()

Remarks
Return Value
Parameters

Protected Methods

GetFeaturesNearestToCore(BaseShape,GeographyUnit,Int32,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesWithinDistanceOfCore(BaseShape,GeographyUnit,DistanceUnit,Double,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFirstFeaturesWellKnownTypeCore()

Remarks
Return Value
Parameters

GetFeaturesByIdsCore(IEnumerable<String>,IEnumerable<String>)

Remarks
Return Value
Parameters

ConvertToExternalProjection(IEnumerable<RectangleShape>)

Remarks
Return Value
Parameters

ConvertToInternalProjection(IEnumerable<RectangleShape>)

Remarks
Return Value
Parameters

ConvertToExternalProjection(RectangleShape)

Remarks
Return Value
Parameters

ConvertToInternalProjection(RectangleShape)

Remarks
Return Value
Parameters

ConvertToInternalProjection(BaseShape)

Remarks
Return Value
Parameters

ConvertToExternalProjection(IEnumerable<Feature>)

Remarks
Return Value
Parameters

ConvertToInternalProjection(IEnumerable<Feature>)

Remarks
Return Value
Parameters

ConvertToExternalProjection(Feature)

Remarks
Return Value
Parameters

ConvertToInternalProjection(Feature)

Remarks
Return Value
Parameters

GetColumnNamesInsideFeatureSource(IEnumerable<String>)

Remarks
Return Value
Parameters

GetColumnNamesOutsideFeatureSource(IEnumerable<String>)

Remarks
Return Value
Parameters

GetReturningColumnNames(ReturningColumnsType)

Remarks
Return Value
Parameters

OnDrawingProgressChanged(DrawingProgressChangedEventArgs)

Remarks
Return Value
Parameters

OnCustomColumnFetch(CustomColumnFetchEventArgs)

Remarks
Return Value
Parameters

OnCommittingTransaction(CommittingTransactionEventArgs)

Remarks
Return Value
Parameters

OnCommittedTransaction(CommittedTransactionEventArgs)

Remarks
Return Value
Parameters

OnOpeningFeatureSource(OpeningFeatureSourceEventArgs)

Remarks
Return Value
Parameters

OnOpenedFeatureSource(OpenedFeatureSourceEventArgs)

Remarks
Return Value
Parameters

OnClosingFeatureSource(ClosingFeatureSourceEventArgs)

Remarks
Return Value
Parameters

OnClosedFeatureSource(ClosedFeatureSourceEventArgs)

Remarks
Return Value
Parameters

ExecuteNonQueryCore(String)

Remarks
Return Value
Parameters

GetFeaturesByColumnValueCore(String,String)

Remarks
Return Value
Parameters

GetFeaturesByColumnValueCore(String,String,IEnumerable<String>)

Remarks
Return Value
Parameters

GetColumnsCore()

Remarks
Return Value
Parameters

GetCountCore()

Remarks
Return Value
Parameters

GetBoundingBoxCore()

Remarks
Return Value
Parameters

OpenCore()

Remarks
Return Value
Parameters

CloseCore()

Remarks
Return Value
Parameters

CommitTransactionCore(TransactionBuffer)

Remarks
Return Value
Parameters

GetAllFeaturesCore(IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesOutsideBoundingBoxCore(RectangleShape,IEnumerable<String>)

Remarks
Return Value
Parameters

GetFeaturesInsideBoundingBoxCore(RectangleShape,IEnumerable<String>)

Remarks
Return Value
Parameters

uBM=(RectangleShape,Double,Double,IEnumerable<String>,RectangleShape)

Remarks
Return Value
Parameters

uRM=(RectangleShape,Double,Double,IEnumerable<String>,RectangleShape)

Remarks
Return Value
Parameters

uhM=(RectangleShape,Double,Double,IEnumerable<String>,RectangleShape)

Remarks
Return Value
Parameters

GetFeaturesForDrawingCore(RectangleShape,Double,Double,IEnumerable<String>)

Remarks
Return Value
Parameters

SpatialQueryCore(BaseShape,QueryType,IEnumerable<String>)

Remarks
Return Value
Parameters

Finalize()

Remarks
Return Value
Parameters

MemberwiseClone()

Remarks
Return Value
Parameters

xBM=(Collection<Feature>,BaseShape,GeographyUnit,Int32)

Remarks
Return Value
Parameters

SplitColumnNames(IEnumerable<String>)

Remarks
Return Value
Parameters

CombineFieldValues(Dictionary<String,String>,IEnumerable<String>)

Remarks
Return Value
Parameters

zxM=(String,ICollection<String>)

Remarks
Return Value
Parameters

Public Properties

CanExecuteSqlQuery

This property specifies whether the FeatureSource can excute a SQL query or not. If it is false, then it will throw exception when these APIs are calleds: ExecuteScalar, ExecuteNonQuery, ExecuteQuery

Remarks

The default implementation is false.

Return Value

IsOpen

This property returns true if the FeatureSource is open and false if it is not.

Remarks

Various methods on the FeatureSource require that it be in an open state. If one of those methods is called when the state is not open, then the method will throw an exception. To enter the open state, you must call the FeatureSource's Open method. The method will raise an exception if the current FeatureSource is already open.

Return Value

IsInTransaction

This property returns true if the FeatureSource is in a transaction and false if it is not.

Remarks

To enter a transaction, you must first call the BeginTransaction method of the FeatureSource. It is possible that some FeatureSources are read-only and do not allow edits. To end a transaction, you must either call CommitTransaction or RollbackTransaction.

Return Value

IsTransactionLive

This property returns true if the features currently modified in a transaction are expected to reflect their state when calling other methods on the FeatureSource, such as spatial queries.

Remarks

The live transaction concept means that all of the modifications you perform during a transaction are live from the standpoint of the querying methods on the object. As an example, imagine that you have a FeatureSource that has 10 records in it. Next, you begin a transaction and then call GetAllFeatures. The result would be 10 records. After that, you call a delete on one of the records and call the GetAllFeatures again. This time you only get nine records, even though the transaction has not yet been committed. In the same sense, you could have added a new record or modified an existing one and those changes would be considered live, though not committed. In the case where you modify records – such as expanding the size of a polygon – those changes are reflected as well. For example, you expand a polygon by doubling its size and then do a spatial query that would not normally return the smaller record, but instead would return the larger records. In this case, the larger records are returned. You can set this property to be false, as well; in which case, all of the spatially related methods would ignore anything that is currently in the transaction buffer waiting to be committed. In such a case, only after committing the transaction would the FeatureSource reflect the changes.

Return Value

IsEditable

This property returns whether the FeatureSource allows edits or is read-only.

Remarks

This property is useful to check if a specific FeatureSource accepts editing. If you call BeginTransaction and this property is false, then an exception will be raised. For developers who are creating or extending a FeatureSource, it is expected that you override this virtual method if the new FeatureSource you are creating allows edits. By default, the decimalDegreesValue is false, meaning that if you want to allow edits you must override this method and return true.

Return Value

Projection

This property holds the projection object that is used within the FeatureSource to ensure that features inside of the FeatureSource are projected.

Remarks

By default this property is null, meaning that the data being passed back from any methods on the FeatureSource will be in the coordinate system of the raw data. When you specify a projection object in the property, all incoming and outgoing method calls will subject the features to projection. For example, if the spatial database you are using has all of its data stored in decimal degrees, but you want to see the data in UTM, you would create a projection object that goes from decimal degrees to UTM and set that as the projection. With this one property set, we will ensure that it will seem to you the developer that all of the data in the FeatureSource is in UTM. That means every spatial query will return UTM projected shapes. You can even pass in UTM shapes for the parameters. Internally, we will ensure that the shapes are converted to and from the projection without any intervention on the developer's part. In fact, even when you override virtual or abstract core methods in the FeatureSource, you will not need to know about projections at all. Simply work with the data in its native coordinate system. We will handle all of the projection at the high level method.

Return Value

GeoCache

The cache system.

Remarks

You must set IsActive to true for the Cache system. The default is not active.

Return Value

FeatureIdsToExclude

A collection of strings representing record id of features not to get in the Layer.

Remarks

This string collection is a handy place to specify what records not to get from the source. Suppose you have a shape file of roads and you want to hide the roads within a particular rectangle, simply execute GetFeaturesInsideBoundingBox() and add the id of the return features to the collection and forget about them. Since you can set this by Layer it makes is easy to determine what to and what not to.

Return Value

TransactionBuffer

The TransactionBuffer used in the Transaction System.

Remarks

The Transaction System The transaction system of a FeatureSource sits on top of the inherited implementation of any specific source, such as Oracle Spatial or Shape files. In this way, it functions the same way for every FeatureSource. You start by calling BeginTransaction. This allocates a collection of in-memory change buffers that are used to store changes until you commit the transaction. So, for example, when you call the Add, Delete or Update method, the changes to the feature are stored in memory only. If for any reason you choose to abandon the transaction, you can call RollbackTransaction at any time and the in-memory buffer will be deleted and the changes will be lost. When you are ready to commit the transaction, you call CommitTransaction and the collections of changes are then passed to the CommitTransactionCore method and the implementer of the specific FeatureSource is responsible for integrating your changes into the underlying FeatureSource. By default the IsLiveTransaction property is set to false, which means that until you commit the changes, the FeatureSource API will not reflect any changes that are in the temporary editing buffer. In the case where the IsLiveTransaction is set to true, then things function slightly differently. The live transaction concept means that all of the modifications you perform during a transaction are live from the standpoint of the querying methods on the object. As an example, imagine that you have a FeatureSource that has 10 records in it. Next, you begin a transaction and then call GetAllFeatures. The result would be 10 records. After that, you call a delete on one of the records and call the GetAllFeatures again. This time you only get nine records, even though the transaction has not yet been committed. In the same sense, you could have added a new record or modified an existing one and those changes would be considered live, though not committed. In the case where you modify records – such as expanding the size of a polygon – those changes are reflected as well. For example, you expand a polygon by doubling its size and then do a spatial query that would not normally return the smaller record, but instead would return the larger records. In this case, the larger records are returned. You can set this property to be false, as well; in which case, all of the spatially related methods would ignore anything that is currently in the transaction buffer waiting to be committed. In such a case, only after committing the transaction would the FeatureSource reflect the changes.

Return Value

Protected Properties

CanExecuteSqlQueryCore

This property specifies whether the FeatureSource can excute a SQL query or not. If it is false, then it will throw exception when these APIs are calleds: ExecuteScalar, ExecuteNonQuery, ExecuteQuery

Remarks

The default implementation is false.

Return Value

IsOpenCore

This property returns true if the FeatureSource is open and false if it is not.

Remarks

Various methods on the FeatureSource require that it be in an open state. If one of those methods is called when the state is not open, then the method will throw an exception. To enter the open state, you must call the FeatureSource's Open method. The method will raise an exception if the current FeatureSource is already open.

Return Value

FeatureSourceColumns

This property gets the columns of the feature source.

Remarks

None.

Return Value

Public Events

DrawingProgressChanged N/A

Remarks

N/A

Event Arguments:DrawingProgressChangedEventArgs

CustomColumnFetch This event is raised when fields are requested in a feature source method that do not exist in the feature source. It allows you to supplement the data from any outside source you have.

Remarks

This event is raised when fields are requested in a feature source method that do not exist in the feature source. It allows you to supplement the data from any outside source you have. It is used primarily when you have data relating to a particular feature or set of features that is not within source of the data. For example, you may have a shape file of the world whose .dbf component describes the area and population of each country. Additionally, in an outside SQL Server table, you may also have data about the countries, and it is this data that you wish to use for determining how you want to color each country. To integrate this SQL data, you simply create a file name that does not exist in the .dbf file. Whenever Map Suite is queried to return records that specifically require this field, the FeatureSource will raise this event and allow you the developer to supply the data. In this way, you can query the SQL table and store the data in some sort of collection, and then when the event is raised, simply supply that data. As this is an event, it will raise for each feature and field combination requested. This means that the event can be raised quite often, and we suggest that you cache the data you wish to supply in memory. We recommend against sending out a new SQL query each time this event is raised. Image that you are supplementing two columns and your query returns 2,000 rows. This means that if you requested those fields, the event would be raised 4,000 times.

Event Arguments:CustomColumnFetchEventArgs

CommittingTransaction This event is raised after the CommitTransaction method is called, but before the CommitTransactionCore is called. This allows you access to the TransactionBuffer before the transaction is committed. It also allows you to cancel the pending commit of the transaction.

Remarks

This event is raised before the CommitTransactionCore is called and allows you access to the TransactionBuffer before the transaction is committed. It also allows you to cancel the pending transaction. The TransactionBuffer is the object that stores all of the pending transactions and is accessible through this event to allow you to either add, remove or modify transactions. In the event that you cancel the CommitTransaction method, the transaction remains intact and you will still be editing. This makes it a nice place to possibly check for connectivity before the TransactionCore code is run, which is where the records are actually committed. Calling the RollBackTransaction method is the only way to permanently cancel a pending transaction without committing it.

Event Arguments:CommittingTransactionEventArgs

CommittedTransaction This event is raised after the CommitTransaction and the CommitTransactionCore are called and allows you access to the TransactionBuffer and the TransactionResults object before CommitTransaction method is returned.

Remarks

This event is raised after the CommitTransactionCore is called and allows you access to the TransactionBuffer and the TransactionResults object before CommitTransaction method is returned. With this event, you can analyse the results of the transaction and do any cleanup code necessary. In the event some of the records did not commit, you can handle those items here. The TransactionResults object is passed out of the CommitTransaction method so you could analyze it then; however, this is the only place where you have access to both the TransactionResults object and the TransactionBuffer object at the same time. These are useful together to try and determine what went wrong and possibly try and re-commit them. At the time of this event you will technically be out of the current transaction.

Event Arguments:CommittedTransactionEventArgs

OpeningFeatureSource This event is called before the opening of the FeatureSource.

Remarks

This event is called before the opening of the FeatureSource. Technically, this event is called after the calling of the Open method on the FeatureSource, but before the protected OpenCore method. It is typical that the FeatureSource may be opened and closed may times during the life cycle of your application. The type of control the MapEngine is embedded in will dictate how often this happens. For example, in the case of the Web Edition, each time a FeatureSource is in the Ajax or Post Back part of the page cycle, it will close the FeatureSource before returning back to the client. This is to conserve resources, as the web is a connection-less environment. In the case of the Desktop Edition, we can keep the FeaureSources open, knowing that we can maintain a persistent connection.

Event Arguments:OpeningFeatureSourceEventArgs

OpenedFeatureSource This event is called after the opening of the FeatureSource.

Remarks

This event is called after the opening of the FeatureSource. Technically, this event is called after the calling of the Open method on the FeatureSource and after the protected OpenCore method is called. It is typical that the FeatureSource may be opened and closed may times during the life cycle of your application. The type of control the MapEngine is embedded in will dictate how often this happens. For example, in the case of the Web Edition, each time a FeatureSource is in the Ajax or Post Back part of the page cycle, it will close the FeatureSource before returning back to the client. This is to conserve resources, as the web is a connection-less environment. In the case of the Desktop Edition, we can keep the FeaureSources open, knowing that we can maintain a persistent connection.

Event Arguments:OpenedFeatureSourceEventArgs

ClosingFeatureSource This event is called before the closing of the FeatureSource.

Remarks

This event is called before the closing of the FeatureSource. Technically, this event is called after the calling of the Close method on the FeatureSource, but before the protected CloseCore method. It is typical that the FeatureSource may be opened and closed may times during the life cycle of your application. The type of control the MapEngine is embedded in will dictate how often this happens. For example, in the case of the Web Edition, each time a FeatureSource is in the Ajax or Post Back part of the page cycle, it will close the FeatureSource before returning back to the client. This is to conserve resources, as the web is a connection-less environment. In the case of the Desktop Edition, we can keep the FeaureSources open, knowing that we can maintain a persistent connection.

Event Arguments:ClosingFeatureSourceEventArgs

ClosedFeatureSource This event is called after the closing of the FeatureSource.

Remarks

This event is called after the closing of the FeatureSource. Technically, this event is called after the calling of the Close method on the FeatureSource and after the protected CloseCore method. It is typical that the FeatureSource may be opened and closed may times during the life cycle of your application. The type of control the MapEngine is embedded in will dictate how often this happens. For example, in the case of the Web Edition, each time a FeatureSource is in the Ajax or Post Back part of the page cycle, it will close the FeatureSource before returning back to the client. This is to conserve resources, as the web is a connection-less environment. In the case of the Desktop Edition, we can keep the FeaureSources open, knowing that we can maintain a persistent connection.

Event Arguments:ClosedFeatureSourceEventArgs