User Tools

Site Tools


thinkgeo.mapsuite.core.featuresource

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
thinkgeo.mapsuite.core.featuresource [2015/09/17 09:00]
admin
thinkgeo.mapsuite.core.featuresource [2017/03/16 21:59] (current)
Line 1: Line 1:
-====== ThinkGeo.MapSuite.Core ====== +====== ThinkGeo.MapSuite.Core.FeatureSource ​====== 
-===== MapSuiteCore ​===== + 
-=== Classes === +{{section>​upgrade_map_suite_to_10.0}} 
-<div characters_index>​ + 
-[[#​classes_a|A]] +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. 
-[[#​classes_b|B]] +===== Inheritance Hierarchy ​===== 
-[[#​classes_c|C]] +  ​*System.Object 
-[[#​classes_d|D]] +    ​***ThinkGeo.MapSuite.Core.FeatureSource** 
-[[#​classes_e|E]] +      *[[ThinkGeo.MapSuite.Core.CadFeatureSource]] 
-[[#​classes_f|F]] +      *[[ThinkGeo.MapSuite.Core.CloudFileFeatureSource]] 
-[[#​classes_g|G]] +      *[[ThinkGeo.MapSuite.Core.WkbFileFeatureSource]] 
-[[#​classes_h|H]] +      *[[ThinkGeo.MapSuite.Core.DelimitedFeatureSource]] 
-[[#​classes_i|I]] +      *[[ThinkGeo.MapSuite.Core.GpxFeatureSource]] 
-[[#​classes_j|J]] +      *[[ThinkGeo.MapSuite.Core.KmlFeatureSource]] 
-[[#​classes_k|K]] +      *[[ThinkGeo.MapSuite.Core.S57FeatureSource]] 
-[[#​classes_l|L]] +      *[[ThinkGeo.MapSuite.Core.BoundarySolutionsParcelFeatureSource]] 
-[[#​classes_m|M]] +      *[[ThinkGeo.MapSuite.Core.NoaaWeatherWarningsFeatureSource]] 
-[[#​classes_n|N]] +      *[[ThinkGeo.MapSuite.Core.FileGeoDatabaseFeatureSource]] 
-[[#​classes_o|O]] +      *[[ThinkGeo.MapSuite.Core.OracleFeatureSource]] 
-[[#​classes_p|P]] +      *[[ThinkGeo.MapSuite.Core.InMemoryGridFeatureSource]] 
-[[#​classes_q|Q]] +      *[[ThinkGeo.MapSuite.Core.TinyGeoFeatureSource]] 
-[[#​classes_r|R]] +      *[[ThinkGeo.MapSuite.Core.TabFeatureSource]] 
-[[#​classes_s|S]] +      *[[ThinkGeo.MapSuite.Core.GridFeatureSource]] 
-[[#​classes_t|T]] +      *[[ThinkGeo.MapSuite.Core.MultipleFeatureSource]] 
-[[#​classes_u|U]] +      *[[ThinkGeo.MapSuite.Core.WfsFeatureSource]] 
-[[#​classes_v|V]] +      *[[ThinkGeo.MapSuite.Core.MultipleShapeFileFeatureSource]] 
-[[#​classes_w|W]] +      *[[ThinkGeo.MapSuite.Core.MsSql2008FeatureSource]] 
-[[#​classes_x|X]] +      *[[ThinkGeo.MapSuite.Core.InMemoryFeatureSource]] 
-[[#​classes_z|Z]] +      *[[ThinkGeo.MapSuite.Core.ShapeFileFeatureSource]] 
-</div>+===== Members Summary ===== 
 +==== Public Constructors ==== 
 +==== Protected Constructors ==== 
 +** {{wiki:​ProtectedMethod.gif|}} FeatureSource() ** 
 + 
 +  * //This is the default constructor for the abstract FeatureSource class.// 
 +== Remarks == 
 +  * //As this method is protected, you may only add code to this method if you override it from an inheriting class.// 
 +== Parameters ==
 <div newline></​div>​ <div newline></​div>​
 +==== Public Methods ====
 +** {{wiki:​PublicMethod.gif|}} GetBoundingBox() **
  
-> <​html><​strong id="​classes_a"><​/strong><​/html>​**A**+  * //This method returns the bounding box which encompasses all of the features in the FeatureSource.//​ 
 +== Remarks == 
 +  ​//This method is the concrete wrapper for the virtual method GetBoundingBoxCore. It will return whatever is returned by the GetBoundingBoxCore method, along with any additions or subtractions made if you are in a transaction and that transaction is configured to be live. To determine what the default implementation of the abstract GetBoundingBoxCore method is, please see the documentation for it. The default implementation of GetBoundingBoxCore uses the GetAllRecordsCore method to calculate the bounding box of the FeatureSource. We strongly recommend that you provide your own implementation for this method that will be more efficient. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
  
-  * [[ThinkGeo.MapSuite.Core.AddedGeoCollectionEventArgs|AddedGeoCollectionEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.AddingGeoCollectionEventArgs|AddingGeoCollectionEventArgs]]<div newline></​div><​div>​N/​A</​div>​ +  * Type:[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]] 
-  * [[ThinkGeo.MapSuite.Core.AdornmentLayer|AdornmentLayer]]<​div newline></​div><​div>​This is the base class of AdornmentLayers. The AdornmentLayer is used to place adornments on the map. Two types of AdornmentLayers are providedScaleLineAdornmentLayer and ScaleBarAdornmentLayer.</​div>​ +  * Description:This method returns ​the bounding box which encompasses ​all of the features ​in the FeatureSource.
-  * [[ThinkGeo.MapSuite.Core.AdornmentLayerDrawingEventArgs|AdornmentLayerDrawingEventArgs]]<​div newline></​div><​div>​This is the event arguments class for the AdornmentLayerDrawing event. It is raised before the AdornmentLayer is drawn.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.AdornmentLayerDrawnEventArgs|AdornmentLayerDrawnEventArgs]]<​div newline></​div><​div>​This is the event arguments class for the AdornmentLayerDrawn event. It is raised after the AdornmentLayer is drawn.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.AdornmentLayersDrawingEventArgs|AdornmentLayersDrawingEventArgs]]<​div newline></​div><​div>​This is the event arguments class for the AdornmentLayersDrawing event. It is raised before any of the AdornmentLayers are drawn.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.AdornmentLayersDrawnEventArgs|AdornmentLayersDrawnEventArgs]]<​div newline></​div><​div>​This is the event arguments class for the AdornmentLayersDrawn event. It is raised after all of the AdornmentLayers have been drawn.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.AngleDistanceCogoCall|AngleDistanceCogoCall]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.AppliedFiltersFeatureSourceEventArgs|AppliedFiltersFeatureSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ApplyingFiltersFeatureSourceEventArgs|ApplyingFiltersFeatureSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.AreaBaseShape|AreaBaseShape]]<​div newline></​div><​div>​This abstract class is the root of all area-based shapes, such as RectangleShape and PolygonShape.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.AreaFilterCondition|AreaFilterCondition]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.AreaStyle|AreaStyle]]<​div newline></​div><​div>​This class is used to draw area features.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.AreaStyleAdvanced|AreaStyleAdvanced]]<​div newline></​div><​div>​This class represents ​the advanced drawing options for area styles.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.AreaStyles|AreaStyles]]<​div newline></​div><​div>​This class is a collection of predefined styles and helper methods for creating styles.</​div>​+
  
-> <​html><​strong id="​classes_b">​</strong></html>**B**+== Parameters == 
 +<div newline></div> 
 +** {{wiki:​PublicMethod.gif|}} CloneDeep() ​**
  
-  * [[ThinkGeo.MapSuite.Core.BackgroundLayer|BackgroundLayer]]<​div newline><​/div><​div>​This class draws the background ​of the map.</div> +  * //Create a copy of a FeatureSource using the deep clone process.// 
-  * [[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]<​div newline><​/div><​div>​The abstract class from which area shapes, line shapes, and point shapes inherit from.</​div>​ +== Remarks == 
-  * [[ThinkGeo.MapSuite.Core.BingMapsLayer|BingMapsLayer]]<​div newline></​div><​div>​N/​A</​div>​ +  * //The difference between deep clone and shallow clone is as follows: In shallow cloningonly the object ​is copied; ​the objects within it are notBy contrast, deep cloning copies ​the cloned object as well as all the objects within.//
-  * [[ThinkGeo.MapSuite.Core.BingMapsZoomLevelSet|BingMapsZoomLevelSet]]<​div newline><​/div><​div>​This class represents the zoom levels used by Bing Maps.</div> +
-  * [[ThinkGeo.MapSuite.Core.BitmapTile|BitmapTile]]<​div newline></​div><​div>​This class represents a NativeImageTile,​ which is defined ​as scaleRectangleBox and a byte array for its tile bitmap.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.BitmapTileCache|BitmapTileCache]]<​div newline></​div><​div>​This ​is the base class for BitmapTileCache system which inherits from TileCache class.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.BoundarySolutionsParcelFeatureLayer|BoundarySolutionsParcelFeatureLayer]]<​div newline></​div><​div>​This class draws the parcel featureLayer of the map.</div> +
-  * [[ThinkGeo.MapSuite.Core.BoundarySolutionsParcelFeatureSource|BoundarySolutionsParcelFeatureSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.BuildingIndexShapeFileFeatureSourceEventArgs|BuildingIndexShapeFileFeatureSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the BuildingIndex event in ShapeFileFeatureSource class.</div>+
  
-> <​html><​strong id="​classes_c"></​strong></​html>​**C**+== Return Value == 
 +  ​Type:​[[ThinkGeo.MapSuite.Core.FeatureSource|FeatureSource]] 
 +  ​Description:​A cloned FeatureSource.
  
-  * [[ThinkGeo.MapSuite.Core.CSharpGeoCodeFormatter|CSharpGeoCodeFormatter]]<​div newline></​div><​div>​This class formats a GeoObjectModel into C# code.</​div>​ +== Parameters == 
-  * [[ThinkGeo.MapSuite.Core.CadFeatureLayer|CadFeatureLayer]]<div newline></​div><​div>​N/​A</​div>​ +<div newline></​div>​ 
-  [[ThinkGeo.MapSuite.Core.CadFeatureSource|CadFeatureSource]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​PublicMethod.gif|}} Open() ​**
-  ​[[ThinkGeo.MapSuite.Core.CircularKrigingGridInterpolationModel|CircularKrigingGridInterpolationModel]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.ClassBreak|ClassBreak]]<​div newline></​div><​div>​This class represents a single class break.</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.ClassBreakStyle|ClassBreakStyle]]<​div newline></​div><​div>​This class represents a style based on class break values.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ClearedItemsGeoCollectionEventArgs|ClearedItemsGeoCollectionEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ClearingItemsGeoCollectionEventArgs|ClearingItemsGeoCollectionEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ClosedFeatureSourceEventArgs|ClosedFeatureSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the ClosedFeatureSource event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ClosedRasterSourceEventArgs|ClosedRasterSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the ClosedRasterSource event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ClosingFeatureSourceEventArgs|ClosingFeatureSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the ClosingFeatureSource event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ClosingRasterSourceEventArgs|ClosingRasterSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the ClosingRasterSource event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ClusterPointStyle|ClusterPointStyle]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CogoCall|CogoCall]]<​div newline></​div><​div>​This is an abstract class which is the basis for each of the different types of COGO calls In the abstract class we define that a call need to be able to produce a line segment as well as produce its traverse and description string.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CogoInformation|CogoInformation]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CogoObject|CogoObject]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CommittedTransactionEventArgs|CommittedTransactionEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the CommittedTransaction event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CommittingTransactionEventArgs|CommittingTransactionEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the CommittingTransaction event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CompositeStyle|CompositeStyle]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.Conversion|Conversion]]<​div newline></​div><​div>​This static class provides a conversion method to go to and from different units.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CreatedMemberNodeGeoObjectModelerEventArgs|CreatedMemberNodeGeoObjectModelerEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the CreatedMemberNode event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CreatedMemberObjectGeoObjectModelerEventArgs|CreatedMemberObjectGeoObjectModelerEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the CreatedMemberObject event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CreatingMemberNodeGeoObjectModelerEventArgs|CreatingMemberNodeGeoObjectModelerEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the CreatingMemberNode event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CreatingMemberObjectGeoObjectModelerEventArgs|CreatingMemberObjectGeoObjectModelerEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the CreatingMemberObject event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CreatingRequestGoogleMapsLayerEventArgs|CreatingRequestGoogleMapsLayerEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CustomColumnFetchEventArgs|CustomColumnFetchEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the CustomFieldFetch event.</​div>​+
  
-> <​html><​strong id="​classes_d"><​/strong><​/html>​**D**+  * //This method opens the FeatureSource so that it is initialized and ready to use.// 
 +== Remarks == 
 +  ​//This method is the concrete wrapper for the abstract method OpenCore. The Open method plays an important role, as it is responsible for initializing the FeatureSource. Most methods on the FeatureSource will throw an exception if the state of the FeatureSource is not opened. When the map draws each layer, it will open the FeatureSource as one of its first steps, then after it is finished drawing with that layer it will close it. In this way we are sure to release all resources used by the FeatureSource. When implementing the abstract method, consider opening files for file-based sources, connecting to databases in the database-based sources and so on. You will get a chance to close these in the Close method of the FeatureSource. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
  
-  * [[ThinkGeo.MapSuite.Core.DataGridPrinterLayer|DataGridPrinterLayer]]<​div newline></​div><​div>​N/​A</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.DateRangeFilterCondition|DateRangeFilterCondition]]<​div newline></​div><​div>​N/​A</​div>​ +  * Type:Void 
-  * [[ThinkGeo.MapSuite.Core.DbfColumn|DbfColumn]]<​div newline></​div><​div>​This class represents the column information specific to a DBF column.</​div>​ +  * Description:​None
-  * [[ThinkGeo.MapSuite.Core.DbfLinkRecords|DbfLinkRecords]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DbfLinkSource|DbfLinkSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DecimalDegreesHelper|DecimalDegreesHelper]]<​div newline></​div><​div>​This class contains a static routine for converting between degree-minute-second measurement and decimal degree measurement. In essense, it is a routine for converting from a non-decimal degree unit to decimal degree unit distance.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DirectionDistanceCogoCall|DirectionDistanceCogoCall]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DistinctColumnValue|DistinctColumnValue]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DotDensityStyle|DotDensityStyle]]<​div newline></​div><​div>​This class allows you to display information by drawing points on an area based on a value from the features data.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingAttributionLayerEventArgs|DrawingAttributionLayerEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingExceptionLayerEventArgs|DrawingExceptionLayerEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingFeaturesEventArgs|DrawingFeaturesEventArgs]]<​div newline></​div><​div>​This is the event arguments class for the DrawingFeatures event of the FeatureLayer.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingProgressChangedEventArgs|DrawingProgressChangedEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingWrappingFeaturesFeatureLayerEventArgs|DrawingWrappingFeaturesFeatureLayerEventArgs]]<​div newline></​div><​div>​This is the event arguments class for the DrawingFeatures event of the FeatureLayer.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawnAttributionLayerEventArgs|DrawnAttributionLayerEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawnExceptionLayerEventArgs|DrawnExceptionLayerEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DynamicIsoLineLayer|DynamicIsoLineLayer]]<​div newline></​div><​div>​N/​A</​div>​+
  
-> <​html><​strong id="​classes_e">​</strong></html>**E**+== Parameters == 
 +<div newline></div> 
 +** {{wiki:​PublicMethod.gif|}} Close() ​**
  
-  * [[ThinkGeo.MapSuite.Core.EcwRasterLayer|EcwRasterLayer]]<​div newline><​/div><​div>​This class represents an ECW image to be drawn on the map.</div> +  * //This method closes ​the FeatureSource and releases any resources it was using./
-  * [[ThinkGeo.MapSuite.Core.EcwRasterSource|EcwRasterSource]]<​div newline><​/div><​div>​This class represents the ECW raster source.</div> +== Remarks == 
-  * [[ThinkGeo.MapSuite.Core.EditTools|EditTools]]<​div newline></​div><​div>​This class is wrapper ​class for the FeatureLayer that isolates only the editing methods to make them easily accessible ​to the programmer.</​div>​ +  * //​This ​method ​is the concrete ​wrapper for the abstract method CloseCore. The Close method plays an important role in the life cycle of the FeatureSource. It may be called after drawing ​to release any memory and other resources that were allocated since the Open method was calledIf you override the Core version of this method, it is recommended that you take the following things into account: ​This method may be called multiple times, so we suggest you write the method so that that a call to closed FeatureSource is ignored ​and does not generate an errorWe also suggest that in the Close you free all resources that have been openedRemember that the object will not be destroyed, but will be re-opened possibly ​in the near futureAs this is a concrete public method that wraps a Core method, we reserve ​the right to add events and other logic to pre- or post-process data returned by the Core version of the methodIn this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needsIf you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//
-  * [[ThinkGeo.MapSuite.Core.EllipseShape|EllipseShape]]<​div newline></​div><​div>​This class represents an ellipse ​that is defined with center point, ​height ​and a width.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.EmpiricalFunctionCoefficients|EmpiricalFunctionCoefficients]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.EncryptedFileBitmapTileCache|EncryptedFileBitmapTileCache]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ExecutingSqlStatementMsSql2008FeatureSourceEventArgs|ExecutingSqlStatementMsSql2008FeatureSourceEventArgs]]<​div newline></​div><​div>​This class represents ​the parameters passed ​in through ​the ExecutingSqlStatement event in MsSql2008FeatureSource.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ExecutingSqlStatementOracleFeatureSourceEventArgs|ExecutingSqlStatementOracleFeatureSourceEventArgs]]<​div newline></​div><​div>​This class represents ​the parameters passed in through ​the ExecutingSqlStatement event in OracleFeatureSource.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ExponentialKrigingGridInterpolationModel|ExponentialKrigingGridInterpolationModel]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ExtentHelper|ExtentHelper]]<​div newline><​/div><​div>​This static class exposes a number of helpful methods when dealing with extents.<​/div>+
  
-> <​html><​strong id="​classes_f"></​strong></​html>​**F**+== Return Value == 
 +  ​Type:Void 
 +  ​Description:​None
  
-  * [[ThinkGeo.MapSuite.Core.Feature|Feature]]<​div newline></​div><​div>​The class Feature is the basic unit of which a FeatureSource is composed. A FeatureSource can be taken from a collection of Features stored in a ShapeFile, SQL Server 2008, Oracle, etc.A Feature is the basic data unit structure which is comprised of IDs that mark the identification of the Feature, a shape and a collection of data.</​div>​ +== Parameters == 
-  * [[ThinkGeo.MapSuite.Core.FeatureCache|FeatureCache]]<div newline></​div><​div>​FeatureCache is a cache system used in FeatureSource to speed up the fetching data system.</​div>​ +<div newline></​div>​ 
-  [[ThinkGeo.MapSuite.Core.FeatureLayer|FeatureLayer]]<​div newline></​div><​div>​This class represents a layer that is comprised of feature data.</​div>​ +** {{wiki:​PublicMethod.gif|}} BeginTransaction() ​**
-  ​[[ThinkGeo.MapSuite.Core.FeatureSource|FeatureSource]]<​div newline></​div><​div>​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.</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.FeatureSourceColumn|FeatureSourceColumn]]<​div newline></​div><​div>​This class represents a column contained within a FeatureSource.</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.FileBitmapTile|FileBitmapTile]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.FileBitmapTileCache|FileBitmapTileCache]]<​div newline></​div><​div>​This class is a concrete class inherits from BitmapTileCache. In this class, the tiles will be saved in disk and can be viewed very conveniently.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.FileGeoDatabaseFeatureLayer|FileGeoDatabaseFeatureLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.FileGeoDatabaseFeatureSource|FileGeoDatabaseFeatureSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.FileNativeImageTileCache|FileNativeImageTileCache]]<​div newline></​div><​div>​This class is a concrete class inherits from NativeImageTileCache. In this class, the tiles will be saved in disk and can be viewed very conveniently.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.FilterCondition|FilterCondition]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.FilterStyle|FilterStyle]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.FormattedPositionStyleEventArgs|FormattedPositionStyleEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.FormattingPositionStyleEventArgs|FormattingPositionStyleEventArgs]]<​div newline></​div><​div>​N/​A</​div>​+
  
-> <​html><​strong id="​classes_g"><​/strong><​/html>​**G**+  * //This method starts a new transaction if the FeasuteSource allows editing// 
 +== Remarks == 
 +  ​//This method is used to start a transaction,​ assuming that the FeatureSource allows editing. There are some additional prerequisites to beginning a transaction,​ such as ensuring that a transaction is not already in progress. You must also be sure that the FeatureSource has been opened. 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.//
  
-  * [[ThinkGeo.MapSuite.Core.GaussianKrigingGridInterpolationModel|GaussianKrigingGridInterpolationModel]]<​div newline></​div><​div>​N/​A</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.GdiPlusGeoCanvas|GdiPlusGeoCanvas]]<​div newline></​div><​div>​This class represents a canvas that is used to draw geographic shapes with GDI+.</​div>​ +  * Type:Void 
-  * [[ThinkGeo.MapSuite.Core.GdiPlusRasterLayer|GdiPlusRasterLayer]]<​div newline></​div><​div>​This class represents general image types to be drawn on the map, such as .BMP, .JPG, .PNG, etc.</​div>​ +  * Description:​None
-  * [[ThinkGeo.MapSuite.Core.GdiPlusRasterSource|GdiPlusRasterSource]]<​div newline></​div><​div>​This class allows you to view standard .NET GDI+ image types such as BMP, TIF, JPG, and PNG.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeneratingGridFeatureSourceEventArgs|GeneratingGridFeatureSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoBrush|GeoBrush]]<​div newline></​div><​div>​Defines objects used to fill the interiors of AreaBaseShapes,​ such as MultiPolygonShape,​ PolygonShape,​ EllipseShape,​ and other AreaBaseShapes.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoBrushes|GeoBrushes]]<​div newline></​div><​div>​Provides a collection of predefined GeoBrushes</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoCanvas|GeoCanvas]]<​div newline></​div><​div>​This class represents a canvas that is used to draw geographic shapes. It is intended to be inherited for the implementation of different drawing systems, such as GDI+ or WPF.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoCodeFormatter|GeoCodeFormatter]]<​div newline></​div><​div>​This class formats a GeoObjectModel into program code.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoCodeGenerator|GeoCodeGenerator]]<​div newline></​div><​div>​This class generates code that recreates any given object.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoCollection<​T>​|GeoCollection<​T>​]]<​div newline></​div><​div>​This class is a collection with some methods specialized for dealing with Layers and other spatial classes.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoColors|GeoColors]]<​div newline></​div><​div>​This class is a collection of predefined colors</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoDbf|GeoDbf]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoFont|GeoFont]]<​div newline></​div><​div>​This class represents a font that is used to label features on a GeoCanvas.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoHatchBrush|GeoHatchBrush]]<​div newline></​div><​div>​This class represents a brush that fills with various patterns.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoImage|GeoImage]]<​div newline></​div><​div>​This class represents an image you want to use on the GeoCanvas.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoLinearGradientBrush|GeoLinearGradientBrush]]<​div newline></​div><​div>​Encapsulates a GeoBrush with a linear gradient.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoObjectModel|GeoObjectModel]]<​div newline></​div><​div>​This class represent the model of a top level object.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoObjectModeler|GeoObjectModeler]]<​div newline></​div><​div>​This class creates models for objects and recreates objects from models.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoObjectNode|GeoObjectNode]]<​div newline></​div><​div>​This class represent the model of an object.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoPen|GeoPen]]<​div newline></​div><​div>​This class represents a GeoPen, which is used to draw lines on a GeoCanvas.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoPens|GeoPens]]<​div newline></​div><​div>​Provides a collection of predefined GeoPens</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoSerializationFormatter|GeoSerializationFormatter]]<​div newline></​div><​div>​This class formats a GeoObjectModel into serialized data.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoSerializer|GeoSerializer]]<​div newline></​div><​div>​This class serializes an object.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoSolidBrush|GeoSolidBrush]]<​div newline></​div><​div>​This class defines a GeoBrush of a single color. Brushes are used to fill area shapes on a GeoCanvas.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoTextureBrush|GeoTextureBrush]]<​div newline></​div><​div>​This class is used to fill an area with a image texture.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoTiffRasterLayer|GeoTiffRasterLayer]]<​div newline></​div><​div>​This class represents a TIFF image to be drawn on the map.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoTiffRasterSource|GeoTiffRasterSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeographicColors|GeographicColors]]<​div newline></​div><​div>​This class is a convenient way to access a predefined set of geographic colors.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.Geohash|Geohash]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeometryCollectionShape|GeometryCollectionShape]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GettingCacheImageBitmapTileCacheEventArgs|GettingCacheImageBitmapTileCacheEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GettingColumnsFeatureSourceEventArgs|GettingColumnsFeatureSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GettingFeaturesByIdsFeatureSourceEventArgs|GettingFeaturesByIdsFeatureSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GettingFeaturesForDrawingFeatureSourceEventArgs|GettingFeaturesForDrawingFeatureSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GoogleMapsLayer|GoogleMapsLayer]]<​div newline></​div><​div>​Represents an object that encapsulates a Google Map layer.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GoogleMapsZoomLevelSet|GoogleMapsZoomLevelSet]]<​div newline></​div><​div>​This class represents the zoom levels used by Google Maps.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GottenCacheImageBitmapTileCacheEventArgs|GottenCacheImageBitmapTileCacheEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GottenColumnsFeatureSourceEventArgs|GottenColumnsFeatureSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GottenFeatureValueClassBreakStyleEventArgs|GottenFeatureValueClassBreakStyleEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GpxFeatureLayer|GpxFeatureLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GpxFeatureSource|GpxFeatureSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GradientStyle|GradientStyle]]<​div newline></​div><​div>​This gradient style is a new style with the concept of GradientBrush. By specifying the LowerValue and its color, as well as the UpperValue and its color, we can set the color of each feature based on a column value using linear interpolation.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GraticuleAdornmentLayer|GraticuleAdornmentLayer]]<​div newline></​div><​div>​GraticuleAdornmentLayer shows Meridians and Parallels displaying through the map. Meridians are lines of longitude and they have a North South orientation. Parallels are lines of latitude and they have an East West orientation. Showing graticule for latitude and longitude is a standard way in cartography to give spatial references to the users.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GridCell|GridCell]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GridDefinition|GridDefinition]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GridFeatureLayer|GridFeatureLayer]]<​div newline></​div><​div>​This class uses the grid file provided.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GridFeatureSource|GridFeatureSource]]<​div newline></​div><​div>​Reads cell data from a grid file and displays them in appropriate colors based on their values.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GridInterpolationModel|GridInterpolationModel]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GridIsoLineLayer|GridIsoLineLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GroupLayer|GroupLayer]]<​div newline></​div><​div>​This class represents a Layer backed by a group of layers.</​div>​+
  
-> <​html><​strong id="​classes_h">​</strong></html>**H**+== Parameters == 
 +<div newline></div> 
 +** {{wiki:​PublicMethod.gif|}} AddFeature(Feature) ​**
  
-  * [[ThinkGeo.MapSuite.Core.HeatLayer|HeatLayer]]<​div newline><​/div><​div>​HeatLayer allows you to better visualize data by making areas of high concentration "​hotter"​ using warmer colors and low density areas visually cooler.</div> +  * //This method adds a new Feature ​to an existing transaction./
-  * [[ThinkGeo.MapSuite.Core.HeatStyle|HeatStyle]]<​div newline></​div><​div>​HeatStyle allows ​you to better visualize data by making areas of high concentration "​hotter"​ using warmer colors ​and low density areas visually cooler.</​div>​ +== Remarks == 
-  * [[ThinkGeo.MapSuite.Core.HueFamilyAreaStyle|HueFamilyAreaStyle]]<​div newline></​div><​div>​This class is used to draw area features.</div>+  * //This method adds a new Feature to an existing transactionYou will need to ensure that you have started a transaction by calling BeginTransactionThe 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 filesIn 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 FeatureSourceBy 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 bufferIn the case where the IsLiveTransaction is set to true, then things function slightly differentlyThe 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 objectAs 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 committedIn such a case, only after committing the transaction would the FeatureSource reflect the changes.//
  
-> <​html><​strong id="​classes_i"></​strong></​html>​**I**+== Return Value == 
 +  ​Type:​String 
 +  ​Description:​This string is the ID that will uniquely identify this Feature while it is in a transaction.
  
-  * [[ThinkGeo.MapSuite.Core.IconStyle|IconStyle]]<​div newline></​div><​div>​This class displays an icon with text from the data of the feature.</​div>​ +== Parameters == 
-  * [[ThinkGeo.MapSuite.Core.IconValueItem|IconValueItem]]<​div newline><​/div><​div>​This class is a single item in an IconValueStyle.<​/div> +  * //feature// 
-  * [[ThinkGeo.MapSuite.Core.IconValueStyle|IconValueStyle]]<​div newline><​/div><​div>​This class allows you to choose different icons based on values in the data of a feature.<​/div> +    Type:[[ThinkGeo.MapSuite.Core.Feature|Feature]] 
-  * [[ThinkGeo.MapSuite.Core.ImagePrinterLayer|ImagePrinterLayer]]<div newline></​div><​div>​N/​A</​div>​ +    Description:​This parameter represents ​the new Feature that will be added to the transaction.
-  [[ThinkGeo.MapSuite.Core.InMemoryBitmapTileCache|InMemoryBitmapTileCache]]<​div newline></​div><​div>​This class is a concrete class inherits from BitmapTileCache. In this class, ​the tiles will be saved in memory and it provides some properties ​to control it very easily.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.InMemoryFeatureLayer|InMemoryFeatureLayer]]<​div newline></​div><​div>​This layer is backed by memory and is typically used for temporary features.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.InMemoryFeatureSource|InMemoryFeatureSource]]<​div newline></​div><​div>​This class represents a FeatureSource backed by memory, more specifically an in memory collection InternalFeatures.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.InMemoryGridFeatureLayer|InMemoryGridFeatureLayer]]<​div newline></​div><​div>​This class uses the grid file provided.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.InMemoryGridFeatureSource|InMemoryGridFeatureSource]]<​div newline></​div><​div>​Reads cell data from a grid file and displays them in appropriate colors based on their values.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.InMemoryGridIsoLineLayer|InMemoryGridIsoLineLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.InsertedGeoCollectionEventArgs|InsertedGeoCollectionEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.InsertingGeoCollectionEventArgs|InsertingGeoCollectionEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.InverseDistanceWeightedGridInterpolationModel|InverseDistanceWeightedGridInterpolationModel]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.IsoLineLayer|IsoLineLayer]]<​div newline></​div><​div>​N/​A</​div>​+
  
-<html><​strong id="​classes_j"></​strong></html>**J**+<div newline></div> 
 +** {{wiki:​PublicMethod.gif|}} AddFeature(BaseShape) ​**
  
-  * [[ThinkGeo.MapSuite.Core.JeffersonianHelper|JeffersonianHelper]]<​div newline></​div><​div>​N/A</div> +  * //This method adds a new Feature (composed of the passed-in BaseShape) to an existing transaction.// 
-  * [[ThinkGeo.MapSuite.Core.JeffersonianSplitResult|JeffersonianSplitResult]]<​div newline><​/div><​div>​N/A</​div>​ +== Remarks == 
-  * [[ThinkGeo.MapSuite.Core.Jpeg2000RasterLayer|Jpeg2000RasterLayer]]<​div newline></​div><​div>​This class represents ​a .JP2 (JPEG2000) image type to be drawn on the map.</​div>​ +  * //This method adds a new Feature (composed of the passed-in BaseShape) to an existing transactionYou will need to ensure that you have started a transaction by calling BeginTransactionThe 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 ​collection of in-memory change buffers that are used to store changes until you commit the transactionSo, 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 objectAs an example, imagine that you have a FeatureSource that has 10 records in itNext, you begin a transaction and then call GetAllFeatures The result would be 10 recordsAfter 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 committedIn 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.//
-  * [[ThinkGeo.MapSuite.Core.Jpeg2000RasterSource|Jpeg2000RasterSource]]<​div newline></​div><​div>​This class represents ​the JPEG2000 raster source.</div>+
  
-> <​html><​strong id="​classes_k"></​strong></​html>​**K**+== Return Value == 
 +  ​Type:​String 
 +  ​Description:​This string is the ID that will uniquely identify this Feature while it is in a transaction.
  
-  * [[ThinkGeo.MapSuite.Core.KmlAdornmentLayer|KmlAdornmentLayer]]<​div newline></​div><​div>​N/​A</​div>​ +== Parameters == 
-  * [[ThinkGeo.MapSuite.Core.KmlFeatureLayer|KmlFeatureLayer]]<​div newline><​/div><​div>​N/A</div> +  * //shape// 
-  * [[ThinkGeo.MapSuite.Core.KmlFeatureSource|KmlFeatureSource]]<​div newline><​/div><​div>​N/​A</​div>​ +    Type:[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]] 
-  * [[ThinkGeo.MapSuite.Core.KmlGeoCanvas|KmlGeoCanvas]]<div newline></​div><​div>​N/​A</​div>​ +    Description:​This parameter represents the BaseShape that will be used to make the new Feature that will be added to the transaction.
-  [[ThinkGeo.MapSuite.Core.KmlLayer|KmlLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.KmlRasterLayer|KmlRasterLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.KmlRasterSource|KmlRasterSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.KrigingGridInterpolationModel|KrigingGridInterpolationModel]]<​div newline></​div><​div>​N/​A</​div>​+
  
-<html><​strong id="​classes_l"​></strong></html>**L**+<div newline></div> 
 +** {{wiki:​PublicMethod.gif|}} AddFeature(BaseShape,​IDictionary<String,​String>**
  
-  * [[ThinkGeo.MapSuite.Core.LabelInformation|LabelInformation]]<​div newline><​/div><​div>​This class represents the location of a piece of a label that may be drawn.</div> +  * //N/A// 
-  * [[ThinkGeo.MapSuite.Core.LabelPrinterLayer|LabelPrinterLayer]]<​div newline></​div><​div>​N/A</div> +== Remarks == 
-  * [[ThinkGeo.MapSuite.Core.LabelingCandidate|LabelingCandidate]]<​div newline></​div><​div>​This class represents a candidate for labeling.<​/div> +  * //N/A//
-  * [[ThinkGeo.MapSuite.Core.Layer|Layer]]<​div newline></​div><​div>​This class is the base class for all types of Layers.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LayerDrawingEventArgs|LayerDrawingEventArgs]]<​div newline><​/div><​div>​This is the event arguments class for the LayerDrawing event on the MapEngine class. It is raised before the layer is drawn.</div> +
-  * [[ThinkGeo.MapSuite.Core.LayerDrawnEventArgs|LayerDrawnEventArgs]]<​div newline></​div><​div>​This is the event arguments class for the LayerDrawn event on the MapEngine class. It is raised after a layer is drawn.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LayersDrawingEventArgs|LayersDrawingEventArgs]]<​div newline></​div><​div>​This is the event arguments class for the LayersDrawing event on the MapEngine class. It is raised before any of the layers are drawn.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LayersDrawnEventArgs|LayersDrawnEventArgs]]<​div newline></​div><​div>​This is the event arguments class for the LayersDrawn event on the MapEngine class. It is raised after all of the layers are drawn.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LegendAdornmentLayer|LegendAdornmentLayer]]<​div newline></​div><​div>​N/A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LegendItem|LegendItem]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LegendPrinterLayer|LegendPrinterLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LineBaseShape|LineBaseShape]]<​div newline></​div><​div>​This abstract class is the root of all line-based shapes, such as LineShape and MultilineShape.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LineShape|LineShape]]<​div newline></​div><​div>​This class represents a LineShape, which is defined as a single line with two or more points.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LineStyle|LineStyle]]<​div newline></​div><​div>​This class is the style used to draw lines.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LineStyles|LineStyles]]<​div newline></​div><​div>​This class is a collection of predefined styles and helper methods to create styles.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LinealKrigingGridInterpolationModel|LinealKrigingGridInterpolationModel]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LinkRecord|LinkRecord]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LinkRecords|LinkRecords]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LinkSource|LinkSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LogoAdornmentLayer|LogoAdornmentLayer]]<​div newline><​/div><​div>​This is the sub base class of AdornmentLayer. The LogoAdornmentLayer is taken as Logo map of the Map Control.<​/div>+
  
-> <​html><​strong id="​classes_m"></​strong></​html>​**M**+== Return Value == 
 +  ​Type:​String 
 +  ​Description:​N/​A
  
-  * [[ThinkGeo.MapSuite.Core.MagneticDeclination|MagneticDeclination]]<​div newline></​div><​div>​N/​A</​div>​ +== Parameters == 
-  * [[ThinkGeo.MapSuite.Core.MagneticDeclinationAdornmentLayer|MagneticDeclinationAdornmentLayer]]<​div newline><​/div><​div>​N/A</div> +  * //shape// 
-  * [[ThinkGeo.MapSuite.Core.MagneticDeclinationPrinterLayer|MagneticDeclinationPrinterLayer]]<​div newline><​/div><​div>​N/​A</​div>​ +    Type:[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]] 
-  * [[ThinkGeo.MapSuite.Core.ManagedGeoTiffRasterSource|ManagedGeoTiffRasterSource]]<div newline></​div><​div>​N/​A</​div>​ +    Description:​N/A
-  [[ThinkGeo.MapSuite.Core.ManagedProj4Projection|ManagedProj4Projection]]<​div newline></​div><​div>​This projection class uses the Proj4 engine to project data from one Srid to another.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MapEngine|MapEngine]]<​div newline></​div><​div>​This class is for generating maps.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MapPrinterLayer|MapPrinterLayer]]<​div newline></​div><​div>​N/A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MapShape|MapShape]]<​div newline></​div><​div>​This class represent a unit can be drawn on map. Each MapShape composes of a feature and a ZoomLevelSet to control its drawing zoomlevels.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MapShapeLayer|MapShapeLayer]]<​div newline></​div><​div>​Ideally I would want to make this inherit from the FeatureLayer so you could do spatial queries. ​ In the interests of time I inherited from the Layer to make things simple and show the point of how easy it is to extend Map Suite. ​ When we roll this into the main product we may create a FeatureSource and FeatureLayer.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MapSuiteDebugger|MapSuiteDebugger]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MapSuiteTileMatrix|MapSuiteTileMatrix]]<​div newline></​div><​div>​This class defines the TileMatrix system used in MapSuite component.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.Matrix|Matrix]]<​div newline></​div><​div>​This class represents a base Matrix which encapsulate the tile caculation logics.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MrSidRasterLayer|MrSidRasterLayer]]<​div newline></​div><​div>​This class represents a MrSid image to be drawn on the map.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MrSidRasterSource|MrSidRasterSource]]<​div newline></​div><​div>​This class represents the MrSid raster source.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MsSql2008FeatureLayer|MsSql2008FeatureLayer]]<​div newline></​div><​div>​This class represents a layer backed by Microsoft SQL 2008.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MsSql2008FeatureSource|MsSql2008FeatureSource]]<​div newline></​div><​div>​This class represents a FeatureSource backed by MS SQL 2008.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MultilineShape|MultilineShape]]<​div newline></​div><​div>​This class represents a MultilineShape,​ which is defined as one or more lines, each with two or more points.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MultipleFeatureLayer|MultipleFeatureLayer]]<​div newline></​div><​div>​This class represents a Layer backed by multiple Shape Files.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MultipleFeatureSource|MultipleFeatureSource]]<​div newline></​div><​div>​This MultipleFeatureSource is a special FeatureSource which holds a bunch of FeatureSource.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MultipleShapeFileFeatureLayer|MultipleShapeFileFeatureLayer]]<​div newline></​div><​div>​This layer represents multiple Shape Files of the same type.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MultipleShapeFileFeatureSource|MultipleShapeFileFeatureSource]]<​div newline></​div><​div>​This class represents a FeatureSource backed by multiple ESRI Shape Files.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MultipointShape|MultipointShape]]<​div newline></​div><​div>​This class represents one or more point shapes.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MultipolygonShape|MultipolygonShape]]<​div newline></​div><​div>​This class represents one or more polygons.</​div>​+
  
-> <​html><​strong id="​classes_n"><​/strong></html>**N**+  * //​columnValues//​ 
 +    * Type:​IDictionary<String,​String> 
 +    ​Description:​N/A
  
-  * [[ThinkGeo.MapSuite.Core.NativeImageTile|NativeImageTile]]<div newline></​div><​div>​This class represents a NativeImageTile,​ which is defined as scale, RectangleBox and a byte array for its tile bitmap.</​div>​ +<div newline></​div>​ 
-  [[ThinkGeo.MapSuite.Core.NativeImageTileCache|NativeImageTileCache]]<​div newline></​div><​div>​This is the base class for NativeTileCache system which inherits from TileCache class.</​div>​ +** {{wiki:​PublicMethod.gif|}} DeleteFeature(String) ​**
-  ​[[ThinkGeo.MapSuite.Core.NoaaRadarMonitor|NoaaRadarMonitor]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.NoaaRadarRasterLayer|NoaaRadarRasterLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.NoaaRadarRasterSource|NoaaRadarRasterSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.NoaaWeatherStationFeatureLayer|NoaaWeatherStationFeatureLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.NoaaWeatherStationMonitor|NoaaWeatherStationMonitor]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.NoaaWeatherStationStyle|NoaaWeatherStationStyle]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.NoaaWeatherWarningsFeatureLayer|NoaaWeatherWarningsFeatureLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.NoaaWeatherWarningsFeatureSource|NoaaWeatherWarningsFeatureSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.NoaaWeatherWarningsMonitor|NoaaWeatherWarningsMonitor]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.NoaaWeatherWarningsStyle|NoaaWeatherWarningsStyle]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.NonSerializableBaseTypeAttribute|NonSerializableBaseTypeAttribute]]<​div newline></​div><​div>​Indicates that a type's base type should not be serialized.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.NonTangentCurveCogoCall|NonTangentCurveCogoCall]]<​div newline></​div><​div>​N/​A</​div>​+
  
-> <​html><​strong id="​classes_o"><​/strong><​/html>​**O**+  * //This method deletes a Feature from an existing transaction.//​ 
 +== Remarks == 
 +  ​//This method deletes a Feature from an existing transaction. You will need to ensure that you have started a transaction by calling the BeginTransaction. 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.//
  
-  * [[SecureTeam.Attributes.ObfuscatedByAgileDotNetAttribute|ObfuscatedByAgileDotNetAttribute]]<​div newline></​div><​div>​N/​A</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.OnGeodeserializedAttribute|OnGeodeserializedAttribute]]<​div newline></​div><​div>​When applied to a method, specifies that the method is called immediately after deserialization of the object.</​div>​ +  * Type:Void 
-  * [[ThinkGeo.MapSuite.Core.OnGeodeserializingAttribute|OnGeodeserializingAttribute]]<​div newline></​div><​div>​When applied to a method, specifies that the method is called during deserialization of an object.</​div>​ +  * Description:​None
-  * [[ThinkGeo.MapSuite.Core.OnGeoserializedAttribute|OnGeoserializedAttribute]]<​div newline></​div><​div>​When applied to a method, specifies that the method is called after serialization of an object graph.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.OnGeoserializingAttribute|OnGeoserializingAttribute]]<​div newline></​div><​div>​When applied to a method, specifies that the method is called before serialization of an object.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.OpenStreetMapLayer|OpenStreetMapLayer]]<​div newline></​div><​div>​This class is use for Open Street Map Layer, and you also can get map from open street map server.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.OpenStreetMapsZoomLevelSet|OpenStreetMapsZoomLevelSet]]<​div newline></​div><​div>​This class represents the zoom levels used by Open Stree Map.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.OpenedFeatureSourceEventArgs|OpenedFeatureSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in the OpenedFeatureSource event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.OpenedRasterSourceEventArgs|OpenedRasterSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in the OpenedRasterSource event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.OpeningFeatureSourceEventArgs|OpeningFeatureSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in the OpeningFeatureSource event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.OpeningRasterSourceEventArgs|OpeningRasterSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in the OpeningRasterSource event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.OracleFeatureLayer|OracleFeatureLayer]]<​div newline></​div><​div>​This class represents a Layer backed by Oracle Spatial.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.OracleFeatureSource|OracleFeatureSource]]<​div newline></​div><​div>​This class represents a FeatureSource backed by Oracle Spatial.</​div>​+
  
-> <​html><​strong id="​classes_p"><​/strong><​/html>**P**+== Parameters == 
 +  * //id// 
 +    ​Type:​String 
 +    ​Description:​This string is the Id of the feature in the FeatureSource you wish to delete.
  
-  * [[ThinkGeo.MapSuite.Core.PagePrinterLayer|PagePrinterLayer]]<div newline></​div><​div>​N/​A</​div>​ +<div newline></​div>​ 
-  [[ThinkGeo.MapSuite.Core.PointBaseShape|PointBaseShape]]<​div newline></​div><​div>​This abstract class is the root of all point-based shapes, such as PointShape and MultiPointShape.</​div>​ +** {{wiki:​PublicMethod.gif|}} UpdateFeature(Feature) ​**
-  ​[[ThinkGeo.MapSuite.Core.PointBaseStyle|PointBaseStyle]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.PointShape|PointShape]]<​div newline></​div><​div>​This class represents a single point.</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.PointStyle|PointStyle]]<​div newline></​div><​div>​This class allows you to define how points are drawn on the canvas.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PointStyleAdvanced|PointStyleAdvanced]]<​div newline></​div><​div>​This class represents the advanced drawing options for point styles.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PointStyles|PointStyles]]<​div newline></​div><​div>​This class provides commonly-used GeoPointStyles and some methods to create various kinds of GeoPointstyles. A GeoStyle is a kind of sheet used to render the map.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PolygonShape|PolygonShape]]<​div newline></​div><​div>​This class represents a polygon, which is defined as a single outer ring with zero-to-many inner rings.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PositionStyle|PositionStyle]]<​div newline></​div><​div>​This abstract class encapsulates the labeling position logic. It is inherited by other styles, such as the TextSytle.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PrinterGeoCanvas|PrinterGeoCanvas]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PrinterHelper|PrinterHelper]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PrinterLayer|PrinterLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PrinterZoomLevelSet|PrinterZoomLevelSet]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.Proj4Projection|Proj4Projection]]<​div newline></​div><​div>​This projection class uses the Proj4 to project data from one Srid to another.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.Projection|Projection]]<​div newline></​div><​div>​This class represents a projection that you wish to apply to a FeatureSource.</​div>​+
  
-> <​html><​strong id="​classes_q"><​/strong><​/html>​**Q**+  * //This method updates a Feature in an existing transaction.//​ 
 +== Remarks == 
 +  ​//This method updates a Feature in an existing transaction. You will need to ensure that you have started a transaction by calling the BeginTransaction.The Transaction SystemThe 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.//
  
-  ​[[ThinkGeo.MapSuite.Core.QualityFamilyAreaStyle|QualityFamilyAreaStyle]]<​div newline></​div><​div>​This class is used to draw area features.</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.QueryTools|QueryTools]]<​div newline></​div><​div>​This is a helper class that allows you to execute various queries.</​div>​+  ​Type:Void 
 +  * Description:​None
  
-> <​html><​strong id="​classes_r"><​/strong><​/html>**R**+== Parameters == 
 +  * //feature// 
 +    ​Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]] 
 +    ​Description:​The Feature you wish to update in the transaction.
  
-  * [[ThinkGeo.MapSuite.Core.RadarUpdatedNoaaRadarMonitorEventArgs|RadarUpdatedNoaaRadarMonitorEventArgs]]<div newline></​div><​div>​N/​A</​div>​ +<div newline></​div>​ 
-  [[ThinkGeo.MapSuite.Core.RadarUpdatedNoaaRadarRasterSourceEventArgs|RadarUpdatedNoaaRadarRasterSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​PublicMethod.gif|}} UpdateFeature(BaseShape) ​**
-  ​[[ThinkGeo.MapSuite.Core.RadarUpdatingNoaaRadarMonitorEventArgs|RadarUpdatingNoaaRadarMonitorEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.RadarUpdatingNoaaRadarRasterSourceEventArgs|RadarUpdatingNoaaRadarRasterSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.RasterLayer|RasterLayer]]<​div newline></​div><​div>​This abstract class is the basis for all image-based layers in the system.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RasterProjectionResult|RasterProjectionResult]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RasterSource|RasterSource]]<​div newline></​div><​div>​The abstract class from which all raster sources inherit. Raster sources represent raster data that can be integrated into Map Suite.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RebuildingShapeFileFeatureSourceEventArgs|RebuildingShapeFileFeatureSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the BuildingIndex event in ShapeFileFeatureSource class.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]<​div newline></​div><​div>​This class represents a rectangle, which is defined as an upper left point and a lower right point.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RegexItem|RegexItem]]<​div newline></​div><​div>​This class represents a single Regex Match statement and styles to draw.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RegexStyle|RegexStyle]]<​div newline></​div><​div>​This class allows you to draw features differently based on regular expression matching.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RemovedGeoCollectionEventArgs|RemovedGeoCollectionEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RemovingGeoCollectionEventArgs|RemovingGeoCollectionEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RequestedDataWfsFeatureSourceEventArgs|RequestedDataWfsFeatureSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the RequestedData event in WfsFeatureSource.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RequestedDrawingLayerEventArgs|RequestedDrawingLayerEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RequestingDataWfsFeatureSourceEventArgs|RequestingDataWfsFeatureSourceEventArgs]]<​div newline></​div><​div>​This class represents the parameters passed in through the RequestingData event in WfsFeatureSource.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RequestingDrawingLayerEventArgs|RequestingDrawingLayerEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RestrictionLayer|RestrictionLayer]]<​div newline></​div><​div>​This layer can show or hide one or many zones that you want to restrict from being displayed. You can use the specified style to decorate the zones and set the lower/upper scale to control at which zoom levels you want to show or hide the zones. The default decoration style is a hatch pattern. You can change this to a circle with slash image, or, if you want a different look, you can use custom styles.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RingShape|RingShape]]<​div newline></​div><​div>​This class represents a closed ring of points.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RotationProjection|RotationProjection]]<​div newline></​div><​div>​This projection allows you to rotate the map image base don an angle.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RtreeSpatialIndex|RtreeSpatialIndex]]<​div newline></​div><​div>​Rtree is a facade class of MapSuiteRtree.</​div>​+
  
-> <​html><​strong id="​classes_s"><​/strong><​/html>​**S**+  * //This method updates a Feature (composed of the passed-in BaseShape) in an existing transaction.//​ 
 +== Remarks == 
 +  ​//This method updates a Feature (composed of the passed-in BaseShape) in an existing transaction. You will need to ensure that you have started a transaction by calling BeginTransaction.The Transaction SystemThe 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.//
  
-  * [[ThinkGeo.MapSuite.Core.S57FeatureLayer|S57FeatureLayer]]<​div newline></​div><​div>​N/​A</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.S57FeatureSource|S57FeatureSource]]<​div newline></​div><​div>​N/​A</​div>​ +  * Type:Void 
-  * [[ThinkGeo.MapSuite.Core.ScaleBarAdornmentLayer|ScaleBarAdornmentLayer]]<​div newline></​div><​div>​The ScaleBarAdornmentLayer class allows you show a bar graphic on the map that displays the distance scale for the current map extent.</​div>​ +  * Description:​None
-  * [[ThinkGeo.MapSuite.Core.ScaleBarPrinterLayer|ScaleBarPrinterLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ScaleLineAdornmentLayer|ScaleLineAdornmentLayer]]<​div newline></​div><​div>​The ScaleLineAdornmentLayer is a concrete class inherited from AdornmentLayer. The ScaleLineAdornmentLayer class allows you show a ScaleLine graphic on the map.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ScaleLinePrinterLayer|ScaleLinePrinterLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ScaleTextAdornmentLayer|ScaleTextAdornmentLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ScaleTextPrinterLayer|ScaleTextPrinterLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SendingRequestTiledWmsLayerEventArgs|SendingRequestTiledWmsLayerEventArgs]]<​div newline></​div><​div>​The event args containing the event data used by TiledWmsLayerEventArgs.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SendingWebRequestEventArgs|SendingWebRequestEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SentRequestTiledWmsLayerEventArgs|SentRequestTiledWmsLayerEventArgs]]<​div newline></​div><​div>​The event args containing the event data used by SecuredTiledWmsRasterSource.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SentWebRequestEventArgs|SentWebRequestEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ShapeFileFeatureLayer|ShapeFileFeatureLayer]]<​div newline></​div><​div>​This class represents a Layer backed by a Shape File.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ShapeFileFeatureSource|ShapeFileFeatureSource]]<​div newline></​div><​div>​This class represents a FeatureSource backed by ESRI a Shape File.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SimpleCandidate|SimpleCandidate]]<​div newline></​div><​div>​This class stores simple label information used in the PositionStyle.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SimpleColors|SimpleColors]]<​div newline></​div><​div>​This class is a convenient way to access a predefined set of simple colors.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SimpleFilterCondition|SimpleFilterCondition]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SpatialIndex|SpatialIndex]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SphericalKrigingGridInterpolationModel|SphericalKrigingGridInterpolationModel]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SphericalMercatorZoomLevelSet|SphericalMercatorZoomLevelSet]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SqlTypesGeometryHelper|SqlTypesGeometryHelper]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.StandardColors|StandardColors]]<​div newline></​div><​div>​This class is a convenient way to access a predefined set of standard colors.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.StationsUpdatedNoaaWeatherStationFeatureSourceEventArgs|StationsUpdatedNoaaWeatherStationFeatureSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.StationsUpdatedNoaaWeatherStationMonitorEventArgs|StationsUpdatedNoaaWeatherStationMonitorEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.StationsUpdatingNoaaWeatherStationMonitorEventArgs|StationsUpdatingNoaaWeatherStationMonitorEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.StreamLoadingEventArgs|StreamLoadingEventArgs]]<​div newline></​div><​div>​This class represents the event arguments for the StreamLoading event.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.Style|Style]]<​div newline></​div><​div>​This abstract class is the root for all styles used for drawing features.</​div>​+
  
-> <​html><​strong id="​classes_t"><​/strong><​/html>**T**+== Parameters == 
 +  * //shape// 
 +    ​Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]] 
 +    ​Description:​The shape that will be used to make the new Feature that you wish to update in the transaction.
  
-  * [[ThinkGeo.MapSuite.Core.TabDbfColumn|TabDbfColumn]]<div newline></​div><​div>​N/​A</​div>​ +<div newline></​div>​ 
-  [[ThinkGeo.MapSuite.Core.TabFeatureLayer|TabFeatureLayer]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​PublicMethod.gif|}} UpdateFeature(BaseShape,IDictionary<String,String>**
-  ​[[ThinkGeo.MapSuite.Core.TabFeatureSource|TabFeatureSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TangentCurveCogoCall|TangentCurveCogoCall]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TextStyle|TextStyle]]<​div newline></​div><​div>​This class is used to label features on the map.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TextStyleAdvanced|TextStyleAdvanced]]<​div newline></​div><​div>​This class represents the advanced drawing options for text styles.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TextStyles|TextStyles]]<​div newline></​div><​div>​The class provides commonly-used TextStyles and some methods to create various kinds of TextStyles. A TextStyle is a kind of sheet used to render a font on the map.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.Tile|Tile]]<​div newline></​div><​div>​This is the base class which describle the Tile class. Tile concept is used as a rectangle image which will be saved in Memory or Hard disk to enhance the performance.The Tile cache system is very popular in many GIS products including the GoogleMapsVE Maps etc, the Tile can be considered a small subset used in the TileCache system.</div> +
-  * [[ThinkGeo.MapSuite.Core.TileCache|TileCache]]<​div newline></​div><​div>​This is the base class for TileCache system.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TileMatrix|TileMatrix]]<​div newline></​div><​div>​This is the base class inherits from Matrix which describe the Matrix system used for Tilling system.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TileMatrixSet|TileMatrixSet]]<​div newline></​div><​div>​This class holds a collection of TileMatrix shared the same Crs.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TiledWmsLayer|TiledWmsLayer]]<​div newline></​div><​div>​This class is use for tiled WMS Serverand you also can get map from ThinkGeo world map kit server.</​div> +
-  ​[[ThinkGeo.MapSuite.Core.TiledWmsRasterSource|TiledWmsRasterSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.TinyGeoFeatureLayer|TinyGeoFeatureLayer]]<​div newline></​div><​div>​This class represents a FeatureLayer of TinyGeo File by ThinkGeo.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TinyGeoFeatureSource|TinyGeoFeatureSource]]<​div newline></​div><​div>​This class represents a FeatureSource of TinyGeo File by ThinkGeo.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TopologyValidator|TopologyValidator]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TransactionBuffer|TransactionBuffer]]<​div newline></​div><​div>​This class represents the holding place for transactions that have not yet been committed.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TransactionResult|TransactionResult]]<​div newline></​div><​div>​This class represents the results of a transaction that was processed.</​div>​+
  
-> <​html><​strong id="​classes_u"><​/strong><​/html>​**U**+  * //N/A// 
 +== Remarks == 
 +  ​//N/A//
  
-  * [[ThinkGeo.MapSuite.Core.UnmanagedGeoTiffRasterSource|UnmanagedGeoTiffRasterSource]]<​div newline></​div><​div>​This class allows you to view TIFF image types.</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.UnmanagedProj4Projection|UnmanagedProj4Projection]]<​div newline></​div><​div>​This projection class uses the Proj4 engine to project data from one Srid to another.</​div>​ +  * Type:Void 
-  * [[ThinkGeo.MapSuite.Core.UnsafeHelper|UnsafeHelper]]<​div newline></​div><​div>​This static class is a wrapper contains unsafe native methods</div>+  * Description:​N/A
  
-> <​html><​strong id="​classes_v"><​/strong><​/html>**V**+== Parameters == 
 +  * //shape// 
 +    ​Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]] 
 +    ​Description:​N/​A
  
-  * [[ThinkGeo.MapSuite.Core.ValidFeatureFilterCondition|ValidFeatureFilterCondition]]<​div newline><​/div><​div>​N/A</div> +  * //columnValues/​
-  [[ThinkGeo.MapSuite.Core.ValueItem|ValueItem]]<div newline></​div><​div>​This class represents a single value to match and styles to draw.</​div+    Type:​IDictionary<String,​String
-  [[ThinkGeo.MapSuite.Core.ValueStyle|ValueStyle]]<​div newline><​/div><​div>​This class allows you to match a value with data in the feature to determine how to draw that feature.</​div>​+    Description:​N/A
  
-<html><​strong id="​classes_w"></​strong></html>**W**+<div newline></div> 
 +** {{wiki:​PublicMethod.gif|}} RollbackTransaction() ​**
  
-  * [[ThinkGeo.MapSuite.Core.WarningsUpdatedNoaaWeatherWarningsFeatureSourceEventArgs|WarningsUpdatedNoaaWeatherWarningsFeatureSourceEventArgs]]<​div newline><​/div><​div>​N/A</​div>​ +  * //This method will cancel an existing transactionIt will free up the internal memory cache of any InternalFeatures added, updated or deleted.// 
-  * [[ThinkGeo.MapSuite.Core.WarningsUpdatedNoaaWeatherWarningsMonitorEventArgs|WarningsUpdatedNoaaWeatherWarningsMonitorEventArgs]]<​div newline></​div><​div>​N/A</div> +== Remarks == 
-  * [[ThinkGeo.MapSuite.Core.WarningsUpdatingNoaaWeatherWarningsFeatureSourceEventArgs|WarningsUpdatingNoaaWeatherWarningsFeatureSourceEventArgs]]<​div newline></​div><​div>​N/​A</​div>​ +  * //This method will cancel an existing transactionIt will free up the internal memory cache of any InternalFeatures added, updated or deletedYou will need to ensure that you have started a transaction by calling BeginTransaction.The Transaction SystemThe transaction system of a FeatureSource sits on top of the inherited implementation of any specific source, such as Oracle Spatial or Shape filesIn this way, it functions the same way for every FeatureSourceYou start by calling BeginTransaction. This allocates a collection of in-memory change buffers that are used to store changes until you commit ​the transactionSo, for example, when you call the Add, Delete or Update method, the changes to the feature ​are stored in memory onlyIf 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 lostWhen 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 FeatureSourceBy 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 differentlyThe live transaction concept means that all of the modifications you perform during ​transaction are live from the standpoint of the querying methods on the object.As an example, imagine ​that you have FeatureSource that has 10 records in itNext, you begin a transaction and then call GetAllFeatures.  ​The result would be 10 recordsAfter 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 committedIn 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 wellFor example, you expand ​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 returnedYou 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 committedIn such a caseonly after committing the transaction would the FeatureSource reflect the changes.//
-  * [[ThinkGeo.MapSuite.Core.WarningsUpdatingNoaaWeatherWarningsMonitorEventArgs|WarningsUpdatingNoaaWeatherWarningsMonitorEventArgs]]<​div newline><​/div><​div>​N/A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WellPointStyle|WellPointStyle]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WfsFeatureLayer|WfsFeatureLayer]]<​div newline></​div><​div>​This class represents ​the wfs(web feature service) FeauteLayer.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WfsFeatureSource|WfsFeatureSource]]<​div newline></​div><​div>​This class represents ​the wfs(web ​feature ​service) FeauteSource.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WkbFileFeatureLayer|WkbFileFeatureLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WkbFileFeatureSource|WkbFileFeatureSource]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WmsRasterLayer|WmsRasterLayer]]<​div newline></​div><​div>​Represents an object ​that encapsulates ​Web Map Service (WMS) layer.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WmsRasterSource|WmsRasterSource]]<​div newline></​div><​div>​Represents ​an object ​that encapsulates ​Web Map Service (WMS) source.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WmtsLayer|WmtsLayer]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WmtsTileMatrix|WmtsTileMatrix]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WorldFile|WorldFile]]<​div newline></​div><​div>​This class represents ​the values ​of a world file.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WorldLabelingCandidate|WorldLabelingCandidate]]<​div newline></​div><​div>​This class represents ​candidate with world center point information for labeling.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WorldMapKitAreaStyles|WorldMapKitAreaStyles]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WorldMapKitLayer|WorldMapKitLayer]]<​div newline></​div><​div>​This class is use for world map kitand you also can get map from ThinkGeo world map kit server.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WorldMapKitLineStyles|WorldMapKitLineStyles]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WorldMapKitPointStyles|WorldMapKitPointStyles]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.WorldMapKitTextStyles|WorldMapKitTextStyles]]<​div newline></​div><​div>​N/A</div>+
  
-> <​html><​strong id="​classes_x"></​strong></​html>​**X**+== Return Value == 
 +  ​Type:Void 
 +  ​Description:​None
  
-  * [[ThinkGeo.MapSuite.Core.XYCogoCall|XYCogoCall]]<div newline></​div><​div>​N/​A</​div>​ +== Parameters == 
-  [[ThinkGeo.MapSuite.Core.XmlGeoSerializationFormatter|XmlGeoSerializationFormatter]]<​div newline></​div><​div>​This class formats a GeoObjectModel into XML.</​div>​+<div newline></​div>​ 
 +** {{wiki:​PublicMethod.gif|}} CommitTransaction() **
  
-> <​html><​strong id="​classes_z"><​/strong><​/html>​**Z**+  * //This method will commit the existing transaction to its underlying source of data.// 
 +== Remarks == 
 +  ​//This method is the concrete wrapper for the virtual method CommitTransactionCore. As this is the concrete version, the real work is done in the Core version of the method. It will commit the existing transaction to its underlying source of data. It will then pass back the results of the commit, including any error(s) received. Lastly, it will free up the internal memory cache of any InternalFeatures added, updated or deleted. You will need to ensure that you have started a transaction by calling BeginTransaction.The Transaction SystemThe 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. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
  
-  ​* [[ThinkGeo.MapSuite.Core.ZoomLevel|ZoomLevel]]<div newline></​div><​div>​This class defines how InternalFeatures will be drawn based on their scale.</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.ZoomLevelSet|ZoomLevelSet]]<​div newline></​div><​div>​This ​class represents a collection ​of ZoomLevels.</​div>​ +  ​Type:[[ThinkGeo.MapSuite.Core.TransactionResult|TransactionResult]] 
-=== Structures ​=== +  * Description:​The returned decimalDegreesValue of this method is a TransactionResult ​class, which gives you the status ​of the transaction you just committedIt includes how many of the updates, adds, and deletes were successful and any errors that were encountered during the committing of the transaction. 
-<div characters_index>​ + 
-[[#​structures_d|D]] +== Parameters ​==
-[[#​structures_g|G]] +
-[[#​structures_l|L]] +
-[[#​structures_r|R]] +
-[[#​structures_s|S]] +
-[[#​structures_t|T]] +
-[[#​structures_v|V]] +
-</​div>​+
 <div newline></​div>​ <div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} AddColumn(FeatureSourceColumn) **
  
-> <​html><​strong id="​structures_d"><​/strong><​/html>​**D**+  * //N/A// 
 +== Remarks == 
 +  ​//N/A//
  
-  ​[[ThinkGeo.MapSuite.Core.DegreesMinutesSeconds|DegreesMinutesSeconds]]<​div newline></​div><​div>​This structure represents a degrees, minutes and seconds value.</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.DrawingRectangleF|DrawingRectangleF]]<​div newline></​div><​div>​This structure represents the drawing of a rectangle in screen coordinates.<​/div>+  ​Type:Void 
 +  * Description:​N/A
  
-> <​html><​strong id="​structures_g"><​/strong><​/html>**G**+== Parameters == 
 +  * //featureSourceColumn//​ 
 +    ​Type:​[[ThinkGeo.MapSuite.Core.FeatureSourceColumn|FeatureSourceColumn]] 
 +    ​Description:​N/​A
  
-  * [[ThinkGeo.MapSuite.Core.GeoColor|GeoColor]]<div newline></​div>​<​div>​This structure represents a color for drawing on a GeoCanvas.</​div>​+<div newline></​div>​ 
 +** {{wiki:​PublicMethod.gif|}} DeleteColumn(String) **
  
-> <​html><​strong id="​structures_l"><​/strong><​/html>​**L**+  * //N/A// 
 +== Remarks == 
 +  ​//N/A//
  
-  ​[[ThinkGeo.MapSuite.Core.LegendDrawingParameters|LegendDrawingParameters]]<​div newline></​div><​div>​N/​A</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.LinkColumnValue|LinkColumnValue]]<​div newline></​div><​div>​N/A</​div>​+  ​Type:Void 
 +  * Description:​N/A
  
-> <​html><​strong id="​structures_r"><​/strong><​/html>**R**+== Parameters == 
 +  * //columnName//​ 
 +    ​Type:​String 
 +    ​Description:​N/​A
  
-  * [[ThinkGeo.MapSuite.Core.RowColumnRange|RowColumnRange]]<div newline></​div>​<​div>​This structure is used to describe a range of tiles for a given extentBasiclly4 values exists : the Row range is from MinColumnIndex to MaxColumnIndex,​ the Column range is from the MinRowIndex to MaxRowIndex.</​div>​+<div newline></​div>​ 
 +** {{wiki:​PublicMethod.gif|}} UpdateColumn(String,FeatureSourceColumn) **
  
-> <​html><​strong id="​structures_s"><​/strong><​/html>​**S**+  * //N/A// 
 +== Remarks == 
 +  ​//N/A//
  
-  ​[[ThinkGeo.MapSuite.Core.ScreenPointF|ScreenPointF]]<​div newline></​div><​div>​This structure represents a single point in screen coordinates.</​div>​ +== Return Value == 
-  * [[ThinkGeo.MapSuite.Core.ShapeValidationResult|ShapeValidationResult]]<​div newline></​div><​div>​This structure represents the result of the validation method performed on a shape.</div>+  ​Type:Void 
 +  * Description:​N/A
  
-> <​html><​strong id="​structures_t"><​/strong><​/html>**T**+== Parameters == 
 +  * //columnName//​ 
 +    ​Type:​String 
 +    ​Description:​N/​A
  
-  * [[ThinkGeo.MapSuite.Core.TileMatrixCell|TileMatrixCell]]<div newline></​div><​div>​This structure represents the TileMatrixCell ​ which will be used in the TileMatrix system.</div>+  * //​newFeatureSourceColumn//​ 
 +    * Type:[[ThinkGeo.MapSuite.Core.FeatureSourceColumn|FeatureSourceColumn]] 
 +    * Description:​N/A
  
-<html><​strong id="​structures_v"​></strong></html>**V**+<div newline></div> 
 +** {{wiki:​PublicMethod.gif|}} GetAllFeatures(IEnumerable<String>) ** 
 + 
 +  * //This method returns all of the InternalFeatures in the FeatureSource.//​ 
 +== Remarks == 
 +  * //This method returns all of the InternalFeatures in the FeatureSource. It will return whatever is returned by the GetAllFeaturesCore method, along with any of the additions or subtractions made if you are in a transaction and that transaction is configured to be live. The main purpose of this method is to be the anchor of all of our default virtual implementations within this class. We as the framework developers wanted to provide you the user with as much default virtual implementation as possible. To do this, we needed a way to get access to all of the features. For example, let's say we want to create a default implementation for finding all of the InternalFeatures in a bounding box. Because this is an abstract class, we do not know the specifics of the underlying data or how its spatial indexes work. What we do know is that if we get all of the records, then we can brute-force the answer. In this way, if you inherited from this class and only implemented this one method, we can provide default implementations for virtually every other API. While this is nice for you the developer if you decide to create your own FeatureSource,​ it comes with a price: namely, it is very inefficient. In the example we just discussed (about finding all of the InternalFeatures in a bounding box), we would not want to look at every record to fulfil this method. Instead, we would want to override the GetFeaturesInsideBoundingBoxCore and implement specific code that would be faster. For example, in Oracle Spatial there is a specific SQL statement to perform this operation very quickly. The same holds true with other specific FeatureSource examples. Most default implementations in the FeatureSource call the GetFeaturesInsideBoundingBoxCore,​ which by default calls the GetAllFeaturesCore. It is our advice that if you create your own FeatureSource that you ALWAYS override the GetFeatureInsideBoundingBox. This will ensure that nearly every other API will operate efficiently. Please see the specific API to determine what method it uses. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​ 
 + 
 +== Return Value == 
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]> 
 +  ​Description:​The returned decimalDegreesValue is a collection of all of the InternalFeatures in the FeatureSource. 
 + 
 +== Parameters == 
 +  ​//​returningColumnNames//​ 
 +    ​Type:​IEnumerable<​String>​ 
 +    ​Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
  
-  * [[ThinkGeo.MapSuite.Core.Vertex|Vertex]]<​div newline></​div><​div>​This structure represents the point at which the sides of an angle intersect.</​div>​ 
-=== Enums === 
-<div characters_index>​ 
-[[#​enums_a|A]] 
-[[#​enums_b|B]] 
-[[#​enums_c|C]] 
-[[#​enums_d|D]] 
-[[#​enums_e|E]] 
-[[#​enums_f|F]] 
-[[#​enums_g|G]] 
-[[#​enums_i|I]] 
-[[#​enums_j|J]] 
-[[#​enums_k|K]] 
-[[#​enums_l|L]] 
-[[#​enums_m|M]] 
-[[#​enums_o|O]] 
-[[#​enums_p|P]] 
-[[#​enums_q|Q]] 
-[[#​enums_r|R]] 
-[[#​enums_s|S]] 
-[[#​enums_t|T]] 
-[[#​enums_u|U]] 
-[[#​enums_w|W]] 
-</​div>​ 
 <div newline></​div>​ <div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetAllFeatures(ReturningColumnsType) **
 +
 +  * //This method returns all of the InternalFeatures in the FeatureSource.//​
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures in the FeatureSource. It will return whatever is returned by the GetAllFeaturesCore method, along with any of the additions or subtractions made if you are in a transaction and that transaction is configured to be live. The main purpose of this method is to be the anchor of all of our default virtual implementations within this class. We as the framework developers wanted to provide you the user with as much default virtual implementation as possible. To do this, we needed a way to get access to all of the features. For example, let's say we want to create a default implementation for finding all of the InternalFeatures in a bounding box. Because this is an abstract class, we do not know the specifics of the underlying data or how its spatial indexes work. What we do know is that if we get all of the records, then we can brute-force the answer. In this way, if you inherited from this class and only implemented this one method, we can provide default implementations for virtually every other API. While this is nice for you the developer if you decide to create your own FeatureSource,​ it comes with a price: namely, it is very inefficient. In the example we just discussed (about finding all of the InternalFeatures in a bounding box), we would not want to look at every record to fulfil this method. Instead, we would want to override the GetFeaturesInsideBoundingBoxCore and implement specific code that would be faster. For example, in Oracle Spatial there is a specific SQL statement to perform this operation very quickly. The same holds true with other specific FeatureSource examples. Most default implementations in the FeatureSource call the GetFeaturesInsideBoundingBoxCore,​ which by default calls the GetAllFeaturesCore. It is our advice that if you create your own FeatureSource that you ALWAYS override the GetFeatureInsideBoundingBox. This will ensure that nearly every other API will operate efficiently. Please see the specific API to determine what method it uses. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returned decimalDegreesValue is a collection of all of the InternalFeatures in the FeatureSource.
 +
 +== Parameters ==
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesOutsideBoundingBox(RectangleShape,​IEnumerable<​String>​) **
 +
 +  * //This method returns all of the InternalFeatures of this FeatureSource outside of the specified bounding box.//
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures of this FeatureSource outside of the specified bounding box. If you are in a transaction and that transaction is live, this method will also take that into consideration. The default implementation of GetFeaturesOutsideBoundingBoxCore uses the GetAllRecordsCore method to determine which InternalFeatures are outside of the bounding box. We strongly recommend that you provide your own implementation for this method that will be more efficient. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns all of the InternalFeatures of this FeatureSource outside of the specified bounding box.
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter represents the bounding box that you wish to find InternalFeatures outside of.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesOutsideBoundingBox(RectangleShape,​ReturningColumnsType) **
 +
 +  * //This method returns all of the InternalFeatures of this FeatureSource outside of the specified bounding box.//
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures of this FeatureSource outside of the specified bounding box. If you are in a transaction and that transaction is live, this method will also take that into consideration. The default implementation of GetFeaturesOutsideBoundingBoxCore uses the GetAllRecordsCore method to determine which InternalFeatures are outside of the bounding box. We strongly recommend that you provide your own implementation for this method that will be more efficient. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns all of the InternalFeatures of this FeatureSource outside of the specified bounding box.
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter represents the bounding box that you wish to find InternalFeatures outside of.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesInsideBoundingBox(RectangleShape,​IEnumerable<​String>​) **
 +
 +  * //This method returns all of the InternalFeatures of this FeatureSource inside of the specified bounding box.//
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures of this FeatureSource inside of the specified bounding box. If you are in a transaction and that transaction is live, this method will also take that into consideration. The default implementation of GetFeaturesInsideBoundingBoxCore uses the GetAllRecordsCore method to determine which InternalFeatures are inside of the bounding box. We strongly recommend that you provide your own implementation for this method that will be more efficient. That is especially important for this method, as many other default virtual methods use this for their calculations. When you override this method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returned decimalDegreesValue is a collection of all of the InternalFeatures that are inside of the bounding box.
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter represents the bounding box that you wish to find InternalFeatures inside of.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesInsideBoundingBox(RectangleShape,​IEnumerable<​String>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​N/​A
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //filters//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesInsideBoundingBox(RectangleShape,​ReturningColumnsType) **
 +
 +  * //This method returns all of the InternalFeatures of this FeatureSource inside of the specified bounding box.//
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures of this FeatureSource inside of the specified bounding box. If you are in a transaction and that transaction is live, this method will also take that into consideration. The default implementation of GetFeaturesInsideBoundingBoxCore uses the GetAllRecordsCore method to determine which InternalFeatures are inside of the bounding box. We strongly recommend that you provide your own implementation for this method that will be more efficient. That is especially important for this method, as many other default virtual methods use this for their calculations. When you override this method, we highly recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returned decimalDegreesValue is a collection of all of the InternalFeatures that are inside of the bounding box.
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter represents the bounding box that you wish to find InternalFeatures inside of.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesForDrawing(RectangleShape,​Double,​Double,​IEnumerable<​String>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​N/​A
 +
 +  * //​screenWidth//​
 +    * Type:Double
 +    * Description:​N/​A
 +
 +  * //​screenHeight//​
 +    * Type:Double
 +    * Description:​N/​A
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //filters//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} ApplyFilters(IEnumerable<​Feature>,​IEnumerable<​String>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​features//​
 +    * Type:​IEnumerable<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​N/​A
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //filters//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesForDrawing(RectangleShape,​Double,​Double,​IEnumerable<​String>​) **
 +
 +  * //This method returns the InternalFeatures that will be used for drawing.//
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures of this FeatureSource that are inside of the specified bounding box. If you are in a transaction and that transaction is live, this method will also take that into consideration. The default implementation of GetFeaturesForDrawing uses the GetFeaturesInsodeBoundingBoxCore with some optimizations based on the screen width and height. For example, we can determine if a feature is going to draw in only one to four pixels and in that case we may not draw the entire feature but just a subset of it instead. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns the InternalFeatures that will be used for drawing.
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter is the bounding box of the InternalFeatures you want to draw.
 +
 +  * //​screenWidth//​
 +    * Type:Double
 +    * Description:​This parameter is the width of the canvas, in screen pixels, that you will draw on.
 +
 +  * //​screenHeight//​
 +    * Type:Double
 +    * Description:​This parameter is the height of the canvas, in screen pixels, that you will draw on.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesForDrawing(RectangleShape,​Double,​Double,​ReturningColumnsType) **
 +
 +  * //This method returns the InternalFeatures that will be used for drawing.//
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures of this FeatureSource that are inside of the specified bounding box. If you are in a transaction and that transaction is live, this method will also take that into consideration. The default implementation of GetFeaturesForDrawing uses the GetFeaturesInsodeBoundingBoxCore with some optimizations based on the screen width and height. For example, we can determine if a feature is going to draw in only one to four pixels and in that case we may not draw the entire feature but just a subset of it instead. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns the InternalFeatures that will be used for drawing.
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter is the bounding box of the InternalFeatures that you want to draw.
 +
 +  * //​screenWidth//​
 +    * Type:Double
 +    * Description:​This parameter is the width of the canvas, in screen pixels, that you will draw on.
 +
 +  * //​screenHeight//​
 +    * Type:Double
 +    * Description:​This parameter is the height of the canvas, in screen pixels, that you will draw on.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} SpatialQuery(BaseShape,​QueryType,​IEnumerable<​String>​) **
 +
 +  * //This method returns all of the InternalFeatures based on the target Feature and the spatial query type specified.//​
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures based on the target Feature and the spatial query type specified below. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies.Spatial Query Types:​Disjoint - This method returns InternalFeatures where the specific Feature and the targetShape have no points in common.Intersects - This method returns InternalFeatures where the specific Feature and the targetShape have at least one point in common.Touches - This method returns InternalFeatures where the specific Feature and the targetShape have at least one boundary point in common, but no interior points.Crosses - This method returns InternalFeatures where the specific Feature and the targetShape share some but not all interior points.Within - This method returns InternalFeatures where the specific Feature lies within the interior of the targetShape.Contains - This method returns InternalFeatures where the specific Feature lies within the interior of the current shape.Overlaps - This method returns InternalFeatures where the specific Feature and the targetShape share some but not all points in common.TopologicalEqual - This method returns InternalFeatures where the specific Feature and the target Shape are topologically equal. The default implementation of SpatialQueryCore uses the GetFeaturesInsideBoundingBoxCore method to pre-filter the spatial query. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override this method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returned decimalDegreesValue is a collection of InternalFeatures that match the spatial query you executed based on the TargetShape.
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​This parameter specifies the target shape used in the spatial query.
 +
 +  * //​queryType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.QueryType|QueryType]]
 +    * Description:​This parameter specifies what kind of spatial query you wish to perform.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} SpatialQuery(BaseShape,​QueryType,​IEnumerable<​String>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​N/​A
 +
 +  * //​queryType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.QueryType|QueryType]]
 +    * Description:​N/​A
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //filters//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} SpatialQuery(BaseShape,​QueryType,​ReturningColumnsType) **
 +
 +  * //This method returns all of the InternalFeatures based on the target Feature and the spatial query type specified.//​
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures based on the target Feature and the spatial query type specified below. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies.Spatial Query Types:​Disjoint - This method returns InternalFeatures where the specific Feature and the targetShape have no points in common.Intersects - This method returns InternalFeatures where the specific Feature and the targetShape have at least one point in common.Touches - This method returns InternalFeatures where the specific Feature and the targetShape have at least one boundary point in common, but no interior points.Crosses - This method returns InternalFeatures where the specific Feature and the targetShape share some but not all interior points.Within - This method returns InternalFeatures where the specific Feature lies within the interior of the targetShape.Contains - This method returns InternalFeatures where the specific Feature lies within the interior of the current shape.Overlaps - This method returns InternalFeatures where the specific Feature and the targetShape share some but not all points in common.TopologicalEqual - This method returns InternalFeatures where the specific Feature and the target Shape are topologically equal. The default implementation of SpatialQueryCore uses the GetFeaturesInsideBoundingBoxCore method to pre-filter the spatial query. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override this method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The return decimalDegreesValue is a collection of InternalFeatures that match the spatial query you executed based on the TargetShape.
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​This parameter specifies the target shape used in the spatial query.
 +
 +  * //​queryType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.QueryType|QueryType]]
 +    * Description:​This parameter specifies what kind of spatial query you wish to perform.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} SpatialQuery(Feature,​QueryType,​IEnumerable<​String>​) **
 +
 +  * //This method returns all of the InternalFeatures based on the target Feature and the spatial query type specified.//​
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures based on the target Feature and the spatial query type specified below. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies.Spatial Query Types:​Disjoint - This method returns InternalFeatures where the specific Feature and the targetShape have no points in common.Intersects - This method returns InternalFeatures where the specific Feature and the targetShape have at least one point in common.Touches - This method returns InternalFeatures where the specific Feature and the targetShape have at least one boundary point in common, but no interior points.Crosses - This method returns InternalFeatures where the specific Feature and the targetShape share some but not all interior points.Within - This method returns InternalFeatures where the specific Feature lies within the interior of the targetShape.Contains - This method returns InternalFeatures where the specific Feature lies within the interior of the current shape.Overlaps - This method returns InternalFeatures where the specific Feature and the targetShape share some but not all points in common.TopologicalEqual - This method returns InternalFeatures where the specific Feature and the target Shape are topologically equal. The default implementation of SpatialQueryCore uses the GetFeaturesInsideBoundingBoxCore method to pre-filter the spatial query. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override this method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returned decimalDegreesValue is a collection of InternalFeatures that match the spatial query you executed based on the TargetShape.
 +
 +== Parameters ==
 +  * //feature//
 +    * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +    * Description:​This parameter specifies the target feature used in the spatial query.
 +
 +  * //​queryType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.QueryType|QueryType]]
 +    * Description:​This parameter specifies what kind of spatial query you wish to perform.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} SpatialQuery(Feature,​QueryType,​ReturningColumnsType) **
 +
 +  * //This method returns all of the InternalFeatures based on the target Feature and the spatial query type specified.//​
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures based on the target Feature and the spatial query type specified below. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies.Spatial Query Types:​Disjoint - This method returns InternalFeatures where the specific Feature and the targetShape have no points in common.Intersects - This method returns InternalFeatures where the specific Feature and the targetShape have at least one point in common.Touches - This method returns InternalFeatures where the specific Feature and the targetShape have at least one boundary point in common, but no interior points.Crosses - This method returns InternalFeatures where the specific Feature and the targetShape share some but not all interior points.Within - This method returns InternalFeatures where the specific Feature lies within the interior of the targetShape.Contains - This method returns InternalFeatures where the specific Feature lies within the interior of the current shape.Overlaps - This method returns InternalFeatures where the specific Feature and the targetShape share some but not all points in common.TopologicalEqual - This method returns InternalFeatures where the specific Feature and the target Shape are topologically equal. The default implementation of SpatialQueryCore uses the GetFeaturesInsideBoundingBoxCore method to pre-filter the spatial query. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override this method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returned decimalDegreesValue is a collection of InternalFeatures that match the spatial query you executed based on the TargetShape.
 +
 +== Parameters ==
 +  * //feature//
 +    * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +    * Description:​This parameter specifies the target feature used in the spatial query.
 +
 +  * //​queryType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.QueryType|QueryType]]
 +    * Description:​This parameter specifies what kind of spatial query you wish to perform.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesNearestTo(BaseShape,​GeographyUnit,​Int32,​IEnumerable<​String>​) **
 +
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a small bounding box around the TargetShape and then queries the features inside of it. If we reach the number of items to find, then we measure the returned InternalFeatures to find the nearest. If we do not find enough records, we scale up the bounding box and try again. As you can see, this is not the most efficient method. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesNearestCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a user defined number of InternalFeatures that are closest to the TargetShape.
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​This parameter is the shape you want to find InternalFeatures close to.
 +
 +  * //​unitOfFeatureSource//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of measurement that the TargetShape and the FeatureSource are in, such as feet, meters, etc.
 +
 +  * //​maxItemsToFind//​
 +    * Type:Int32
 +    * Description:​This parameter defines how many close InternalFeatures to find around the TargetShape.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesNearestTo(BaseShape,​GeographyUnit,​Int32,​ReturningColumnsType) **
 +
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a small bounding box around the TargetShape and then queries the features inside of it. If we reach the number of items to find, then we measure the returned InternalFeatures to find the nearest. If we do not find enough records, we scale up the bounding box and try again. As you can see, this is not the most efficient method. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesNearestCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a user defined number of InternalFeatures that are closest to the TargetShape.
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​This parameter is the shape you want to find InternalFeatures close to.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of measurement that the TargetShape and the FeatureSource are in, such as feet, meters, etc.
 +
 +  * //​maxItemsToFind//​
 +    * Type:Int32
 +    * Description:​This parameter defines how many close InternalFeatures to find around the TargetShape.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesNearestTo(Feature,​GeographyUnit,​Int32,​IEnumerable<​String>​) **
 +
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a small bounding box around the TargetShape and then queries the features inside of it. If we reach the number of items to find, then we measure the returned InternalFeatures to find the nearest. If we do not find enough records, we scale up the bounding box and try again. As you can see, this is not the most efficient method. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesNearestCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a user defined number of InternalFeatures that are closest to the TargetShape.
 +
 +== Parameters ==
 +  * //​targetFeature//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +    * Description:​This parameter is the feature you want to find InternalFeatures close to.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of measurement that the TargetShape and the FeatureSource are in, such as feet, meters, etc.
 +
 +  * //​maxItemsToFind//​
 +    * Type:Int32
 +    * Description:​This parameter defines how many close InternalFeatures to find around the TargetShape.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesNearestTo(Feature,​GeographyUnit,​Int32,​ReturningColumnsType) **
 +
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a small bounding box around the TargetShape and then queries the features inside of it. If we reach the number of items to find, then we measure the returned InternalFeatures to find the nearest. If we do not find enough records, we scale up the bounding box and try again. As you can see, this is not the most efficient method. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesNearestCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a user defined number of InternalFeatures that are closest to the TargetShape.
 +
 +== Parameters ==
 +  * //​targetFeature//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +    * Description:​This parameter is the target feature you want to find InternalFeatures close to.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of measurement that the TargetShape and the FeatureSource are in, such as feet, meters, etc.
 +
 +  * //​maxItemsToFind//​
 +    * Type:Int32
 +    * Description:​This parameter defines how many close InternalFeatures to find around the TargetShape.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesNearestTo(BaseShape,​GeographyUnit,​Int32,​IEnumerable<​String>,​Double,​DistanceUnit) **
 +
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a small bounding box around the TargetShape and then queries the features inside of it. If we reach the number of items to find, then we measure the returned InternalFeatures to find the nearest. If we do not find enough records, we scale up the bounding box and try again. As you can see, this is not the most efficient method. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesNearestCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a user defined number of InternalFeatures that are closest to the TargetShape.
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​This parameter is the shape you want to find InternalFeatures close to.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of measurement that the TargetShape and the FeatureSource are in, such as feet, meters, etc.
 +
 +  * //​maxItemsToFind//​
 +    * Type:Int32
 +    * Description:​This parameter defines how many close InternalFeatures to find around the TargetShape.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +  * //​searchRadius//​
 +    * Type:Double
 +    * Description:​Limit the maximize distance proximately to search closest records.
 +
 +  * //​unitOfSearchRadius//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.DistanceUnit|DistanceUnit]]
 +    * Description:​The unit of searchRadius parameter.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesNearestTo(Feature,​GeographyUnit,​Int32,​IEnumerable<​String>,​Double,​DistanceUnit) **
 +
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a small bounding box around the TargetShape and then queries the features inside of it. If we reach the number of items to find, then we measure the returned InternalFeatures to find the nearest. If we do not find enough records, we scale up the bounding box and try again. As you can see, this is not the most efficient method. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesNearestCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a user defined number of InternalFeatures that are closest to the TargetShape.
 +
 +== Parameters ==
 +  * //​targetFeature//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +    * Description:​This parameter is feature you want to find InternalFeatures close to.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of measurement that the TargetShape and the FeatureSource are in, such as feet, meters, etc.
 +
 +  * //​maxItemsToFind//​
 +    * Type:Int32
 +    * Description:​This parameter defines how many close InternalFeatures to find around the TargetShape.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +  * //​searchRadius//​
 +    * Type:Double
 +    * Description:​Limit the maximize distance proximately to search closest records.
 +
 +  * //​unitOfSearchRadius//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.DistanceUnit|DistanceUnit]]
 +    * Description:​The unit of distanceLimits parameter.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesWithinDistanceOf(BaseShape,​GeographyUnit,​DistanceUnit,​Double,​IEnumerable<​String>​) **
 +
 +  * //This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a bounding box around the TargetShape using the distance supplied and then queries the features inside of it. This may not be the most efficient method for this operation. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesWithinDistanceOfCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape.
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​The shape you wish to find InternalFeatures within a distance of.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of data that the FeatureSource and TargetShape are in.
 +
 +  * //​distanceUnit//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.DistanceUnit|DistanceUnit]]
 +    * Description:​This parameter specifies the measurement unit for the distance parameter, such as feet, miles, kilometers, etc.
 +
 +  * //​distance//​
 +    * Type:Double
 +    * Description:​This parameter specifies the distance in which to find InternalFeatures around the TargetShape.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesWithinDistanceOf(BaseShape,​GeographyUnit,​DistanceUnit,​Double,​ReturningColumnsType) **
 +
 +  * //This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a bounding box around the TargetShape using the distance supplied and then queries the features inside of it. This may not be the most efficient method for this operation. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesWithinDistanceOfCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape.
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​The shape you wish to find InternalFeatures within a distance of.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of data that the FeatureSource and TargetShape are in.
 +
 +  * //​distanceUnit//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.DistanceUnit|DistanceUnit]]
 +    * Description:​This parameter specifies the measurement unit for the distance parameter, such as feet, miles, kilometers, etc.
 +
 +  * //​distance//​
 +    * Type:Double
 +    * Description:​This parameter specifies the distance in which to find InternalFeatures around the TargetShape.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesWithinDistanceOf(Feature,​GeographyUnit,​DistanceUnit,​Double,​IEnumerable<​String>​) **
 +
 +  * //This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a bounding box around the TargetShape using the distance supplied and then queries the features inside of it. This may not be the most efficient method for this operation. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesWithinDistanceOfCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape.
 +
 +== Parameters ==
 +  * //​targetFeature//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +    * Description:​The feature you wish to find InternalFeatures within a distance of.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of data that the FeatureSource and TargetShape are in.
 +
 +  * //​distanceUnit//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.DistanceUnit|DistanceUnit]]
 +    * Description:​This parameter specifies the measurement unit for the distance parameter, such as feet, miles, kilometers, etc.
 +
 +  * //​distance//​
 +    * Type:Double
 +    * Description:​This parameter specifies the distance in which to find InternalFeatures around the TargetShape.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesWithinDistanceOf(Feature,​GeographyUnit,​DistanceUnit,​Double,​ReturningColumnsType) **
 +
 +  * //This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a bounding box around the TargetShape using the distance supplied and then queries the features inside of it. This may not be the most efficient method for this operation. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesWithinDistanceOfCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape.
 +
 +== Parameters ==
 +  * //​targetFeature//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +    * Description:​The feature you wish to find InternalFeatures within a distance of.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of data that the FeatureSource and TargetShape are in.
 +
 +  * //​distanceUnit//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.DistanceUnit|DistanceUnit]]
 +    * Description:​This parameter specifies the measurement unit for the distance parameter, such as feet, miles, kilometers, etc.
 +
 +  * //​distance//​
 +    * Type:Double
 +    * Description:​This parameter specifies the distance in which to find InternalFeatures around the TargetShape.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeatureById(String,​IEnumerable<​String>​) **
 +
 +  * //This method returns a Feature by providing its Id in the FeatureSource.//​
 +== Remarks ==
 +  * //This method returns a collection of InternalFeatures by providing a group of Ids. The internal implementation calls the GetFeaturesByIdsCore and only passes one Id in the collection. That method in turn calls the GetAllFeaturesCore. Because of this, if you want a more efficient version of this method, we highly suggest you override the GetFeaturesByIdsCore method and provide a fast way to find a group of InternalFeatures by their Id.//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +  * Description:​This method returns a Feature by providing its Id in the FeatureSource.
 +
 +== Parameters ==
 +  * //id//
 +    * Type:String
 +    * Description:​This parameter is the Id which uniquely identifies it in the FeatureSource.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeatureById(String,​ReturningColumnsType) **
 +
 +  * //This method returns a Feature by providing its Id in the FeatureSource.//​
 +== Remarks ==
 +  * //This method returns a collection of InternalFeatures by providing a group of Ids. The internal implementation calls the GetFeaturesByIdsCore and only passes one Id in the collection. That method in turn calls the GetAllFeaturesCore. Because of this, if you want a more efficient version of this method, then we highly suggest you override the GetFeaturesByIdsCore method and provide a fast way to find a group of InternalFeatures by their Id.//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +  * Description:​This method returns a Feature by providing its Id in the FeatureSource.
 +
 +== Parameters ==
 +  * //id//
 +    * Type:String
 +    * Description:​This parameter is the Id which uniquely identifies it in the FeatureSource.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesByIds(IEnumerable<​String>,​IEnumerable<​String>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //ids//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //filters//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesByIds(IEnumerable<​String>,​IEnumerable<​String>​) **
 +
 +  * //This method returns a collection of InternalFeatures by providing a group of Ids.//
 +== Remarks ==
 +  * //This method returns a collection of InternalFeatures by providing a group of Ids. The internal implementation calls the GetFeaturesByIdsCore. That method in turn calls the GetAllFeaturesCore. Because of this, if you want a more efficient version of this method, then we highly suggest you override the GetFeaturesByIdsCore method and provide a fast way to find a group of InternalFeatures by their Id. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a collection of InternalFeatures by providing a group of Ids.
 +
 +== Parameters ==
 +  * //ids//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter represents the group of Ids which uniquely identifies the InternalFeatures in the FeatureSource.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesByIds(IEnumerable<​String>,​ReturningColumnsType) **
 +
 +  * //This method returns a collection of InternalFeatures by providing a group of Ids.//
 +== Remarks ==
 +  * //This method returns a collection of InternalFeatures by providing a group of Ids. The internal implementation calls the GetFeaturesByIdsCore. That method in turn calls the GetAllFeaturesCore. Because of this, if you want a more efficient version of this method, then we highly suggest you override the GetFeaturesByIdsCore method and provide a fast way to find a group of InternalFeatures by their Id. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a collection of InternalFeatures by providing a group of Ids.
 +
 +== Parameters ==
 +  * //ids//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter represents the group of Ids which uniquely identifies the InternalFeatures in the FeatureSource.
 +
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetBoundingBoxById(String) **
 +
 +  * //This method returns a bounding box based on the InternalFeatures Id specified.//​
 +== Remarks ==
 +  * //This method returns a bounding box by providing an Id. The internal implementation calls the GetFeaturesByIdsCore and only passes one Id in the collection. That method in turn calls the GetAllFeaturesCore. Because of this, if you want a more efficient version of this method, then we highly suggest you override the GetFeaturesByIdsCore method and provide a fast way to find a group of InternalFeatures by their Id.//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +  * Description:​This method returns a bounding box based on the InternalFeatures Id specified.
 +
 +== Parameters ==
 +  * //id//
 +    * Type:String
 +    * Description:​This parameter represents the Id for the InternalFeatures whose bounding box you want.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetBoundingBoxByIds(IEnumerable<​String>​) **
 +
 +  * //This method returns a collection of bounding boxes based on the Feature Ids specified.//​
 +== Remarks ==
 +  * //This method returns a bounding boxes by providing a goupd of Ids. The internal implementation calls the GetFeaturesByIdsCore. That method in turn calls the GetAllFeaturesCore. Because of this, if you want a more efficient version of this method, then we highly suggest you override the GetFeaturesByIdsCore method and provide a fast way to find a group of InternalFeatures by their Id.//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +  * Description:​This method returns a collection of bounding boxes based on the Feature Ids specified.
 +
 +== Parameters ==
 +  * //ids//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter represents the group of Ids for the InternalFeatures whose bounding boxes you want.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetBoundingBoxesByIds(IEnumerable<​String>​) **
 +
 +  * //This method returns a collection of bounding boxes based on the Feature Ids specified.//​
 +== Remarks ==
 +  * //This method returns a bounding boxes by providing a goupd of Ids. The internal implementation calls the GetFeaturesByIdsCore. That method in turn calls the GetAllFeaturesCore. Because of this, if you want a more efficient version of this method, then we highly suggest you override the GetFeaturesByIdsCore method and provide a fast way to find a group of InternalFeatures by their Id.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]>​
 +  * Description:​This method returns a collection of bounding boxes based on the Feature Ids specified.
 +
 +== Parameters ==
 +  * //ids//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter represents the group of Ids for the InternalFeatures whose bounding boxes you want.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFirstFeaturesWellKnownType() **
 +
 +  * //This method returns the well known type that represents the first feature from FeatureSource.//​
 +== Remarks ==
 +  * //This method is the concrete wrapper for the virtual method GetFirstFeaturesWellKnownTypeCore. It will return whatever is returned by the GetFirstFeaturesWellKnownTypeCore method, along with any additions or subtractions made if you are in a transaction and that transaction is configured to be live. To determine what the default implementation of the abstract GetCountCore method is, please see the documentation for it. The default implementation of GetFirstFeaturesWellKnownTypeCore uses the GetAllFeaturesCore method to get WellKnownType of the first feature from all features. We strongly recommend that you provide your own implementation for this method that will be more efficient. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.WellKnownType|WellKnownType]]
 +  * Description:​This method returns the well known type that represents the first feature from FeatureSource.
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} CanGetBoundingBoxQuickly() **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Boolean
 +  * Description:​N/​A
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} CanGetCountQuickly() **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Boolean
 +  * Description:​N/​A
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetDistinctColumnValues(String) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.DistinctColumnValue|DistinctColumnValue]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​columnName//​
 +    * Type:String
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetAllFeatures(ReturningColumnsType,​Int32) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returningColumnTypes//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​N/​A
 +
 +  * //​startIndex//​
 +    * Type:Int32
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetAllFeatures(ReturningColumnsType,​Int32,​Int32) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returningColumnTypes//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​N/​A
 +
 +  * //​startIndex//​
 +    * Type:Int32
 +    * Description:​N/​A
 +
 +  * //​takeCount//​
 +    * Type:Int32
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetAllFeatures(IEnumerable<​String>,​Int32,​Int32) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //​startIndex//​
 +    * Type:Int32
 +    * Description:​N/​A
 +
 +  * //​takeCount//​
 +    * Type:Int32
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} ExecuteNonQuery(String) **
 +
 +  * //Executes a SQL statement against a connection object.//
 +== Remarks ==
 +  * //You can use ExecuteNonQuery to perform catalog operations (for example, querying the structure of a database or creating database objects such as tables), or to change the data in a database by executing UPDATE, INSERT, or DELETE statements. Although ExecuteNonQuery does not return any rows, any output parameters or return values mapped to parameters are populated with data. For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command.//
 +
 +== Return Value ==
 +  * Type:Int32
 +  * Description:​The number of rows affected.
 +
 +== Parameters ==
 +  * //​sqlStatement//​
 +    * Type:String
 +    * Description:​The sqlStatement to be excuted.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesByColumnValue(String,​String,​ReturningColumnsType) **
 +
 +  * //Get all of the features by passing a columnName and a specified columValue.//​
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returnning features matches the columnValue.
 +
 +== Parameters ==
 +  * //​columnName//​
 +    * Type:String
 +    * Description:​The specified columnName to match the columnValue.
 +
 +  * //​columnValue//​
 +    * Type:String
 +    * Description:​The specified columnValue to match those returning features.
 +
 +  * //​returningColumnType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​This parameter allows you to select a type from the ReturningColumnsType that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesByColumnValue(String,​String,​IEnumerable<​String>​) **
 +
 +  * //Get all of the features by passing a columnName and a specified columValue.//​
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returnning features matches the columnValue.
 +
 +== Parameters ==
 +  * //​columnName//​
 +    * Type:String
 +    * Description:​The specified columnName to match the columnValue.
 +
 +  * //​columnValue//​
 +    * Type:String
 +    * Description:​The specified columnValue to match those returning features.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetFeaturesByColumnValue(String,​String) **
 +
 +  * //Get all of the features by passing a columnName and a specified columValue.//​
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returnning features matches the columnValue.
 +
 +== Parameters ==
 +  * //​columnName//​
 +    * Type:String
 +    * Description:​The specified columnName to match the columnValue.
 +
 +  * //​columnValue//​
 +    * Type:String
 +    * Description:​The specified columnValue to match those returning features.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} ExecuteScalar(String) **
 +
 +  * //Executes the query and returns the first column of the first row in the result set returned by the query. All other columns and rows are ignored.//
 +== Remarks ==
 +  * //Use the ExcuteScalar method to retrieve a single value from the database. This requires less code than using the ExcuteQuery method and then performing the operations necessary to generate the single value using the data.//
 +
 +== Return Value ==
 +  * Type:Object
 +  * Description:​The first column of the first row in the result set.
 +
 +== Parameters ==
 +  * //​sqlStatement//​
 +    * Type:String
 +    * Description:​The sqlStatement to be excuted.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} ExecuteQuery(String) **
 +
 +  * //Executes the query and returns the result returned by the query.//
 +== Remarks ==
 +  * //Use the ExcuteScalar method to retrieve a single value from the database. This requires less code than using the ExcuteQuery method and then performing the operations necessary to generate the single value using the data.//
 +
 +== Return Value ==
 +  * Type:​DataTable
 +  * Description:​The result set in the format of dataTable.
 +
 +== Parameters ==
 +  * //​sqlStatement//​
 +    * Type:String
 +    * Description:​The sqlStatement to be excuted.
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetColumns() **
 +
 +  * //This method returns the columns available for the FeatureSource and caches them.//
 +== Remarks ==
 +  * //As this is the concrete method wrapping the GetColumnsCore,​ it is important to note that this method will cache the results to GetColumnsCore. What this means is that the first time this method is called it will call GetCollumnsCore,​ which is protected, and cache the results. The next time this method is called it will not call GetColumnsCore again. This was done to increase speed, as this is a critical method that is used very often in the internal code of the class. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.FeatureSourceColumn|FeatureSourceColumn]]>​
 +  * Description:​This method returns the columns available for the FeatureSource.
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} RefreshColumns() **
 +
 +  * //This method refresh the columns available for the FeatureSource and caches them.//
 +== Remarks ==
 +  * //None.//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​This method refresh the columns available for the FeatureSource.
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetCount() **
 +
 +  * //This method returns the count of the number of records in this FeatureSource.//​
 +== Remarks ==
 +  * //This method is the concrete wrapper for the virtual method GetCountCore. It will return whatever is returned by the GetCountCore method, along with any additions or subtractions made if you are in a transaction and that transaction is configured to be live. To determine what the default implementation of the abstract GetCountCore method is, please see the documentation for it. The default implementation of GetCountCore uses the GetAllRecordsCore method to calculate how many records there are in the FeatureSource. We strongly recommend that you provide your own implementation for this method that will be more efficient. As this is a concrete public method that wraps a Core method, we reserve the right to add events and other logic to pre- or post-process data returned by the Core version of the method. In this way, we leave our framework open on our end, but also allow you the developer to extend our logic to suit your needs. If you have questions about this, please contact our support team as we would be happy to work with you on extending our framework.//​
 +
 +== Return Value ==
 +  * Type:Int32
 +  * Description:​This method returns the count of the number of records in this FeatureSource.
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} ToString() **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:String
 +  * Description:​N/​A
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} Equals(Object) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Boolean
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //obj//
 +    * Type:Object
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetHashCode() **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Int32
 +  * Description:​N/​A
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​PublicMethod.gif|}} GetType() **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Type
 +  * Description:​N/​A
 +
 +== Parameters ==
 +<div newline></​div>​
 +==== Protected Methods ====
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToInternalProjection(BaseShape) **
 +
 +  * //This method de-projects items based on the Projection of the FeatureSource.//​
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that projection, as a general rule, happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. With these projection methods it is very easy to handle the projection and de-projection. Remember that when adding your own public methods you always de-project incoming shapes and alway project outgoing shapes. Also remember that the Core methods do not consider projection, and they assume the data being passed into them and out of them is the same unit as the underlying data. Example of a New Public Method: public Feature ProcessFeature(Feature incomingFeature) { Be sure that you use the FromProjection on the incomingFeatureParameter as the first thing you do in this method. Call a Core Method or do your own processing Be sure that you call the ToProjection on the return result of the method before you pass it out. }//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +  * Description:​This method de-projects a BaseShape based on the Projection of the FeatureSource.
 +
 +== Parameters ==
 +  * //​baseShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​This parameter represents the BaseShape you wish to de-project.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToExternalProjection(IEnumerable<​Feature>​) **
 +
 +  * //This method projects items based on the Projection of the FeatureSource.//​
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that projection, as a general rule, happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. With these projection methods it is very easy to handle the projection and de-projection. Remember that when adding your own public methods you always de-project incoming shapes and alway project outgoing shapes. Also remember that the Core methods do not consider projection, and they assume the data being passed into them and out of them is the same unit as the underlying data. Example of a New Public Method: public Feature ProcessFeature(Feature incomingFeature) { Be sure that you use the FromProjection on the incomingFeatureParameter as the first thing you do in this method. Call a Core Method or do your own processing Be sure that you call the ToProjection on the return result of the method before you pass it out. }//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method projects a Feature based on the Projection of the FeatureSource.
 +
 +== Parameters ==
 +  * //​features//​
 +    * Type:​IEnumerable<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​This parameter represents a group of Features that you wish to project.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToInternalProjection(IEnumerable<​Feature>​) **
 +
 +  * //This method de-projects items based on the Projection of the FeatureSource.//​
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that projection, as a general rule, happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. With these projection methods it is very easy to handle the projection and de-projection. Remember that when adding your own public methods you always de-project incoming shapes and alway project outgoing shapes. Also remember that the Core methods do not consider projection, and they assume the data being passed into them and out of them is the same unit as the underlying data. Example of a New Public Method: public Feature ProcessFeature(Feature incomingFeature) { Be sure that you use the FromProjection on the incomingFeatureParameter as the first thing you do in this method. Call a Core Method or do your own processing Be sure that you call the ToProjection on the return result of the method before you pass it out. }//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method de-projects a Feature based on the Projection of the FeatureSource.
 +
 +== Parameters ==
 +  * //​features//​
 +    * Type:​IEnumerable<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​This parameter represents the group of Features that you wish to de-project.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToExternalProjection(Feature) **
 +
 +  * //This method projects items based on the Projection of the FeatureSource.//​
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that projection, as a general rule, happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. With these projection methods it is very easy to handle the projection and de-projection. Remember that when adding your own public methods you always de-project incoming shapes and alway project outgoing shapes. Also remember that the Core methods do not consider projection, and they assume the data being passed into them and out of them is the same unit as the underlying data. Example of a New Public Method: public Feature ProcessFeature(Feature incomingFeature) { Be sure that you use the FromProjection on the incomingFeatureParameter as the first thing you do in this method. Call a Core Method or do your own processing Be sure that you call the ToProjection on the return result of the method before you pass it out. }//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +  * Description:​This method projects a Feature based on the Projection of the FeatureSource.
 +
 +== Parameters ==
 +  * //feature//
 +    * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +    * Description:​This parameter represents the Feature you wish to project.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToInternalProjection(Feature) **
 +
 +  * //This method de-projects items based on the Projection of the FeatureSource.//​
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that projection, as a general rule, happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. With these projection methods it is very easy to handle the projection and de-projection. Remember that when adding your own public methods you always de-project incoming shapes and alway project outgoing shapes. Also remember that the Core methods do not consider projection, and they assume the data being passed into them and out of them is the same unit as the underlying data. Example of a New Public Method: public Feature ProcessFeature(Feature incomingFeature) { Be sure that you use the FromProjection on the incomingFeatureParameter as the first thing you do in this method. Call a Core Method or do your own processing Be sure that you call the ToProjection on the return result of the method before you pass it out. }//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +  * Description:​This method de-projects a Feature based on the Projection of the FeatureSource.
 +
 +== Parameters ==
 +  * //feature//
 +    * Type:​[[ThinkGeo.MapSuite.Core.Feature|Feature]]
 +    * Description:​This parameter represents the Feature you wish to de-project.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetColumnNamesInsideFeatureSource(IEnumerable<​String>​) **
 +
 +  * //This method returns the field names that are in the FeatureSource from a list of provided field names.//
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that, as a general rule, returning column data of a Feature or a set of InternalFeatures happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. Let's say, for example, that you want to add a new Find method called FindLargeFeatures. You pass in a group of columns to return. Most of the time, the requested columns will actually be in the FeatureSource,​ but sometimes they will not. The way we allow users to get data from outside of the Feature Source is by raising an event called CustomColumnFetch. This way, we allow people to provide data that is outside of the FeatureSource. Since you will be implementing your own public method, you will want to support this as all of our other public methods do. When you first enter the public method, you will want to separate out the fields that are in the FeatureSource from those that are not. You can call this method and the GetColumnNamesOutsideFeatureSource. If inside your public method you need to call any of our Core methods, then you need to make sure that you only pass in the list of column names that are in the FeatureSource. We assume that Core methods are simple and they do not handle this complexity. With the list of non-FeatureSource column names, you simply loop through each column name for each record and call the OnCustomColumnFetch method while passing in the proper parameters. This will allow you give the user a chance to provide the values for the Feature'​s fields that were not in the FeatureSource. After that, you combine your results and pass them back out as the return. public Collection<​Feature>​ FindLargeFeatures(double AreaSize, IEnumerable <​string>​ columnsToReturn) {Step 1: Separate the columns that are in the FeatureSource from those that are not.  Step 2: Call any Core Methods and only pass in the columns that are in the FeatureSourceStep3:​ For Each feature/​column name combination,​ call the OnCustomFiedlFetch and allow your user to provide the custom data.  Step4: Integrate the custom data with the result of the Core method plus any processing you did. Then return the consolidated result. }//
 +
 +== Return Value ==
 +  * Type:​Collection<​String>​
 +  * Description:​This method returns the field names that are in the FeatureSource from a list of provided field names.
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter is a list of column names, where not every field name may be in the FeatureSource.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetColumnNamesOutsideFeatureSource(IEnumerable<​String>​) **
 +
 +  * //This method returns the field names that are not in the FeatureSource from a list of provided field names.//
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that, as a general rule, returning column data of a Feature or a set of InternalFeatures happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. Let's say, for example, that you want to add a new Find method called FindLargeFeatures. You pass in a group of columns to return. Most of the time, the requested columns will actually be in the FeatureSource,​ but sometimes they will not. The way we allow users to get data from outside of the Feature Source is by raising an event called CustomColumnFetch. This way, we allow people to provide data that is outside of the FeatureSource. Since you will be implementing your own public method, you will want to support this as all of our other public methods do. When you first enter the public method, you will want to separate out the fields that are in the FeatureSource from those that are not. You can call this method and the GetColumnNamesOutsideFeatureSource. If inside your public method you need to call any of our Core methods, then you need to make sure that you only pass in the list of column names that are in the FeatureSource. We assume that Core methods are simple and they do not handle this complexity. With the list of non-FeatureSource column names, you simply loop through each column name for each record and call the OnCustomColumnFetch method while passing in the proper parameters. This will allow you give the user a chance to provide the values for the Feature'​s fields that were not in the FeatureSource. After that, you combine your results and pass them back out as the return. public Collection<​Feature>​ FindLargeFeatures(double AreaSize, IEnumerable <​string>​ columnsToReturn) {Step 1: Separate the columns that are in the FeatureSource from those that are not.  Step 2: Call any Core Methods and only pass in the columns that are in the FeatureSourceStep3:​ For Each feature/​column name combination,​ call the OnCustomFiedlFetch and allow your user to provide the custom data.  Step4: Integrate the custom data with the result of the Core method plus any processing you did. Then return the consolidated result. }//
 +
 +== Return Value ==
 +  * Type:​Collection<​String>​
 +  * Description:​This method returns the field names that are not in the FeatureSource from a list of provided field names.
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter is a list of field names, where not every field name may be in the FeatureSource.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetReturningColumnNames(ReturningColumnsType) **
 +
 +  * //Get returning columnNames according to the returningColumnType.//​
 +== Remarks ==
 +  * //The concreted FeatureSource can override this logic if needed.//
 +
 +== Return Value ==
 +  * Type:​Collection<​String>​
 +  * Description:​The returning ColumnNames based on the given returningColumnNamesType.
 +
 +== Parameters ==
 +  * //​returningColumnNamesType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]
 +    * Description:​The passed in returningColumnType.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} RemoveEmptyAndExcludeFeatures(Collection<​Feature>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​sourceFeatures//​
 +    * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnDrawingProgressChanged(DrawingProgressChangedEventArgs) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.DrawingProgressChangedEventArgs|DrawingProgressChangedEventArgs]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetColumnNamesOutsideFeatureSourceCall(IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​String>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetFeaturesByActionWithStyleFilters(IEnumerable<​String>,​IEnumerable<​String>,​ZoomLevel,​Func<​Collection<​Feature>>,​IEnumerable<​String>,​RectangleShape) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Dictionary<​String,​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​styleFilters//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //​currentZoomLevel//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.ZoomLevel|ZoomLevel]]
 +    * Description:​N/​A
 +
 +  * //func//
 +    * Type:​Func<​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>>​
 +    * Description:​N/​A
 +
 +  * //ids//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //extent//
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ApplyLinkColumnValues(IEnumerable<​String>,​Func<​IEnumerable<​String>,​Collection<​Feature>>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //​getFeatures//​
 +    * Type:​Func<​IEnumerable<​String>,​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>>​
 +    * Description:​N/​A
 +
 +  * //filters//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ApplyLinkColumnValues(IEnumerable<​Feature>,​IEnumerable<​String>,​IEnumerable<​String>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​features//​
 +    * Type:​IEnumerable<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​N/​A
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //filters//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //​linkingColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetRequiredColumnNamesForLink(IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​String>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetReturningColumnNamesForLink(IEnumerable<​String>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​String>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //filters//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetFlatLinkSources() **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​IEnumerable<​[[ThinkGeo.MapSuite.Core.LinkSource|LinkSource]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} CheckIsLinkColumn(String) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Boolean
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​columnName//​
 +    * Type:String
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} CheckHasLinkColumns(IEnumerable<​String>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Boolean
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //filters//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetBoundingBoxCore() **
 +
 +  * //This method returns the bounding box which encompasses all of the features in the FeatureSource.//​
 +== Remarks ==
 +  * //This protected virtual method is called from the concrete public method GetBoundingBox. It does not take into account any transaction activity, as this is the responsibility of the concrete public method GetBoundingBox. In this way, as a developer, if you choose to override this method you do not have to consider transactions at all. The default implementation of GetBoundingBoxCore uses the GetAllRecordsCore method to calculate the bounding box of the FeatureSource. We strongly recommend that you provide your own implementation for this method that will be more efficient. If you do not override this method, it will get the BoundingBox by calling the GetAllFeatureCore method and deriving it from each feature. This is a very inefficient way to get the BoundingBox in most data sources. It is highly recommended that you override this method and replace it with a highly optimized version. For example, in a ShapeFile the BoundingBox is in the main header of the file. Similarly, if you are using Oracle Spatial, you can execute a simple query to get the BoundingBox of all the records without returning them. In these ways you can greatly improve the performance of this method.//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +  * Description:​This method returns the bounding box which encompasses all of the features in the FeatureSource.
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} CloneDeepCore() **
 +
 +  * //Create a copy of a FeatureSource using the deep clone process. The default implementation uses serialization.//​
 +== Remarks ==
 +  * //The difference between deep clone and shallow clone is as follows: In shallow cloning, only the object is copied; the objects within it are not. By contrast, deep cloning copies the cloned object as well as all the objects within.//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.FeatureSource|FeatureSource]]
 +  * Description:​A cloned FeatureSource.
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OpenCore() **
 +
 +  * //This method opens the FeatureSource so that it is initialized and ready to use.//
 +== Remarks ==
 +  * //This protected virtual method is called from the concrete public method Open. The Open method plays an important role, as it is responsible for initializing the FeatureSource. Most methods on the FeatureSource will throw an exception if the state of the FeatureSource is not opened. When the map draws each layer, it will open the FeatureSource as one of its first steps, then after it is finished drawing with that layer it will close it. In this way we are sure to release all resources used by the FeatureSource. When implementing this virtual method ,consider opening files for file-based sources, connecting to databases in the database-based sources and so on. You will get a chance to close these in the Close method of the FeatureSource.//​
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​None
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} CloseCore() **
 +
 +  * //This method closes the FeatureSource and releases any resources it was using.//
 +== Remarks ==
 +  * //This protected virtual method is called from the concrete public method Close. The close method plays an important role in the life cycle of the FeatureSource. It may be called after drawing to release any memory and other resources that were allocated since the Open method was called. If you override this method, it is recommended that you take the following things into account: This method may be called multiple times, so we suggest you write the method so that that a call to a closed FeatureSource is ignored and does not generate an error. We also suggest that in the Close you free all resources that have been opened. Remember that the object will not be destroyed, but will be re-opened possibly in the near future.//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​None
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} CommitTransactionCore(TransactionBuffer) **
 +
 +  * //This method will commit the existing transaction to its underlying source of data.//
 +== Remarks ==
 +  * //This method will commit the existing transaction to its underlying source of data. It will then pass back the results of the commit, including any error(s) received. If you are implementing your own FeatureSource,​ this is one of the crucial methods you must create. It should be fairly straightforward that you will loop through the transaction buffer and add, edit or delete the InternalFeatures in your underlying data source. Remember to build and pass back the TransactionResult class so that users of your FeatureSource can respond to failures you may encounter while committing the InternalFeatures. We will handle the end of the transaction and also the cleanup of the transaction buffer. Your task will be to commit the records and produce a TransactionResult return.The Transaction SystemThe 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 ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.TransactionResult|TransactionResult]]
 +  * Description:​The returned decimalDegreesValue of this method is a TransactionResult class which gives you the status of the transaction you just committed. It includes how many of the updates, adds, and deletes were successful, as well as any error(s) that were encountered during the committing of the transaction.
 +
 +== Parameters ==
 +  * //​transactions//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.TransactionBuffer|TransactionBuffer]]
 +    * Description:​This parameter encapsulates all of the adds, edits and deletes that make up the transaction. You will use this data to write the changes to your underlying data source.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} RaiseCustomColumnFetchEvent(Collection<​Feature>,​Collection<​String>,​Boolean) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​sourceFeatures//​
 +    * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​N/​A
 +
 +  * //​fieldNamesOutsideOfSource//​
 +    * Type:​Collection<​String>​
 +    * Description:​N/​A
 +
 +  * //​forceRaiseEvent//​
 +    * Type:​Boolean
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetAllFeaturesCore(IEnumerable<​String>​) **
 +
 +  * //This method returns all of the InternalFeatures in the FeatureSource.//​
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures in the FeatureSource. You will not need to consider anything about pending transactions,​ as this will be handled in the non-Core version of the method. The main purpose of this method is to be the anchor of all of our default virtual implementations within this class. We as the framework developers wanted to provide you the user with as much default virtual implementation as possible. To do this, we needed a way to get access to all of the features. For example, let's say we want to create a default implementation for finding all of the InternalFeatures in a bounding box. Because this is an abstract class, we do not know the specifics of the underlying data or how its spatial indexes work. What we do know is that if we get all of the records, then we can brute-force the answer. In this way, if you inherited from this class and only implemented this one method, we can provide default implementations for virtually every other API. While this is nice for you the developer if you decide to create your own FeatureSource,​ it comes with a price: namely, it is very inefficient. In the example we just discussed (about finding all of the InternalFeatures in a bounding box), we would not want to look at every record to fulfil this method. Instead, we would want to override the GetFeaturesInsideBoundingBoxCore and implement specific code that would be faster. For example, in Oracle Spatial there is a specific SQL statement to perform this operation very quickly. The same holds true with other specific FeatureSource examples. Most default implementations in the FeatureSource call the GetFeaturesInsideBoundingBoxCore,​ which by default calls the GetAllFeaturesCore. It is our advice that if you create your own FeatureSource that you ALWAYS override the GetFeatureInsideBoundingBox. This will ensure that nearly every other API will operate efficiently. Please see the specific API to determine what method it uses.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returned decimalDegreesValue is a collection of all of the InternalFeatures in the FeatureSource.
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetFeaturesOutsideBoundingBoxCore(RectangleShape,​IEnumerable<​String>​) **
 +
 +  * //This method returns all of the InternalFeatures of this FeatureSource outside of the specified bounding box.//
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures of this FeatureSource outside of the specified bounding box. If you are in a transaction and that transaction is live, this method will also take that into consideration. The default implementation of GetFeaturesOutsideBoundingBoxCore uses the GetAllRecordsCore method to determine which InternalFeatures are outside of the bounding box. We strongly recommend that you provide your own implementation for this method that will be more efficient.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns all of the InternalFeatures of this FeatureSource outside of the specified bounding box.
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter represents the bounding box that you wish to find InternalFeatures outside of.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetFeaturesInsideBoundingBoxCore(RectangleShape,​IEnumerable<​String>​) **
 +
 +  * //This method returns all of the InternalFeatures of this FeatureSource that are inside of the specified bounding box.//
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures of this FeatureSource that are inside of the specified bounding box. If you are overriding this method you will not need to consider anything about transactions,​ as this is handled by the concrete version of this method. The default implementation of GetFeaturesInsideBoundingBoxCore uses the GetAllRecordsCore method to determine which InternalFeatures are inside of the bounding box. We strongly recommend that you provide your own implementation for this method that will be more efficient. That is especially important for this method, as many other default virtual methods use this for their calculations. When you override this method, we highly recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returned decimalDegreesValue is a collection of all of the InternalFeatures that are inside of the bounding box.
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter represents the bounding box that you wish to find InternalFeatures inside of.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data that you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnApplyingFilters(ApplyingFiltersFeatureSourceEventArgs) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.ApplyingFiltersFeatureSourceEventArgs|ApplyingFiltersFeatureSourceEventArgs]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnAppliedFilters(AppliedFiltersFeatureSourceEventArgs) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.AppliedFiltersFeatureSourceEventArgs|AppliedFiltersFeatureSourceEventArgs]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ApplyFiltersCore(IEnumerable<​Feature>,​IEnumerable<​String>,​String) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​features//​
 +    * Type:​IEnumerable<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​N/​A
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //​linkExpression//​
 +    * Type:String
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToExternalProjectionIfNecessary(Collection<​Feature>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returnFeatures//​
 +    * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ProcessTransaction(RectangleShape,​Collection<​Feature>,​Boolean) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​N/​A
 +
 +  * //​returnFeatures//​
 +    * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​N/​A
 +
 +  * //​needUpdateProjection//​
 +    * Type:​Boolean
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetWrappingFeaturesLeft(RectangleShape,​Double,​Double,​IEnumerable<​String>,​RectangleShape) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​N/​A
 +
 +  * //​screenWidth//​
 +    * Type:Double
 +    * Description:​N/​A
 +
 +  * //​screenHeight//​
 +    * Type:Double
 +    * Description:​N/​A
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //​wrappingExtent//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetWrappingFeaturesRight(RectangleShape,​Double,​Double,​IEnumerable<​String>,​RectangleShape) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​N/​A
 +
 +  * //​screenWidth//​
 +    * Type:Double
 +    * Description:​N/​A
 +
 +  * //​screenHeight//​
 +    * Type:Double
 +    * Description:​N/​A
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //​wrappingExtent//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetFeaturesForDrawingCore(RectangleShape,​Double,​Double,​IEnumerable<​String>​) **
 +
 +  * //This method returns the InternalFeatures that will be used for drawing.//
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures of this FeatureSource that are inside of the specified bounding box. If you are overriding this method you will not need to consider anything about transactions,​ as this is handled by the concrete version of this method. The default implementation of GetFeaturesForDrawingCore uses the GetFeaturesInsodeBoundingBoxCore with some optimizations based on the screen width and height. For example, we can determine if a feature is going to draw in only one to four pixels and in that case we may not draw the entire feature but just a subset of it instead.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns the InternalFeatures that will be used for drawing.
 +
 +== Parameters ==
 +  * //​boundingBox//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter is the bounding box of the InternalFeatures that you want to draw.
 +
 +  * //​screenWidth//​
 +    * Type:Double
 +    * Description:​This parameter is the width of the canvas, in screen pixels, that you will draw on.
 +
 +  * //​screenHeight//​
 +    * Type:Double
 +    * Description:​This parameter is the height of the canvas, in screen pixels, that you will draw on.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} SpatialQueryCore(BaseShape,​QueryType,​IEnumerable<​String>​) **
 +
 +  * //This method returns all of the InternalFeatures based on the target Feature and the spatial query type specified.//​
 +== Remarks ==
 +  * //This method returns all of the InternalFeatures based on the target Feature and the spatial query type specified below. If you override this method, you do not need to consider transactions. It is suggested that if you are looking to speed up this method that you first override the GetFeaturesInsideBoundingBoxCore and then re-test this method, as it relies heavily on that method internally. See more information below.Spatial Query Types:​Disjoint - This method returns InternalFeatures where the specific Feature and the targetShape have no points in common.Intersects - This method returns InternalFeatures where the specific Feature and the targetShape have at least one point in common.Touches - This method returns InternalFeatures where the specific Feature and the targetShape have at least one boundary point in common, but no interior points.Crosses - This method returns InternalFeatures where the specific Feature and the targetShape share some but not all interior points.Within - This method returns InternalFeatures where the specific Feature lies within the interior of the targetShape.Contains - This method returns InternalFeatures where the specific Feature lies within the interior of the current shape.Overlaps - This method returns InternalFeatures where the specific Feature and the targetShape share some but not all points in common.TopologicalEqual - This method returns InternalFeatures where the specific Feature and the target Shape are topologically equal. The default implementation of SpatialQueryCore uses the GetFeaturesInsideBoundingBoxCore method to pre-filter the spatial query. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override this method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The return decimalDegreesValue is a collection of InternalFeatures that match the spatial query you executed based on the TargetShape.
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​This parameter specifies the target shape used in the spatial query.
 +
 +  * //​queryType//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.QueryType|QueryType]]
 +    * Description:​This parameter specifies what kind of spatial query you wish to perform.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetFeaturesNearestToCore(BaseShape,​GeographyUnit,​Int32,​IEnumerable<​String>​) **
 +
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a user defined number of InternalFeatures that are closest to the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a small bounding box around the TargetShape and then queries the features inside of it. If we reach the number of items to find, then we measure the returned InternalFeatures to find the nearest. If we do not find enough records, we scale up the bounding box and try again. As you can see, this is not the most efficient method. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesNearestCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a user defined number of InternalFeatures that are closest to the TargetShape.
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​This parameter is the shape you want to find InternalFeatures close to.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of measurement that the TargetShape and the FeatureSource are in, such as feet, meters, etc.
 +
 +  * //​maxItemsToFind//​
 +    * Type:Int32
 +    * Description:​This parameter defines how many close InternalFeatures to find around the TargetShape.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetFeaturesWithinDistanceOfCore(BaseShape,​GeographyUnit,​DistanceUnit,​Double,​IEnumerable<​String>​) **
 +
 +  * //This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape.//​
 +== Remarks ==
 +  * //This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape. It is important to note that the TargetShape and the FeatureSource must use the same unit, such as feet or meters. If they do not, then the results will not be predictable or correct. If there is a current transaction and it is marked as live, then the results will include any transaction Feature that applies. The implementation we provided creates a bounding box around the TargetShape using the distance supplied and then queries the features inside of it. This may not be the most efficient method for this operation. If your underlying data provider exposes a more efficient way, we recommend you override the Core version of this method and implement it. The default implementation of GetFeaturesWithinDistanceOfCore uses the GetFeaturesInsideBoundingBoxCore method for speed. We strongly recommend that you provide your own implementation for this method that will be more efficient. When you override GetFeaturesInsideBoundingBoxCore method, we recommend that you use any spatial indexes you have at your disposal to make this method as fast as possible.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a collection of InternalFeatures that are within a certain distance of the TargetShape.
 +
 +== Parameters ==
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​The shape you wish to find InternalFeatures within a distance of.
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​This parameter is the unit of data that the FeatureSource and TargetShape are in.
 +
 +  * //​distanceUnit//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.DistanceUnit|DistanceUnit]]
 +    * Description:​This parameter specifies the measurement unit for the distance parameter, such as feet, miles, kilometers, etc.
 +
 +  * //​distance//​
 +    * Type:Double
 +    * Description:​This parameter specifies the distance in which to find InternalFeatures around the TargetShape.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetBoundingBoxByIdCore(String) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //id//
 +    * Type:String
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetFirstFeaturesWellKnownTypeCore() **
 +
 +  * //This method returns the well known type that represents the first feature from FeatureSource.//​
 +== Remarks ==
 +  * //This protected virtual method is called from the concrete public method GetFirstFeaturesWellKnownType. It does not take into account any transaction activity, as this is the responsibility of the concrete public method GetFirstFeaturesWellKnownType. This way, as a developer, if you choose to override this method you do not have to consider transactions at all. The default implementation of GetCountCore uses the GetAllRFeaturesCore method to get WellKnownType of the first feature from all features. We strongly recommend that you provide your own implementation for this method that will be more efficient. If you do not override this method, it will get the count by calling the GetAllFeaturesCore method and get WellKnownType of the first feature from all features. This is a very inefficient way to get the count in most data sources. It is highly recommended that you override this method and replace it with a highly optimized version. For example, in a ShapeFile the record count is in the main header of the file. Similarly, if you are using Oracle Spatial, you can execute a simple query to get the count of all of the records without returning them. In these ways you can greatly improve the performance of this method.//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.WellKnownType|WellKnownType]]
 +  * Description:​This method returns the well known type that represents the first feature from FeatureSource.
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetFeaturesByIdsCore(IEnumerable<​String>,​IEnumerable<​String>​) **
 +
 +  * //This method returns a collection of InternalFeatures by providing a group of Ids.//
 +== Remarks ==
 +  * //This method returns a collection of InternalFeatures by providing a group of Ids. The internal implementation calls the GetAllFeaturesCore. Because of this, if you want a more efficient version of this method, then we highly suggest you override the GetFeaturesByIdsCore method and provide a fast way to find a group of InternalFeatures by their Id.//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​This method returns a collection of InternalFeatures by providing a group of Ids.
 +
 +== Parameters ==
 +  * //ids//
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter represents the group of Ids which uniquely identified the InternalFeatures in the FeatureSource.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToExternalProjection(IEnumerable<​RectangleShape>​) **
 +
 +  * //This method projects items based on the Projection of the FeatureSource.//​
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that projection, as a general rule, happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. With these projection methods it is very easy to handle the projection and de-projection. Remember that when adding your own public methods you always de-project incoming shapes and alway project outgoing shapes. Also remember that the Core methods do not consider projection, and they assume the data being passed into them and out of them is the same unit as the underlying data. Example of a New Public Method: public Feature ProcessFeature(Feature incomingFeature) { Be sure that you use the FromProjection on the incomingFeatureParameter as the first thing you do in this method. Call a Core Method or do your own processing Be sure that you call the ToProjection on the return result of the method before you pass it out. }//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]>​
 +  * Description:​This method projects a Feature based on the Projection of the FeatureSource.
 +
 +== Parameters ==
 +  * //​rectangles//​
 +    * Type:​IEnumerable<​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]>​
 +    * Description:​This parameter represents a group of RectangleShapes that you wish to project.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToInternalProjection(IEnumerable<​RectangleShape>​) **
 +
 +  * //This method de-projects items based on the Projection of the FeatureSource.//​
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that projection, as a general rule, happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. With these projection methods it is very easy to handle the projection and de-projection. Remember that when adding your own public methods you always de-project incoming shapes and alway project outgoing shapes. Also remember that the Core methods do not consider projection, and they assume the data being passed into them and out of them is the same unit as the underlying data. Example of a New Public Method: public Feature ProcessFeature(Feature incomingFeature) { Be sure that you use the FromProjection on the incomingFeatureParameter as the first thing you do in this method. Call a Core Method or do your own processing Be sure that you call the ToProjection on the return result of the method before you pass it out. }//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]>​
 +  * Description:​This method de-projects a BaseShape based on the Projection of the FeatureSource.
 +
 +== Parameters ==
 +  * //​rectangles//​
 +    * Type:​IEnumerable<​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]>​
 +    * Description:​This parameter represents a group of RectangleShapes that you wish to de-project.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToExternalProjection(RectangleShape) **
 +
 +  * //This method projects items based on the Projection of the FeatureSource.//​
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that projection, as a general rule, happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. With these projection methods it is very easy to handle the projection and de-projection. Remember that when adding your own public methods you always de-project incoming shapes and alway project outgoing shapes. Also remember that the Core methods do not consider projection, and they assume the data being passed into them and out of them is the same unit as the underlying data. Example of a New Public Method: public Feature ProcessFeature(Feature incomingFeature) { Be sure that you use the FromProjection on the incomingFeatureParameter as the first thing you do in this method. Call a Core Method or do your own processing Be sure that you call the ToProjection on the return result of the method before you pass it out. }//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +  * Description:​This method projects a RectangleShape based on the Projection of the FeatureSource.
 +
 +== Parameters ==
 +  * //​rectangle//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter represents the rectangle you wish to project.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToInternalProjection(RectangleShape) **
 +
 +  * //This method de-projects items based on the Projection of the FeatureSource.//​
 +== Remarks ==
 +  * //This is a protected method that is intended to help developers who want to implement or extend one of our FeatureSources. It is important to note that projection, as a general rule, happens inside the non-Core methods and we usually take care of it. However, as a developer, if you wish to add a new public method, then you will need to handle the projection yourself. With these projection methods it is very easy to handle the projection and de-projection. Remember that when adding your own public methods you always de-project incoming shapes and alway project outgoing shapes. Also remember that the Core methods do not consider projection, and they assume the data being passed into them and out of them is the same unit as the underlying data. Example of a New Public Method: public Feature ProcessFeature(Feature incomingFeature) { Be sure that you use the FromProjection on the incomingFeatureParameter as the first thing you do in this method. Call a Core Method or do your own processing Be sure that you call the ToProjection on the return result of the method before you pass it out. }//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +  * Description:​This method de-projects a RectangleShape based on the Projection of the FeatureSource.
 +
 +== Parameters ==
 +  * //​rectangle//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​This parameter represents the rectangle you wish to de-project.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ConvertToInternalProjectionCall(RectangleShape) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​rectangle//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.RectangleShape|RectangleShape]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} CanGetBoundingBoxQuicklyCore() **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Boolean
 +  * Description:​N/​A
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} CanGetCountQuicklyCore() **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Boolean
 +  * Description:​N/​A
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetDistinctColumnValuesCore(String) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.DistinctColumnValue|DistinctColumnValue]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​columnName//​
 +    * Type:String
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetAllFeaturesCore(IEnumerable<​String>,​Int32,​Int32) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +  * //​startIndex//​
 +    * Type:Int32
 +    * Description:​N/​A
 +
 +  * //​takeCount//​
 +    * Type:Int32
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnGettingFeaturesByIds(GettingFeaturesByIdsFeatureSourceEventArgs) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.GettingFeaturesByIdsFeatureSourceEventArgs|GettingFeaturesByIdsFeatureSourceEventArgs]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnGettingFeaturesForDrawing(GettingFeaturesForDrawingFeatureSourceEventArgs) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.GettingFeaturesForDrawingFeatureSourceEventArgs|GettingFeaturesForDrawingFeatureSourceEventArgs]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnGettingColumns(GettingColumnsFeatureSourceEventArgs) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.GettingColumnsFeatureSourceEventArgs|GettingColumnsFeatureSourceEventArgs]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnGottenColumns(GottenColumnsFeatureSourceEventArgs) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.GottenColumnsFeatureSourceEventArgs|GottenColumnsFeatureSourceEventArgs]]
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnCustomColumnFetch(CustomColumnFetchEventArgs) **
 +
 +  * //This method allows you to raise the CustomColumnFetch event from a derived class.//
 +== Remarks ==
 +  * //You can call this method from a derived class to enable it to raise the CustomColumnFetch event. This may be useful if you plan to extend the FeatureSource and you need access to user-definable field data. Details on the event: This event is raised when fields are requested in a feature source method that do not exist in the feature source. It allows you supplement the data from any outside source you may 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.//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​None
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.CustomColumnFetchEventArgs|CustomColumnFetchEventArgs]]
 +    * Description:​This parameter is the event arguments which define the parameters passed to the recipient of the event.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnCommittingTransaction(CommittingTransactionEventArgs) **
 +
 +  * //This method allows you to raise the CommittingTransaction event from a derived class.//
 +== Remarks ==
 +  * //You can call this method from a derived class to enable it to raise the CommittingTransaction event. This may be useful if you plan to extend the FeatureSource and you need access to the event. Details on the event: 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 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.//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​None
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.CommittingTransactionEventArgs|CommittingTransactionEventArgs]]
 +    * Description:​This parameter is the event arguments which define the parameters passed to the recipient of the event.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnCommittedTransaction(CommittedTransactionEventArgs) **
 +
 +  * //This method allows you to raise the CommittedTransaction event from a derived class.//
 +== Remarks ==
 +  * //You can call this method from a derived class to enable it to raise the CommittedTransaction event. This may be useful if you plan to extend the FeatureSource and you need access to the event. Details on the event: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 analyze the results of the transaction and do any cleanup code necessary. In the event some of the records did not commit, you can handle these 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.//​
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​None
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.CommittedTransactionEventArgs|CommittedTransactionEventArgs]]
 +    * Description:​This parameter is the event arguments which define the parameters passed to the recipient of the event.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnOpeningFeatureSource(OpeningFeatureSourceEventArgs) **
 +
 +  * //This method allows you to raise the OpeningFeatureSource event from a derived class.//
 +== Remarks ==
 +  * //You can call this method from a derived class to enable it to raise the OpeningFeatureSource event. This may be useful if you plan to extend the FeatureSource and you need access to the event. Details on the event: 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.//​
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​None
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.OpeningFeatureSourceEventArgs|OpeningFeatureSourceEventArgs]]
 +    * Description:​This parameter is the event arguments which define the parameters passed to the recipient of the event.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnOpenedFeatureSource(OpenedFeatureSourceEventArgs) **
 +
 +  * //This method allows you to raise the OpenedFeatureSource event from a derived class.//
 +== Remarks ==
 +  * //You can call this method from a derived class to enable it to raise the OpenedFeatureSource event. This may be useful if you plan to extend the FeatureSource and you need access to the event. Details on the event: 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.//​
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​None
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.OpenedFeatureSourceEventArgs|OpenedFeatureSourceEventArgs]]
 +    * Description:​This parameter is the event arguments which define the parameters passed to the recipient of the event.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnClosingFeatureSource(ClosingFeatureSourceEventArgs) **
 +
 +  * //This method allows you to raise the ClosingFeatureSource event from a derived class.//
 +== Remarks ==
 +  * //You can call this method from a derived class to enable it to raise the ClosingFeatureSource event. This may be useful if you plan to extend the FeatureSource and you need access to the event. Details on the event: 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.//​
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​None
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.ClosingFeatureSourceEventArgs|ClosingFeatureSourceEventArgs]]
 +    * Description:​This parameter is the event arguments which define the parameters passed to the recipient of the event.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} OnClosedFeatureSource(ClosedFeatureSourceEventArgs) **
 +
 +  * //This method allows you to raise the ClosedFeatureSource event from a derived class.//
 +== Remarks ==
 +  * //You can call this method from a derived class to enable it to raise the ClosedFeatureSource event. This may be useful if you plan to extend the FeatureSource and you need access to the event. Details on the event: 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.//​
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​None
 +
 +== Parameters ==
 +  * //e//
 +    * Type:​[[ThinkGeo.MapSuite.Core.ClosedFeatureSourceEventArgs|ClosedFeatureSourceEventArgs]]
 +    * Description:​This parameter is the event arguments which define the parameters passed to the recipient of the event.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ExecuteNonQueryCore(String) **
 +
 +  * //Executes a SQL statement against a connection object.//
 +== Remarks ==
 +  * //You can use ExecuteNonQuery to perform catalog operations (for example, querying the structure of a database or creating database objects such as tables), or to change the data in a database by executing UPDATE, INSERT, or DELETE statements. Although ExecuteNonQuery does not return any rows, any output parameters or return values mapped to parameters are populated with data. For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command.//
 +
 +== Return Value ==
 +  * Type:Int32
 +  * Description:​The number of rows affected.
 +
 +== Parameters ==
 +  * //​sqlStatement//​
 +    * Type:String
 +    * Description:​The sqlStatement to be excuted.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetFeaturesByColumnValueCore(String,​String,​IEnumerable<​String>​) **
 +
 +  * //Get all of the features by passing a columnName and a specified columValue.//​
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​The returnning features matches the columnValue.
 +
 +== Parameters ==
 +  * //​columnName//​
 +    * Type:String
 +    * Description:​The specified columnName to match the columnValue.
 +
 +  * //​columnValue//​
 +    * Type:String
 +    * Description:​The specified columnValue to match those returning features.
 +
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter allows you to select the field names of the column data you wish to return with each Feature.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ExecuteScalarCore(String) **
 +
 +  * //Executes the query and returns the first column of the first row in the result set returned by the query. All other columns and rows are ignored.//
 +== Remarks ==
 +  * //Use the ExcuteScalar method to retrieve a single value from the database. This requires less code than using the ExcuteQuery method and then performing the operations necessary to generate the single value using the data.//
 +
 +== Return Value ==
 +  * Type:Object
 +  * Description:​The first column of the first row in the result set.
 +
 +== Parameters ==
 +  * //​sqlStatement//​
 +    * Type:String
 +    * Description:​The sqlStatement to be excuted.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} ExecuteQueryCore(String) **
 +
 +  * //Executes the query and returns the result returned by the query.//
 +== Remarks ==
 +  * //Use the ExcuteScalar method to retrieve a single value from the database. This requires less code than using the ExcuteQuery method and then performing the operations necessary to generate the single value using the data.//
 +
 +== Return Value ==
 +  * Type:​DataTable
 +  * Description:​The result set in the format of dataTable.
 +
 +== Parameters ==
 +  * //​sqlStatement//​
 +    * Type:String
 +    * Description:​The sqlStatement to be excuted.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetColumnsCore() **
 +
 +  * //This method returns the columns available for the FeatureSource.//​
 +== Remarks ==
 +  * //As this is the virtual core version of the Columns method, it is intended to be overridden in inherited version of the class. When overriding, you will be responsible for getting a list of all of the columns supported by the FeatureSource. In this way, the FeatureSource will know what columns are available and will remove any extra columns when making calls to other core methods. For example, if you have a FeatureSource that has three columns of information and the user calls a method that requests four columns of information (something they can do with custom fields), we will first compare what they are asking for to the results of the GetColumnsCore. This way we can strip out custom columns before calling other Core methods, which are only responsible for returning data in the FeatureSource. For more information on custom fields, please see the documentation on OnCustomFieldsFetch.//​
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.FeatureSourceColumn|FeatureSourceColumn]]>​
 +  * Description:​This method returns the columns available for the FeatureSource.
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} GetCountCore() **
 +
 +  * //This method returns the count of the number of records in this FeatureSource.//​
 +== Remarks ==
 +  * //This protected virtual method is called from the concrete public method GetCount. It does not take into account any transaction activity, as this is the responsibility of the concrete public method GetCount. This way, as a developer, if you choose to override this method you do not have to consider transactions at all. The default implementation of GetCountCore uses the GetAllRecordsCore method to calculate how many records there are in the FeatureSource. We strongly recommend that you provide your own implementation for this method that will be more efficient. If you do not override this method, it will get the count by calling the GetAllFeatureCore method and counting each feature. This is a very inefficient way to get the count in most data sources. It is highly recommended that you override this method and replace it with a highly optimized version. For example, in a ShapeFile the record count is in the main header of the file. Similarly, if you are using Oracle Spatial, you can execute a simple query to get the count of all of the records without returning them. In these ways you can greatly improve the performance of this method.//
 +
 +== Return Value ==
 +  * Type:Int32
 +  * Description:​This method returns the count of the number of records in this FeatureSource.
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} Finalize() **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Void
 +  * Description:​N/​A
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}} MemberwiseClone() **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:Object
 +  * Description:​N/​A
 +
 +== Parameters ==
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}}{{wiki:​Static.gif|}} SplitColumnNames(IEnumerable<​String>​) **
 +
 +  * //This method will split the column names based on our column syntax.//
 +== Remarks ==
 +  * //This method is meant to be used by advanced users who are creating their own new methods on the FeatureSource. We have a system where you can concatenate column names you specify anywhere in the system to create a unique string. For example, let's say you have a dataset that has the following columns: Name, Grade and Class, and you want to create a custom label for it. Whenever you specify the column you wanted to use in the label, you could use a string like this: "​[Name] received a [Grade] in [Class]"​ and this would be valid. Behind the scenes, this method parses the string and returns the column names separately. Then, after we have the data, there is another helper method called CombineFieldValues that will add them back together again. All of this happens normally in the concrete methods of the FeatureSource and inheriting classes; however, if you want to extend the classes and create your own concrete methods, then we suggest you use this to be compliant with the concatenation system.//
 +
 +== Return Value ==
 +  * Type:​Collection<​String>​
 +  * Description:​This returns a single list of column names.
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​This parameter represents the column names you want to split.
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}}{{wiki:​Static.gif|}} SplitColumnNamesCall(IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​String>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​returningColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}}{{wiki:​Static.gif|}} CombineFieldValues(Dictionary<​String,​String>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Dictionary<​String,​String>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​columnValues//​
 +    * Type:​Dictionary<​String,​String>​
 +    * Description:​N/​A
 +
 +  * //​originalColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}}{{wiki:​Static.gif|}} ReplaceColumnValues(Collection<​Feature>,​IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​orginalFeatures//​
 +    * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​N/​A
 +
 +  * //​originalColumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}}{{wiki:​Static.gif|}} HasComplicateFields(IEnumerable<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Boolean
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​originalComlumnNames//​
 +    * Type:​IEnumerable<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}}{{wiki:​Static.gif|}} GetColumnNameAlias(String,​ICollection<​String>​) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:String
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​columnName//​
 +    * Type:String
 +    * Description:​N/​A
 +
 +  * //​columnNames//​
 +    * Type:​ICollection<​String>​
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +** {{wiki:​ProtectedMethod.gif|}}{{wiki:​Static.gif|}} GetFeaturesNearestFrom(Collection<​Feature>,​BaseShape,​GeographyUnit,​Int32) **
 +
 +  * //N/A//
 +== Remarks ==
 +  * //N/A//
 +
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +  * Description:​N/​A
 +
 +== Parameters ==
 +  * //​possibleResults//​
 +    * Type:​Collection<​[[ThinkGeo.MapSuite.Core.Feature|Feature]]>​
 +    * Description:​N/​A
 +
 +  * //​targetShape//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.BaseShape|BaseShape]]
 +    * Description:​N/​A
 +
 +  * //​unitOfData//​
 +    * Type:​[[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]
 +    * Description:​N/​A
 +
 +  * //​maxItemsToFind//​
 +    * Type:Int32
 +    * Description:​N/​A
 +
 +<div newline></​div>​
 +==== Public Properties ====
 +** {{wiki:​PublicProperty.gif|}} Id **
 +
 +N/A
 +== Remarks ==
 +N/A
 +== Return Value ==
 +  * Type:String
 +
 +** {{wiki:​PublicProperty.gif|}} 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 ==
 +  * Type:​Boolean
 +
 +** {{wiki:​PublicProperty.gif|}} 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 ==
 +  * Type:​Boolean
 +
 +** {{wiki:​PublicProperty.gif|}} CanModifyColumnStructure **
 +
 +N/A
 +== Remarks ==
 +N/A
 +== Return Value ==
 +  * Type:​Boolean
 +
 +** {{wiki:​PublicProperty.gif|}} 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 ==
 +  * Type:​Boolean
 +
 +** {{wiki:​PublicProperty.gif|}} 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 ==
 +  * Type:​Boolean
 +
 +** {{wiki:​PublicProperty.gif|}} 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 ==
 +  * Type:​Boolean
 +
 +** {{wiki:​PublicProperty.gif|}} 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 ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.Projection|Projection]]
 +
 +** {{wiki:​PublicProperty.gif|}} GeoCache **
 +
 +The cache system.
 +== Remarks ==
 +You must set IsActive to true for the Cache system. The default is not active.
 +== Return Value ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.FeatureCache|FeatureCache]]
 +
 +** {{wiki:​PublicProperty.gif|}} 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 ==
 +  * Type:​Collection<​String>​
 +
 +** {{wiki:​PublicProperty.gif|}} 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 ==
 +  * Type:​[[ThinkGeo.MapSuite.Core.TransactionBuffer|TransactionBuffer]]
 +
 +** {{wiki:​PublicProperty.gif|}} MaxRecordsToDraw **
 +
 +N/A
 +== Remarks ==
 +N/A
 +== Return Value ==
 +  * Type:Int32
 +
 +** {{wiki:​PublicProperty.gif|}} LinkSources **
 +
 +N/A
 +== Remarks ==
 +N/A
 +== Return Value ==
 +  * Type:​Collection<​[[ThinkGeo.MapSuite.Core.LinkSource|LinkSource]]>​
 +
 +** {{wiki:​PublicProperty.gif|}} LinkExpressions **
 +
 +N/A
 +== Remarks ==
 +N/A
 +== Return Value ==
 +  * Type:​Collection<​String>​
 +
 +** {{wiki:​PublicProperty.gif|}} Filters **
  
-> <​html><​strong id="​enums_a"><​/strong></html>**A**+N/A 
 +=Remarks == 
 +N/
 +== Return Value == 
 +  * Type:​Collection<String>
  
-  ​[[ThinkGeo.MapSuite.Core.AdornmentLocation|AdornmentLocation]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​PublicProperty.gif|}} GeometryValidationMode ​**
-  ​[[ThinkGeo.MapSuite.Core.AngleUnit|AngleUnit]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.ApplyUntilZoomLevel|ApplyUntilZoomLevel]]<​div newline></​div><​div>​This enumeration is used on a ZoomLevel to allow its styles to be applied to other zoom levels.</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.AreaUnit|AreaUnit]]<​div newline></​div><​div>​Units describing various ways you can measure areas.</​div>​+
  
-> <​html><​strong id="​enums_b"><​/strong></​html>​**B**+N/A 
 +== Remarks == 
 +N/
 +== Return Value == 
 +  ​Type:​[[ThinkGeo.MapSuite.Core.GeometryValidationMode|GeometryValidationMode]]
  
-  * [[ThinkGeo.MapSuite.Core.BingMapsMapType|BingMapsMapType]]<​div newline></​div><​div>​N/​A</​div>​ +==== Protected Properties ==== 
-  [[ThinkGeo.MapSuite.Core.BingMapsPictureFormat|BingMapsPictureFormat]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​ProtectedProperty.gif|}} CanExecuteSqlQueryCore ​**
-  ​[[ThinkGeo.MapSuite.Core.BreakValueInclusion|BreakValueInclusion]]<​div newline></​div><​div>​In a class break style, this enumeration determines whether the break includes or excludes the value entered in the break.</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.BufferCapType|BufferCapType]]<​div newline></​div><​div>​This class represents various ways a buffer operation can cap the objects buffered.</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.BuildIndexMode|BuildIndexMode]]<​div newline></​div><​div>​This enumeration represents whether an index should be rebuilt or not.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.BuildRecordIdMode|BuildRecordIdMode]]<​div newline></​div><​div>​This enumeration represents whether a record ID should be rebuilt or not.</​div>​+
  
-> <​html><​strong id="​enums_c"></​strong></​html>​**C**+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 == 
 +  ​Type:​Boolean
  
-  ​[[ThinkGeo.MapSuite.Core.CadStylingType|CadStylingType]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​ProtectedProperty.gif|}} IsOpenCore ​**
-  ​[[ThinkGeo.MapSuite.Core.CogoCurveDirection|CogoCurveDirection]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.CogoCurveDirectionType|CogoCurveDirectionType]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.CogoCurveParameterType|CogoCurveParameterType]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.CogoDirectionType|CogoDirectionType]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ColorWheelDirection|ColorWheelDirection]]<​div newline></​div><​div>​N/​A</​div>​+
  
-> <​html><​strong id="​enums_d"></​strong></​html>​**D**+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 == 
 +  ​Type:​Boolean
  
-  ​[[ThinkGeo.MapSuite.Core.DataGridResizeMode|DataGridResizeMode]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​ProtectedProperty.gif|}} CanModifyColumnStructureCore ​**
-  ​[[ThinkGeo.MapSuite.Core.DatabaseConnectionMode|DatabaseConnectionMode]]<​div newline></​div><​div>​N/​A</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.DbfColumnType|DbfColumnType]]<​div newline></​div><​div>​This enumeration represents the column type in the DBF.</​div>​ +
-  ​[[ThinkGeo.MapSuite.Core.DbfReadWriteMode|DbfReadWriteMode]]<​div newline></​div><​div>​Dbf read write mode</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DegreesMinutesSecondsFormatType|DegreesMinutesSecondsFormatType]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DistanceCalculationMode|DistanceCalculationMode]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DistanceUnit|DistanceUnit]]<​div newline></​div><​div>​Units describing various ways you can measure lengths.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingExceptionMode|DrawingExceptionMode]]<​div newline></​div><​div>​This enum is used to describe some choice when exception hanppens during drawing Layers or Overlays.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingFontStyles|DrawingFontStyles]]<​div newline></​div><​div>​This enumeration specifies the type of font style for drawing text.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingGraphicsUnit|DrawingGraphicsUnit]]<​div newline></​div><​div>​This enumeration represents the graphics unit.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingLevel|DrawingLevel]]<​div newline></​div><​div>​This enumeration represents the drawing level used in the GeoCanvas.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingLineCap|DrawingLineCap]]<​div newline></​div><​div>​This enumeration represents the available cap styles with which a GeoPen object can end a line.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingLineJoin|DrawingLineJoin]]<​div newline></​div><​div>​This enumeration specifies how to join consecutive line or curve segments.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingPenAlignment|DrawingPenAlignment]]<​div newline></​div><​div>​Specifies the alignment of a GeoPen object in relation to the theoretical,​ zero-width line.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.DrawingQuality|DrawingQuality]]<​div newline></​div><​div>​This enumeration specifies the drawing quality of the GeoCanvas.</​div>​+
  
-> <​html><​strong id="​enums_e"><​/strong></​html>​**E**+N/A 
 +== Remarks == 
 +N/
 +== Return Value == 
 +  ​Type:​Boolean
  
-  ​[[ThinkGeo.MapSuite.Core.ExecutingSqlStatementType|ExecutingSqlStatementType]]<​div newline></​div><​div>​This enumeration represents the type of ExcutingSqlStatement.</​div>​+** {{wiki:​ProtectedProperty.gif|}} FeatureSourceColumns **
  
-> <​html><​strong id="​enums_f">​</strong></​html>​**F**+This property gets the columns of the feature source. 
 +=Remarks == 
 +None. 
 +== Return Value == 
 +  * Type:​Collection<[[ThinkGeo.MapSuite.Core.FeatureSourceColumn|FeatureSourceColumn]]>
  
-  ​[[ThinkGeo.MapSuite.Core.FeatureValidationType|FeatureValidationType]]<​div newline></​div><​div>​N/A</div>+==== Public Events ==== 
 +** {{wiki:​PublicEvent.gif|}} DrawingProgressChanged ** 
 +N/A 
 +== Remarks == 
 +N/A
  
-> <​html><​strong id="​enums_g"></​strong></​html>​**G**+Event Arguments:​[[ThinkGeo.MapSuite.Core.DrawingProgressChangedEventArgs|DrawingProgressChangedEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.GeoDashCap|GeoDashCap]]<​div newline></​div><​div>​This enumeration represents the type of graphic shape to use on both ends of each dash in a dashed line.</​div>​ +** {{wiki:​PublicEvent.gif|}} GettingColumns ​** 
-  ​[[ThinkGeo.MapSuite.Core.GeoHatchStyle|GeoHatchStyle]]<​div newline></​div><​div>​This enumeration defines the various kinds of hatch patterns that can be used to fill areas using the GeoHatchBrush.</​div>​ +N/A 
-  ​[[ThinkGeo.MapSuite.Core.GeoLinearGradientDirection|GeoLinearGradientDirection]]<​div newline></​div><​div>​Specifies the direction of a linear gradient.</​div>​ +== Remarks == 
-  ​[[ThinkGeo.MapSuite.Core.GeoObjectModelerDefaultValueMode|GeoObjectModelerDefaultValueMode]]<​div newline></​div><​div>​Indicates how the default value of a member will be dealt with by the modeler.</​div>​ +N/A
-  * [[ThinkGeo.MapSuite.Core.GeoObjectModelerMemberTypes|GeoObjectModelerMemberTypes]]<​div newline></​div><​div>​Indicate the kind of member that will be modeled by the modeler.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoTiffLibraryType|GeoTiffLibraryType]]<​div newline></​div><​div>​This is an enumation that indicates which way is used to read the image source.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeoWrapMode|GeoWrapMode]]<​div newline></​div><​div>​This enumeration determines how a texture is filled in with a GeoTextureBrush when the area to be filled is larger than the texture.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeographyUnit|GeographyUnit]]<​div newline></​div><​div>​Units describing the way geographies are stored in a data source.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeohashAjacentDirection|GeohashAjacentDirection]]<​div newline></​div><​div>​N/A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GeometryValidationMode|GeometryValidationMode]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GoogleMapsMapType|GoogleMapsMapType]]<​div newline></​div><​div>​This enumeration specifies the map types available from Google Maps.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GoogleMapsPictureFormat|GoogleMapsPictureFormat]]<​div newline></​div><​div>​This enumeration specifies the picture formats when getting images back to client from Google Maps.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.GoogleMapsTileMode|GoogleMapsTileMode]]<​div newline></​div><​div>​N/A</​div>​+
  
-> <​html><​strong id="​enums_i"></​strong></​html>​**I**+Event Arguments:​[[ThinkGeo.MapSuite.Core.GettingColumnsFeatureSourceEventArgs|GettingColumnsFeatureSourceEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.IsoLineType|IsoLineType]]<​div newline></​div><​div>​N/A</div>+** {{wiki:​PublicEvent.gif|}} GottenColumns ** 
 +N/A 
 +== Remarks == 
 +N/A
  
-> <​html><​strong id="​enums_j"></​strong></​html>​**J**+Event Arguments:​[[ThinkGeo.MapSuite.Core.GottenColumnsFeatureSourceEventArgs|GottenColumnsFeatureSourceEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.JeffersonianSplitMode|JeffersonianSplitMode]]<​div newline></​div><​div>​N/A</div>+** {{wiki:​PublicEvent.gif|}} ApplyingFilters ** 
 +N/A 
 +== Remarks == 
 +N/A
  
-> <​html><​strong id="​enums_k"></​strong></​html>​**K**+Event Arguments:​[[ThinkGeo.MapSuite.Core.ApplyingFiltersFeatureSourceEventArgs|ApplyingFiltersFeatureSourceEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.KmlFileReadWriteMode|KmlFileReadWriteMode]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​PublicEvent.gif|}} AppliedFilters ** 
-  * [[ThinkGeo.MapSuite.Core.KmlFileType|KmlFileType]]<​div newline></​div><​div>​N/A</​div>​ +N/A 
-  * [[ThinkGeo.MapSuite.Core.KmlStylingType|KmlStylingType]]<​div newline></​div><​div>​N/A</​div>​+== Remarks == 
 +N/A
  
-> <​html><​strong id="​enums_l"></​strong></​html>​**L**+Event Arguments:​[[ThinkGeo.MapSuite.Core.AppliedFiltersFeatureSourceEventArgs|AppliedFiltersFeatureSourceEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.LabelDuplicateRule|LabelDuplicateRule]]<​div newline></​div><​div>​This enumeration defines the different labeling duplicate rules.</​div>​ +** {{wiki:​PublicEvent.gif|}} GettingFeaturesByIds ​** 
-  ​[[ThinkGeo.MapSuite.Core.LabelLeaderLinesRule|LabelLeaderLinesRule]]<​div newline></​div><​div>​N/​A</​div>​ +N/A 
-  ​[[ThinkGeo.MapSuite.Core.LabelOverlappingRule|LabelOverlappingRule]]<​div newline></​div><​div>​This enumeration defines the rules for overlapping.</​div>​ +== Remarks == 
-  ​[[ThinkGeo.MapSuite.Core.LayerAnchorLocation|LayerAnchorLocation]]<​div newline></​div><​div>​N/​A</​div>​ +N/A
-  * [[ThinkGeo.MapSuite.Core.LegendContentResizeMode|LegendContentResizeMode]]<​div newline></​div><​div>​N/A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LegendImageJustificationMode|LegendImageJustificationMode]]<​div newline></​div><​div>​N/A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.LineDashStyle|LineDashStyle]]<​div newline></​div><​div>​This enumeration specifies the style of dashed lines drawn with a GeoPen object.</​div>​+
  
-> <​html><​strong id="​enums_m"></​strong></​html>​**M**+Event Arguments:​[[ThinkGeo.MapSuite.Core.GettingFeaturesByIdsFeatureSourceEventArgs|GettingFeaturesByIdsFeatureSourceEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.MapPrinterDrawingMode|MapPrinterDrawingMode]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​PublicEvent.gif|}} GettingFeaturesForDrawing *
-  ​[[ThinkGeo.MapSuite.Core.MapPrinterPreviewDrawingMode|MapPrinterPreviewDrawingMode]]<​div newline></​div><​div>​This enumeration specifies the map printer layer preview draw mode.</​div>​ +N/A 
-  ​[[ThinkGeo.MapSuite.Core.MapResizeMode|MapResizeMode]]<​div newline></​div><​div>​The enumeration represents which mode will use for map resize.</​div>​ +== Remarks == 
-  * [[ThinkGeo.MapSuite.Core.MapSuiteLogLevel|MapSuiteLogLevel]]<​div newline></​div><​div>​N/A</​div>​ +N/A
-  * [[ThinkGeo.MapSuite.Core.MaskType|MaskType]]<​div newline></​div><​div>​N/A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.MatrixReferenceCorner|MatrixReferenceCorner]]<​div newline></​div><​div>​This enum specifies the Reference corner when caculating the Matrix from Matrix boundingBox.</​div>​+
  
-> <​html><​strong id="​enums_o"></​strong></​html>​**O**+Event Arguments:​[[ThinkGeo.MapSuite.Core.GettingFeaturesForDrawingFeatureSourceEventArgs|GettingFeaturesForDrawingFeatureSourceEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.OpenStreetMapLayerPictureFormat|OpenStreetMapLayerPictureFormat]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​PublicEvent.gif|}} CustomColumnFetch ** 
-  * [[ThinkGeo.MapSuite.Core.OverwriteMode|OverwriteMode]]<​div newline></​div><​div>​This enumeration represents whether ​a file should be overwrite or not if the file exists.</​div>​+This event is raised when fields are requested in a feature source method that do not exist in the feature sourceIt 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 sourceIt allows you to supplement the data from any outside source you haveIt is used primarily when you have data relating to a particular feature or set of features that is not within source of the dataFor example, you may have 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.
  
-> <​html><​strong id="​enums_p"></​strong></​html>​**P**+Event Arguments:​[[ThinkGeo.MapSuite.Core.CustomColumnFetchEventArgs|CustomColumnFetchEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.PanDirection|PanDirection]]<​div newline></​div><​div>​This enumeration defines panning directions.</​div>​ +** {{wiki:​PublicEvent.gif|}} CommittingTransaction ** 
-  * [[ThinkGeo.MapSuite.Core.PenBrushDrawingOrder|PenBrushDrawingOrder]]<​div newline></​div><​div>​This enumeration determines whether ​the brush or the pen draws first.</​div>​ +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 committedIt also allows you to cancel the pending commit of the transaction. 
-  * [[ThinkGeo.MapSuite.Core.PointPlacement|PointPlacement]]<​div newline></​div><​div>​This enumeration determines ​the label placement when labeling point features.</​div>​ +== Remarks == 
-  * [[ThinkGeo.MapSuite.Core.PointSymbolType|PointSymbolType]]<​div newline></​div><​div>​This enumeration defines ​the different types of PointSymbols ​that can be drawn.</​div>​ +This event is raised before ​the CommitTransactionCore is called and allows you access to the TransactionBuffer before the transaction is committedIt also allows you to cancel the pending transactionThe 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 transactionsIn the event that you cancel the CommitTransaction method, the transaction remains intact and you will still be editing. This makes it nice place to possibly check for connectivity before the TransactionCore code is run, which is where the records are actually committedCalling the RollBackTransaction method is the only way to permanently cancel a pending transaction without committing it.
-  * [[ThinkGeo.MapSuite.Core.PointType|PointType]]<​div newline></​div><​div>​This enumeration defines how PointSymbol will be drawn.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PolygonLabelingLocationMode|PolygonLabelingLocationMode]]<​div newline></​div><​div>​Labeling Location Mode for polygon</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PrinterDragMode|PrinterDragMode]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PrinterOrientation|PrinterOrientation]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PrinterPageSize|PrinterPageSize]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PrinterResizeMode|PrinterResizeMode]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PrinterWrapMode|PrinterWrapMode]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.PrintingUnit|PrintingUnit]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.Proj4MemoryMode|Proj4MemoryMode]]<​div newline></​div><​div>​The enumeration indicates which way are specified ​to read the projection information.</​div>​+
  
-> <​html><​strong id="​enums_q"></​strong></​html>​**Q**+Event Arguments:​[[ThinkGeo.MapSuite.Core.CommittingTransactionEventArgs|CommittingTransactionEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.QueryType|QueryType]]<​div newline></​div><​div>​This enumeration specifies ​the ways you can execute a spatial query against a FeatureSource.</​div>​+** {{wiki:​PublicEvent.gif|}} 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.
  
-> <​html><​strong id="​enums_r"></​strong></​html>​**R**+Event Arguments:​[[ThinkGeo.MapSuite.Core.CommittedTransactionEventArgs|CommittedTransactionEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.RandomColorType|RandomColorType]]<​div newline></​div><​div>​Defines values represent which kind of color will use for randomly.</​div>​ +** {{wiki:​PublicEvent.gif|}} OpeningFeatureSource ** 
-  * [[ThinkGeo.MapSuite.Core.RegexMatching|RegexMatching]]<​div newline></​div><​div>​This enumeration defines ​the matching criteria for regular expression matching.</​div>​ +This event is called before ​the opening of the FeatureSource
-  * [[ThinkGeo.MapSuite.Core.RequestDrawingBufferTimeType|RequestDrawingBufferTimeType]]<​div newline></​div><​div>​N/​A</​div>​ +== Remarks == 
-  * [[ThinkGeo.MapSuite.Core.RestrictionMode|RestrictionMode]]<​div newline></​div><​div>​This enumeration specifies ​the restriction mode.</​div>​ +This event is called before ​the opening of the FeatureSourceTechnically,​ this event is called after the calling of the Open method on the FeatureSource,​ but before the protected OpenCore methodIt is typical that the FeatureSource may be opened and closed may times during the life cycle of your applicationThe type of control the MapEngine is embedded in will dictate how often this happensFor 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 connection-less environmentIn the case of the Desktop Edition, we can keep the FeaureSources open, knowing that we can maintain a persistent connection.
-  * [[ThinkGeo.MapSuite.Core.RestrictionStyle|RestrictionStyle]]<​div newline></​div><​div>​This enumeration specifies ​the type of restriction zone display style.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ReturningColumnsType|ReturningColumnsType]]<​div newline></​div><​div>​This enumeration provides some options when querying ​feature.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RingOrder|RingOrder]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RtreeSpatialIndexDataFormat|RtreeSpatialIndexDataFormat]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RtreeSpatialIndexPageSize|RtreeSpatialIndexPageSize]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.RtreeSpatialIndexReadWriteMode|RtreeSpatialIndexReadWriteMode]]<​div newline></​div><​div>​N/​A</​div>​+
  
-> <​html><​strong id="​enums_s"></​strong></​html>​**S**+Event Arguments:​[[ThinkGeo.MapSuite.Core.OpeningFeatureSourceEventArgs|OpeningFeatureSourceEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.ScaleLineUnitSystem|ScaleLineUnitSystem]]<​div newline></​div><​div>​Unit Mode</​div>​ +** {{wiki:​PublicEvent.gif|}} OpenedFeatureSource *
-  ​[[ThinkGeo.MapSuite.Core.ScreenUnit|ScreenUnit]]<​div newline></​div><​div>​N/​A</​div>​ +This event is called after the opening ​of the FeatureSource
-  ​[[ThinkGeo.MapSuite.Core.SelectabilityMode|SelectabilityMode]]<​div newline></​div><​div>​N/​A</​div>​ +== Remarks == 
-  * [[ThinkGeo.MapSuite.Core.ShapeFileReadWriteMode|ShapeFileReadWriteMode]]<​div newline></​div><​div>​This enumeration represent read only or read-write nature ​of a Shape File.</​div>​ +This event is called after the opening of the FeatureSourceTechnically,​ this event is called after the calling ​of the Open method ​on the FeatureSource and after the protected OpenCore method is calledIt is typical that the FeatureSource may be opened and closed may times during the life cycle of your applicationThe type of control the MapEngine is embedded in will dictate how often this happensFor 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 environmentIn the case of the Desktop Edition, we can keep the FeaureSources open, knowing that we can maintain ​persistent connection.
-  * [[ThinkGeo.MapSuite.Core.ShapeFileSortingMode|ShapeFileSortingMode]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ShapeFileType|ShapeFileType]]<​div newline></​div><​div>​This enumeration represents ​the types stored in the Shape File.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.ShapeValidationMode|ShapeValidationMode]]<​div newline></​div><​div>​This enumeration describes ​the type of validation test to run on shapes.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SimpleFilterConditionType|SimpleFilterConditionType]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SimplificationType|SimplificationType]]<​div newline></​div><​div>​Specifies which algorthm ​will be use to simplify.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SpatialDataType|SpatialDataType]]<​div newline></​div><​div>​This property gets the spatial data type in the MsSql2008FeatureSource.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.SplineType|SplineType]]<​div newline></​div><​div>​This enumeration represents ​the spline type for labeling.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.StartingPoint|StartingPoint]]<​div newline></​div><​div>​An enumeration describing ​the place to start on line when doing certain operations.</​div>​+
  
-> <​html><​strong id="​enums_t"></​strong></​html>​**T**+Event Arguments:​[[ThinkGeo.MapSuite.Core.OpenedFeatureSourceEventArgs|OpenedFeatureSourceEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.TabFileReadWriteMode|TabFileReadWriteMode]]<​div newline></​div><​div>​N/​A</​div>​ +** {{wiki:​PublicEvent.gif|}} ClosingFeatureSource ​** 
-  ​[[ThinkGeo.MapSuite.Core.TabStylingType|TabStylingType]]<​div newline></​div><​div>​N/​A</​div>​ +This event is called before ​the closing of the FeatureSource
-  ​[[ThinkGeo.MapSuite.Core.TextHorizontalAlignment|TextHorizontalAlignment]]<​div newline></​div><​div>​N/​A</​div>​ +== Remarks == 
-  ​[[ThinkGeo.MapSuite.Core.ThreadSafetyLevel|ThreadSafetyLevel]]<​div newline></​div><​div>​N/​A</​div>​ +This event is called before ​the closing ​of the FeatureSourceTechnically,​ this event is called after the calling of the Close method on the FeatureSourcebut 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 happensFor example, in the case of the Web Editioneach 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 connection-less environmentIn the case of the Desktop Edition, we can keep the FeaureSources openknowing that we can maintain ​persistent connection.
-  * [[ThinkGeo.MapSuite.Core.TileAccessMode|TileAccessMode]]<​div newline></​div><​div>​This enumeration represents how the tileCache should access ​the tiles.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TileImageFormat|TileImageFormat]]<​div newline></​div><​div>​Specifies ​the format ​of the map image.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TinyGeoFileType|TinyGeoFileType]]<​div newline></​div><​div>​N/​A</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TinyGeoPrecisionMode|TinyGeoPrecisionMode]]<​div newline></​div><​div>​One TinyGeo file can be internally splitted into multi regions. The more precise ​the data is, the smaller ​the region has to be and the more regions one file will haveWith splitting ​the data into regionsthe data itself ​is also splitted so the number ​of records are increased; on the other side each record ​is smaller so there are fewer chance ​to load huge shape for just rendering a small area of itThe split region ​of a TinyGeo file is defined by the PricisionInMeter parameter in the Create methodwhile this enum TinyGeoPrecisionMode affects the max Precision TinyGeo ​can be.</​div>​ +
-  * [[ThinkGeo.MapSuite.Core.TransactionResultStatus|TransactionResultStatus]]<​div newline></​div><​div>​This enumeration represents the results from FeatureSource transaction.</​div>​+
  
-> <​html><​strong id="​enums_u"></​strong></​html>​**U**+Event Arguments:​[[ThinkGeo.MapSuite.Core.ClosingFeatureSourceEventArgs|ClosingFeatureSourceEventArgs]]
  
-  ​[[ThinkGeo.MapSuite.Core.UnitSystem|UnitSystem]]<​div newline></​div><​div>​System ​of measurement.</​div>​+** {{wiki:​PublicEvent.gif|}} ClosedFeatureSource ** 
 +This event is called after the closing of the FeatureSource. 
 +== Remarks == 
 +This event is called after the closing of the FeatureSourceTechnically,​ 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.
  
-> <​html><​strong id="​enums_w"></​strong></​html>​**W**+Event Arguments:​[[ThinkGeo.MapSuite.Core.ClosedFeatureSourceEventArgs|ClosedFeatureSourceEventArgs]]
  
-  * [[ThinkGeo.MapSuite.Core.WellKnownType|WellKnownType]]<​div newline></​div><​div>​This describes a set of enumerations that list the valid types of geometries.</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WfsNamespace|WfsNamespace]]<​div newline></​div><​div>​Wfs Name space.</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WkbByteOrder|WkbByteOrder]]<​div newline></​div><​div>​This enumeration represents the byte order that well-known binary will be written in.</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WkbFileReadWriteMode|WkbFileReadWriteMode]]<​div newline></​div><​div>​This enumeration represent read only or read-write nature of a Wkb File.</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WkbFileType|WkbFileType]]<​div newline></​div><​div>​N/​A</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WmsAxisOrder|WmsAxisOrder]]<​div newline></​div><​div>​N/​A</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WmtsSeverEncodingType|WmtsSeverEncodingType]]<​div newline></​div><​div>​WMTS System.</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WorldMapKitLayerType|WorldMapKitLayerType]]<​div newline></​div><​div>​N/​A</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WorldMapKitMapType|WorldMapKitMapType]]<​div newline></​div><​div>​N/​A</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WorldMapKitProjection|WorldMapKitProjection]]<​div newline></​div><​div>​This enumeration represents which projection will use for world map kit.</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WorldMapKitTileMode|WorldMapKitTileMode]]<​div newline></​div><​div>​N/​A</​div>​ 
-  * [[ThinkGeo.MapSuite.Core.WrappingMode|WrappingMode]]<​div newline></​div><​div>​N/​A</​div>​ 
-=== Interfaces === 
  
thinkgeo.mapsuite.core.featuresource.1442480403.txt.gz · Last modified: 2015/09/17 09:00 by admin