Skip to content

Changelog

Major changes for ThinkGeo 14.5

Release date: 03/31/2026

ThinkGeo.Core Namespace:

New Features & Improvements

  • Added ArcGisServerRestVectorAsyncLayer for querying and rendering ArcGIS Server REST vector feature services.
  • Added WfsV2AsyncLayer for WFS 2.0 endpoints, with improved query string generation and property-name handling; it replaces WfsV2FeatureLayer for WFS 2.0.
  • Added Feature.MakeGeometryValid() to repair invalid geometries using NetTopologySuite.
  • Added Feature.IsGeometryValid(out TopologyValidationError validationError) to validate a geometry and return the validation error when it is invalid.
  • Added PolygonSeamRenderingMode to control polygon seam sealing independently of vector anti-aliasing and eliminate thin white seams between adjacent filled polygons with no outline.
  • Added RasterXyzTileAsyncLayer.MinZoomOfTheData and RenderBeyondMinZoom.
  • Added DrawingExceptionMode.IgnoreException; layers that throw exceptions can now be ignored
  • Made XyzTileOverlay.XyzTileAsyncLayer public.
  • Added LineStyle.OffsetFromLine for rendering lines at a parallel offset from the feature geometry.
  • Added mapbox:// URI support for sprites and glyphs referenced by MapBox style JSON.
  • Improved MapBox Streets v11 compatibility for line-pattern, fill-pattern, and advanced text-layout properties.
  • Standardized number parsing on CultureInfo.InvariantCulture to fix locale-specific coordinate and style parsing issues.
  • Upgraded magnetic declination data from IGRF13 to IGRF14.
  • Added XML round-trip serialization support for WebXyzRasterTileAsyncLayer.
  • Improved TextStyle formatting support for NumericFormat, DateFormat, and TextFormat.
  • Added per-character font fallback in SkiaGeoCanvas and the new CreatingSKTypefaceForCharacter event for custom font resolution.
  • Enhanced ScaleLineAdornmentLayer with AboveLabelTextStyle, BelowLabelTextStyle, AboveLabelMargin, and BelowLabelMargin, plus better default text sizing.
  • Added Noto Sans as the default fallback font.
  • Updated FileGeoDatabaseFeatureLayer.GetInternalProj4ProjectionParametersString() to return the table's spatial reference, enabling CRS detection without a .prj file.
  • Unified raster resampling under RasterResamplingMode across GeoTiff, Skia raster, and GDAL sources.
  • Added SkiaRenderingOptions for fine-grained SkiaGeoCanvas rendering configuration.
  • Reworked SkiaSharp bitmap/image ownership for better thread safety and lower contention in multi-tile rendering.
  • Cached StyleJsonTextStyle zoom-level state and icon lookups to remove repeated allocations on unchanged zoom levels.
  • Released ThinkGeoVectorMapsAsyncLayer feature data and style references immediately after each tile draw to reduce peak heap usage during concurrent rendering.
  • Replaced MultipolygonShape convex hull generation in PositionStyle with Andrew's monotone chain algorithm for faster, correct results.

Bug Fixes

  • Fixed FileGDB multipart polygon conversion so outer and inner rings are classified correctly and emitted as Polygon or MultiPolygon WKB as appropriate.
  • Fixed FileGDB polygon spatial queries throwing TopologyException from NTS.
  • Fixed a projected MvtTilesAsyncLayer rendering regression introduced in 14.4.x.
  • Fixed MVT tile seam artifacts when the overlay is in SingleTile mode.
  • Fixed incorrect label offsets when labels are placed on rotated lines.
  • Fixed the text-wrapping algorithm for CJK text so it no longer wraps mid-character.
  • Fixed text wrapping so it accounts for canvas ScaleFactor.
  • Fixed StyleJson icon/label conflict detection so the icon bounding box is included in the candidate region.
  • Fixed StyleJson icon placement so it scales correctly with canvas ScaleFactor.
  • Fixed thin white seams between adjacent filled polygons when outlines are disabled.
  • Fixed WmtsAsyncLayer failures with servers that use decimal-degree TileMatrix definitions.
  • Fixed ProjectionConverter not handling the +R proj4 parameter.
  • Fixed PointShape.GreatCircle() returning NaN coordinates for antipodal inputs.
  • Fixed OgcApiFeatureSource entering an infinite request loop when the server is offline.
  • Fixed an exception when zooming out past tiles with RenderBeyondMaxZoom enabled.
  • Fixed RenderBeyondMaxZoom not working for the decimal-degrees map unit.
  • Fixed intermittent font rendering corruption where characters could mix between glyphs.
  • Fixed SkiaRasterSource failing to load PNG images from memory streams.
  • Fixed a CartographicTiles resampling regression introduced in 14.4.x.
  • Fixed an AsyncLocker threading conflict.
  • Fixed a DrawGlyph thread-safety issue.
  • Fixed labels appearing below the line centerline instead of centered on it.
  • Fixed TextStyle.TextPlacement left and right being swapped for point features.
  • Fixed GeoJsonFeatureSource failing to parse features with special characters in property values.
  • Fixed images appearing blurry when pixel-stretched in a 14.4.x regression.
  • Fixed SkiaSharp resource leaks and GeoImage lifecycle issues under concurrent tile drawing.
  • Fixed some meter-based projections failing to compute intersections against the SphericalMercator max extent.
  • Fixed GeoCanvas.Clear() not taking effect in certain rendering scenarios.
  • Fixed adornments rendering incorrectly on canvases with ScaleFactor > 1.
  • Updated the NOAA weather alerts feed URL to https://api.weather.gov/alerts/active.atom.

ThinkGeo.Gdal:

  • Updated GDAL to 3.11.3.
  • Added ECW and JPEG2000 format support on Linux.

ThinkGeo.FileGeoDatabase:

  • Updated the FileGDB API dependency to 1.5.3, enabling retrieval of a table's spatial reference (SRID).
  • Fixed multipart polygon and multi-ring conversion so clockwise outer rings and counter-clockwise inner rings are identified correctly, and features with multiple outer rings are emitted as valid WKB MultiPolygon.

ThinkGeo.SqlServer:

  • Upgraded from System.Data.SqlClient to Microsoft.Data.SqlClient.

ThinkGeo.UI.WinForms Namespace / ThinkGeo.UI.WPF Namespace:

New Features & Improvements

  • Added GeoLinearGradientBrush support to WpfGeoCanvas.
  • Switched AdornmentOverlay rendering to WpfDrawingGeoCanvas for the same hardware-accelerated path used by other WPF overlays and more consistent high-DPI rendering.
  • Added draggable and resizable adornments so AdornmentLayer items can be repositioned and resized at runtime.
  • Added MouseCoordinateMapTool.Projection for displaying coordinates in a custom CRS.
  • Disabled the ThinkGeo branding logo by default.
  • Added TileOverlay.RenderingOptions to expose per-overlay SkiaRenderingOptions.
  • Moved GeoImage and GeoCanvas lifecycle ownership to TileView to reduce contention between overlays and individual tile renders.
  • Added configurable click and double-click dispatch behavior so single-click events can either wait for a possible double-click or fire immediately.

Bug Fixes

  • Fixed the map being unable to zoom in past scale 1.
  • Fixed map flicker when switching between multi-tile and single-tile mode.
  • Fixed seams on transparent background tiles through deterministic seam compensation.
  • Fixed CurrentExtentChanging and CurrentExtentChanged not being raised on resize when using PreserveScaleAndCenter.
  • Fixed TrackEndedTrackInteractiveOverlayEventArgs returning duplicate end vertices.
  • Fixed FeatureLayerWpfDrawingOverlay crashing when the extent is null or a layer has not been opened yet.
  • Fixed PreloadDataMultiTile crashing when the prefill tile set is empty.
  • Fixed images and glyphs not rotating correctly in WpfDrawingGeoCanvas.
  • Fixed PanZoomBar using a deprecated internal pan method.
  • Fixed crashes when rendering an error tile in tiled mode.
  • Fixed AccessViolationException when converting a GeoImage to WriteableBitmap by adding a fallback conversion path.
  • Fixed failed tiles being permanently marked as failed after a later successful reload.
  • Fixed FeatureSourceMarkerOverlay marker mouse events not being wired correctly and deprecated OnMarkerMouseDown, OnMarkerMouseUp, and OnMarkerMouseMove.
  • Obsoleted SelectedEditsInProcessLayer, EditsInProcessLayer in EditInteractiveOverlay, and TrackShapesInProcessLayer in TrackInteractiveOverlay.
  • Fixed TrackInteractiveOverlay throwing NullReferenceException when GetCurrentFeature is called before any vertex has been added.

ThinkGeo.UI.WinForms specifically

  • Added configurable mouse-over tooltips so MapView can show feature information when the cursor hovers over a feature.
  • Improved drag-and-drop event bridging so handler-set DragEventArgs.Effect is respected, all IDataObject formats are supported, and preview events are routed consistently.
  • Fixed the map not gaining keyboard focus by default when the cursor enters the control.

Major changes for ThinkGeo 14.4.5

Release date: 02/26/2026

ThinkGeo.Core Namespace:

  • Fixed a TextStyle.TextPlacement regression (introduced in v14.4.0 and reported against v14.4.4) where left/right placements were mirrored.
  • Fixed a zoom-level request filtering regression where online layers could still send requests outside the configured style zoom range, causing unnecessary network traffic.

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Fixed an ExtentInteractiveOverlay interaction issue where a single left mouse click/mouse down could incorrectly zoom the map to scale 0.
  • Fixed a TrackInteractiveOverlay issue where finishing a drawn shape with a double-click could return extra trailing duplicate vertices in TrackEndedTrackInteractiveOverlayEventArgs.TrackShape.

Major changes for ThinkGeo 14.4.4

Release date: 01/28/2026

ThinkGeo.Core Namespace:

  • Fixed an issue where MaskMargin is not correct

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Fixed an issue where an AccessViolationException could be thrown, causing the application to crash in certain edge cases.
  • Fixed an issue where the map’s ZoomScale was reset after setting the map unit.
  • Fixed an issue where tiles with internal errors were not reset unless zooming out of the current extent.

Major changes for ThinkGeo 14.4.3

Release date: 01/11/2026

ThinkGeo.Core Namespace:

  • Fixed an issue where the internal exceptions in OgcApiFeatureLayer/OgcApiFeatureOverlay are not thrown.
  • Improved HatchStyle:
    • Fixed a bug (introduced in v14.4.1) where HatchStyle cannot have transparent background
    • Fixed a bug (introduced in v14.4.1) where some of the items in GeoHatchStyle enumeration are not compatible with the ones in v14.4.0

ThinkGeo.UI.WinForms Namespace:

  • Added HistoryExtents/HistoryExtentsCurrentIndex to the MapView

Major changes for ThinkGeo 14.4.2

Release date: 11/03/2025

ThinkGeo.Core Namespace:

  • XyzLruCache: Handles Capacity == 0 gracefully (effectively disables caching without errors).
  • Improved HatchStyle:
    • Fixed a bug (introduced in v14.4.1) where HatchStyle were not displayed
    • Rendering now respects the ScaleFactor, which make it work better on a High-Res screen
    • Added protected virtual method GeoHatchBrush.GetHatchPatternSvgCore to allow custom hatch patterns

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Fixed the issue where Winform MapView could not receive focus when mapView.MapFocusMode == MapFocusMode.MouseEnterFocused
  • Fixed the issue where in some cases markers don't follow the map on the first pan operation.

Major changes for ThinkGeo 14.4.1

Release date: 10/20/2025

ThinkGeo.Core Namespace:

  • Fixed an issue where creating a new table in a File GeoDatabase could fail.
  • Fixed an issue where the Projection property doesn't work in WmsAsyncLayer.
  • Added support for local sprite files in StyleJson.
  • Added HatchBrush support in WpfDrawingCanvas and unified HatchBrush behavior between WpfDrawingCanvas and SkiaCanvas.
  • Changed ProjectionConverter to suppress inner exceptions by default.
  • Improved performance by adding caching to Projection and WmtsAsyncLayer.

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Added support for polygon inner rings in WpfDrawingGeoCanvas.
  • Fixed an issue where the styles in EditInteractiveOverlay and TrackInteractiveOverlay could not be customized during initialization.

Major changes for ThinkGeo 14.4

Release date: 10/10/2025

ThinkGeo.Core Namespace:

  • MvtTilesAsyncLayer greatly improved:

    • Supported Projection
    • Supported Vector Tile Caching
    • Enhanced robustness and reliability
  • WfsV2FeatureLayer improvements:

    • Added support for MultiPolygon geometries
    • Improved URI flexibility and automatic axis-order detection based on projection
    • Fixed a bug preventing WFS from working correctly when added to a LayerOverlay.
    • Enhanced robustness and reliability.
  • Upgraded ThinkGeo.Cad to use the latest ODA SDK v26.7.

  • Fixed thread-safety issues in GdalProjectionConverter.Convert().
  • Created SkiaGeoCanvas.CreatingSKTypefacesForText event to give user an option to customize the loading SKTypeface.
  • Fixed incorrect anchoring behavior in ScaleLineAdornmentLayer.
  • Fixed exception when both WhereClause and MaxRecordsToDraw were set in PostgresFeatureSource.

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Fixed the issue where the controls in PrinterInteractiveOverlay are not selectable or draggable.
  • Fixed the issue where the Mouse hover would steal the focus from other controls.
  • Added the following drag-and-drop events in ThinkGeo.UI.WinForms

    • DragDrop
    • DragEnter
    • DragLeave
    • DragOver
  • Fixed an issue where Graticule could not be added to LayerWpfDrawingOverlay.

  • Created TileOverlay.CreatingSKTypefacesForText event to give user the option to customize the loaded SKTypeface.

Major changes for ThinkGeo 14.3.2

Release date: 7/28/2025

ThinkGeo.Core Namespace:

  • Fixed an issue where MapPrinterLayer.Projection wasn’t respected in MagneticDeclinationPrinterLayer.
  • Fixed an issue where certain MultiPolygon geometries were not supported in WFS 2.
  • Enhanced WfsV2Layer to accept more flexible URIs (e.g. URIs containing ?SERVICE=WFS&VERSION=2.0.0).
  • Enhanced MvtAsyncLayer to support local MBTiles referenced in the style JSON.
  • Enhanced SkiaRasterLayer to lazily load only the needed tiles when the image is backed by a CPU‑resident pixel buffer.
  • Added a cache‑generation API: LayerBase.GenerateTileCacheAsync().

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Improved and streamlined mouse events (DoubleClick / Click / Drag).
  • Enhanced and streamlined marker rendering and behavior.
  • Delayed initialization of EditOverlay and TrackOverlay to reduce startup overhead.

Major changes for ThinkGeo 14.3.1

Release date: 6/3/2025

ThinkGeo.Core Namespace:

  • Fixed an issue where BulkSize was not applied in some cases when using OgcApiFeaturesSource.GetRequestUrlForFeatures.
  • Fixed an issue where WMS layer sent larger than necessary requests when the scale factor exceeded 100%.
  • Removed some restrictions on column names in feature sources (e.g., "[" is now a valid character in shapefile column names).
  • Deprecated BingMapsAsyncLayer; added support for AzureMapsRasterAsyncLayer.

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Added TileOverlay.TileViewInMemoryCache, allowing the user to control the memory-cached TileViews.
  • Added AzureMapsRasterOverlay.
  • Fixed an issue where custom markers were not positioned correctly.
  • Enhanced MapResizeMode behavior when maximizing the map; the default is now PreserveScaleAndCenter.
  • Enhanced zoom-out animations by preloading tiles from higher zoom levels using TileViewInMemoryCache.
  • Enhanced rendering of Overlay.Attributions on the map.
  • Enhanced MapTool behavior to prevent unnecessary refreshes.

Major changes for ThinkGeo 14.3

Release date: 5/7/2025

ThinkGeo.Core Namespace:

  • Streamlined the architecture of all XYZ-based layers and improved performance.
  • Added RenderBeyondZoom and ProjectionConverter support to all RasterXyzTileAsyncLayer types (including WmtsAsyncLayer, RasterMbTilesAsyncLayer, etc.).
  • Added a CacheGenerator API on RasterXyzTileAsyncLayer to create tile caches for a specified extent and zoom range.
  • Added support for MvtTilesAsyncLayer and enhanced MbVectorTilesLayer (now inheriting from VectorXyzTileAsyncLayer).
  • Added ProjectionConverter support to WmsAsyncLayer.
  • Exception Handling: Streamlined the error-handling workflow across all layers.
  • Updated to integrate the latest CAD package (ODA SDK 25.12).
  • Obsolete the following Nuget Packages and move the corresponding classes to ThinkGeo.Gdal
    • ThinkGeo.UnmanagedProj
    • ThinkGeo.MrSid
    • ThinkGeo.UnmanagedGeoTiff
    • ThinkGeo.Ecw
    • ThinkGeo.Jpeg2000
    • ThinkGeo.PersonalGeoDatabase
    • ThinkGeo.GeoPdf
    • ThinkGeo.Kml

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • MapView Improvement: Introduced MapAnimationSettings (Duration, MapAnimationType – DrawAfterAnimation or DrawWithAnimation – and Easing), greatly enhancing zoom animations.
  • MapView Improvement: Removed forced zoomlevel snapping so the map can stop at any arbitrary scale by default.
  • MapView Improvement: Improved map resize modes, especially when the map is rotated.
  • MapView Improvement: Greatly enhanced touch-screen support.
  • MapView Improvement: Improved map cancellation: added MapView.CancellationTokenSource, allowing users to cancel any ongoing rendering.
  • MapView Improvement: Some APIs (e.g. MapView.ZoomToAsync()) now throw TaskCanceledException when cancelled; see the API documentation for details.
  • MapView Improvement: Removed the global stretch overlay and now stretch each overlay individually, eliminating potential unresponsiveness and flickering.
  • MapView Improvement: Replaced MapView.ZoomLevelSet with the lightweight MapView.ZoomScales.
  • MapView Improvement: Enabled setting CurrentExtent by specifying CurrentScale and CenterPoint.
  • MapView Improvement: Made several properties bindable to improve XAML support.
  • MapView Improvement: MapTools: Enhanced the ScaleLine map tool to allow setting a projection for more precise calculations.
  • Overlay Improvements: Introduced WpfDrawingOverlay to draw directly on the canvas (instead of via an image), and supported dynamic labeling through it.
  • Overlay Improvements: Made Overlay a subclass of Canvas and obsoleted Overlay.OverlayCanvas, to improve XAML support.
  • Overlay Improvements: Fixed an issue where tiles containing exception details were being cached; improved exception-mode handling for both overlays and layers.
  • Overlay Improvements: Added a CacheGenerator API on LayerOverlay to create cached tiles for a specified extent and zoom range.
  • Overlay Improvements: Added TileOverlay.TileMatrixSet to allow a TileOverlay to easily set its tile matrix set.
  • General: Obsoleted several “zombie” APIs to reduce user confusion.
  • General: Optimized memory usage and fixed a potential issue that caused high peak memory usage.
  • General: Fixed a memory leak when repeatedly refreshing the map with certain overlays.
  • General: Introduced WpfRasterLayer, which uses native WPF classes for higher-performance image rendering.
  • General: Breaking change: namespace consolidation—all classes now reside in the ThinkGeo.UI.Desktop namespace.

Major changes for ThinkGeo 14.2

Release date: 10/10/2024

ThinkGeo.Core Namespace:

  • Upgraded ThinkGeo.Gdal to use Gdal v3.9.1 for both Windows and Linux.
  • Added the Weight property to GridCell in GridFeatureLayer.
  • Improved the performance of loading and saving tiles from/to the cache.
  • Fixed a performance issue where the license was being over-checked.
  • Enhanced support for sparse matrices (where some cells are null) in InMemoryGridFeatureSource
  • Made WMTSLayer auto-detect the server type (Restful or KVP).
  • Fixed an issue where the WMTSLayer was a couple of meters off at lower zoom levels.
  • Resolved a conversion issue between Srid and ProjString in the managed projection converter.

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Improved the exception handling. Resolved an issue where some methods did not respect DrawExceptionMode, and added the Overlay.ThrowingException event to give users more control.
  • Enhanced map animations, fixing a bug where the animation result did not match the expected outcome when the second zoom action started before the first one finished.
  • Fixed an issue where the track zoom rectangle would not disappear in certain scenarios.

Major changes for ThinkGeo 14.1

Release date: 6/6/2024

ThinkGeo.Core Namespace:

  • Added MbTilesLayer that renders the MBTiles v1.3 dataset using the standard StyleJson.
  • Added MbTilesRasterLayer that renders the standard MBRasterLayer

Major changes for ThinkGeo 14.0

Release date: 5/1/2024

ThinkGeo.Core Namespace:

  • Added OGC Features API Support
  • Added WFS V2 Support

Major changes for ThinkGeo 13.3

Release date: 4/16/2024

ThinkGeo.Core Namespace:

  • Fixed the issue that NoaaWeatherStationFeatureLayer not working
  • Fixed the issue that NoaaWeatherWarningsFeatureLayer not working
  • Fixed the issue that map border discrepancies when isGrayScale is set to true on MapPrinterLayer.
  • Fixed the alignment issues in LabelPrinterLayer when printing to PDF.
  • Enhanced LayerAsync by adding CancellationToken to OpenAsync() and CloseAsync() methods in AsyncLayer.
  • Enhanced RasterTileCache by support saving and retrieving tiles asynchronously.
  • Enhanced Docker compatibility by removing C++ redistributable installation from ThinkGeo.Core.
  • Enhanced Performance of ColorTransformation for large image layers. Added KML support through GDAL on Linux platforms.

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Enhanced Multi-touch functionality in WPF applications.
  • Enhanced: removed gaps when displying points with offsets in multi-tile mode
  • Added MapViewStretchMode to better control the responsiveness and visual clarity.

Major changes for ThinkGeo 13.2

Release date: 11/29/2023

ThinkGeo.Core Namespace:

  • Added the following classes with asynchronous data fetching to ThinkGeo.Core.Async namespace:

    • ArcGisServerRestLayer
    • BingMapsLayer
    • CloudMapClient
    • GoogleMapsLayer
    • HereMapsRasterTileLayer
    • LayerAsync
    • MapBoxStaticTilesLayer
    • OpenStreetMapLayer
    • RasterLayerAsync
    • RasterSourceAsync
    • ThinkGeoCloudRasterMapsLayer
    • ThinkGeoCloudVectorMapsLayer
    • WebBasedLayer
    • WmsRasterLayer
    • WmsRasterSource
    • WmtsLayer
    • XYZTileLayer
  • Upgraded the ThinkGeo.CAD dependencies to the latest version as of November 2023 (ODA 24.9).

  • Fixed the issue where a layer is not showed up correctly when setting a custom style to the DefaultStyle instead of adding it to the CustomStyles collection
  • Enhanced WmsLayer functionality with new helper methods and better server compatibility.

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Integrated async overloads for most methods to enhance UI responsiveness, and updated HowDoI samples to reflect these changes.
  • Upgrade all the WebBasedOverlays to internally use the new WebBasedLayers with asynchronous data fetching.
  • Improved exception management using Overlay.DrawingExceptionMode property and Overlay.ThrowingException event.
  • Addressed the issue of incorrect feature wrapping with wrapDateLine enabled.
  • Fixed the issue where map doesn't resize smoothly when SnappingMode is set to null.
  • Enhanced TrackZoomIn animation accuracy for maps with a non-zero rotation angle.

Major changes for ThinkGeo 13.1

Release date: 7/7/2023

ThinkGeo.Core Namespace:

  • Optimized performance for layers at lower zoomlevels.
  • Enhanced the performance of NoaaWeatherStationsLayer and NoaaWeatherWarningsLayer.
  • Implemented AsyncLocker, replacing lock() internally wherever possible.
  • Added support for V2 and X2 to ThinkGeoCloudRasterMapsLayer. Note: V2 represents the 2nd version, and X2 signifies High DPI.
  • Added PositionStyle.AllowLabelNudging to permit label nudging.
  • Introduced FeatureSource to GridDefinition to leverage featureSource's spatial index during InterpolationModel calculations.
  • Fixed an issue causing GeoTiff to produce a vertical white line at certain zoom levels.
  • Fixed an issue where some WKTs failed to function properly with French system culture.

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Resolved an issue where WrapDateLine didn't function correctly when mapView.ZoomLevelSnappingMode was set to None.
  • Improved the performance of TileType.PreloadDataMultiTile mode, and fixed a problem where TileType.PreloadDataMultiTile didn't work properly under some conditions.
  • Rectified an issue where LayerTileView didn't update when Layers of LayerOverlay changed.
  • Set the default Map Unit to meter to avoid the WPF Design Time error.
  • Fixed an issue with improper functioning of Resize|Drag on PrinterLayer.
  • Corrected a problem where the legend items on printed PDF were larger than those on the print preview.
  • Solved an issue causing ThinkGeoCloud Overlay Cache to not work or appear blurry if the screen is higher than standard DPI.
  • Added MeasureInteractiveOverlay.

Major changes for ThinkGeo 13.0

Release date: 11/29/2022

ThinkGeo.Core Namespace:

  • Improved the accuracy and performance of isolines.
  • Improved FileGeoDatabase performance and added more APIs using the latest FileGDB APIs(FileGDB_API_1.5.2) from ESRI.(Windows only)
  • Improved multiple columns labeling through TextStyle.TextContent
  • improved MagneticDeclinationAdornmentLayer by updating to the latest Geomagnetic Reference IGRF13 from: https://www.ngdc.noaa.gov/IAGA/vmod/
  • Improved the heatmap styling by updating its color palette.
  • Supported the GeoTiff files with separate planes and multiple strips
  • Supported the MrSid files with more than four bands(Windows only)
  • Supported HereMapsRasterTileLayer
  • Supported deleting/adding/editing columns for TabFiles.
  • Supported GeoPdf through NuGet package ThinkGeo.GeoPdf(Windows only)
  • Supported KML through NuGet packages ThinkGeo.Kml(Windows only)
  • Supported the latest CAD format by referencing the latest ODA dependencies from (https://www.opendesign.com/). (up to 2022)(Windows only)
  • Upgraded all the dependencies to the latest (up to 11/2022) and streamline the 3rd party dependency reference.
  • Updated the proj string of the SRIDs to the latest based on https://epsg.io/
  • Implemented an API to check if a license is activated: ThinkGeoProductLicense.GetCoreLicenseStatus()
  • Fixed the issue where a null numeric field in a shapefile returns bad results
  • Fixed the issue where internal exceptions are thrown when cached tiles are read/updated simultaneously.
  • Fixed the issue where the labeling of curved lines is not at the center in some scenarios.
  • Fixed the issue where some labels are cut in busy places like New York City in ThinkGeoCloudRasterLayer.

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Support HereMapsRasterTileOverlay
  • Support MapView.GetSnapShot()
  • Support WrapDateLine for MarkerOverlay and XYZOverlay.
  • Improved the map responsiveness by reaffirming using async for all the IO-intensive APIs.
  • Fixed the issue where TileOverlay.Drawn event is raised before all the tiles are rendered.
  • Fixed the issue where Tileoverlay is not displayed when the current scale is less than 3.
  • Fixed the issue where the map turns blank when calling map.refresh() right after resizing the map.
  • Fixed the issue where markers do not work if they are initialized with Marker.Content.
  • Fixed the issue where Printing Raster Images are Offset and scaled improperly
  • Fixed the issue where the alignment/text wrap does not work in the legend
  • Fixed the issue where Map Flickering when calling CenterAt/ZoomTo
  • Fixed the issue where mouse zooming is not centering at the mouse when the map's rotation angle is not 0.
  • Fixed the issue where the legend's location/layout and feature size are not precise in some scenarios while printing

Major changes for ThinkGeo 12.3

Release date: 11/6/2020

ThinkGeo.Core Namespace:

  • Created ThinkGeo.UI.XamarinForms edition.
  • Created MapBox layer and support MapBox static tile.
  • Open web browser instead of Product Center when no license was found.
  • Minimum supported .NET Framework version now has been updated to 4.6.2 from 4.6.1.
  • Add an API to the WorldFile class to allow it to save a world file to disk.
  • Added the API to convert feature collection to GeoJSON.
  • Added TopologyValidator class for validating shapes.
  • Added XYZ layer as the base class of all the XYZ-based layers.
  • Greatly improved the performance of web-based layers, such as bingmaps layer, googlemaps layer and thinkgeo cloud layers.
  • Request for X2 Google images if needed in Google Layer.
  • Fixed the issue where application cannot work on both X86 and X64 systems when compiling with .NET Framework under AnyCPU, by upgrading the drawing engine to SkiaSharp 2.80.2.
  • Fixed the issue where Proj String and EPSG number cannot be read correctly when opening a layer.
  • Fixed the issue where printing doesn’t work properly on High DPI printer.
  • Fixed the issue where the transparent background of a geotiff was not displayed properly.
  • Fixed the issue where a geoimage cannot be serialize/deserialize properly.
  • Fixed the issue where CAD layer throw a KeyNotFound exception in certain situations.
  • Fixed an issue where the Red and Blue channels of a geoTiff are inverted on Linux, iOS and Android.
  • Fixed the issue where drawing text with rotation angle other than 0 has some unexpected offset when zooming in to the lowest zoomlevel.
  • Support raster projection for the web-based layers such as google maps, bing maps, ThinkGeo cloud maps and mapbox maps.

ThinkGeo.UI.WPF Namespace / ThinkGeo.UI.WinForms Namespace:

  • Fixed the issue where map flashes when multiple overlays are added to the map if one overlay draws way faster than the others.
  • Used async drawing and greatly improve the drawing performance.
  • support customized zoombar tooltips

Major changes for ThinkGeo 12.1

Release date: 11/29/2019

ThinkGeo.Core Namespace:

  • Enhanced to support high resolution screen for ThinkGeo Cloud Maps.
  • Enhanced to support high resolution screen for GoogleMapsLayer.
  • Enhanced to support projection for WMTS layer.
  • Fixed a bug where UnmanagedProjProjectionConverter converts extent to internal projection incorrectly.
  • Fixed the font size issue for PointStyle.
  • Fixed a bug where the WKB of MultiLine Empty can't parse.
  • Fixed a bug where ThinkGeo Cloud Vector layer aren't rendered at zoom level 19.
  • Fixed a bug where the alpha component of GeoColor style didn't work.
  • Fixed a bug where TextBaseline can't support multi-line text.
  • Enhanced to support cancel drawing line.
  • Fixed a bug where the GeoImage being used is disposed for Noaa layer.
  • Enhanced to support Cad.
  • Enhanced to support multi-thread for projection converter.
  • Fixed a bug where FeatureSource.GetColumns method throws exception in multi-threads.
  • Enhanced to make SqliteFeatureLayer thread safe.
  • Added DrawText method for PositionStyle.
  • Added "PointStyle(GeoFont glyphFont, string glyphContent, GeoBrush fillBrush)" constructor for PointStyle.
  • Published PointStyle.DrawGlyph method.
  • Enhanced to support custom font for PointStyle.
  • Changed the default tile size value of ZoomLevelSet from 256 to 512.
  • Published PointStyle.DrawImage method.
  • Published PointStyle.DrawSymbol method.
  • Fixed a bug where the ProjectionConverter.ConvertToExternalProjection method doesn't work.
  • Fixed a bug where SqliteFeatureSource querying data from R-Tree index table throws exception.
  • Fixed a bug where the SqliteFeatureSource.GetFeaturesByIds method doesn't work.
  • Changed longitude and latitude parameter order for some API.
  • Enhanced to support GeoLinearGradientBrush for Printer and fixed bug the Printer get different result with the Map if polygon contains inner rings.
  • Fixed a bug where the angle of label of GeoLinearGradientBrush is incorrect .
  • Fixed an bug where when parsing tile format tiff image, throws "Array index is out of range" exception.
  • Enhanced to support background for layer.
  • Enhanced to support KeyColors for SkiaGeoCanvas.
  • Changed the default web proxy from null to DefaultWebProxy of system.
  • Fixed a bug where rendering tiff image is blurred.

ThinkGeo.UI.Wpf Namespace:

  • Fixed a bug where LayerOverlay throws the exception when tile type is multiple tile.
  • Enhanced to support high resolution screen for ThinkGeo Cloud Maps.
  • Improved memory usage for Wpf.
  • Changed the zoom animation time form 200ms to 100ms.
  • Fixed a bug where ThinkGeocloudRasterMapsOverlay can't support to display map when custom zoom-level scale is smaller default min zoom-level scale.
  • Fixed a bug where there are white gaps between tiles.
  • Changed longitude and latitude parameter order for some API.
  • Changed the default web proxy from null to DefaultWebProxy of system.
  • Fixed a pinch zoom issue. When zoom in map, the target scale is smaller than expected.
  • Fixed a bug where "map.TrackOverlay", "map.AdornmentOverlay", etc. were all null after Map initialized.
  • Fixed a bug where InMemoryMarkerOverlay's marker can not display at first zoomlevel.

Major changes for ThinkGeo 12.0

  1. Merge all the managed layers to Core and used GDAL to redesign Unmanged Layers. Rename the packages name, here is latest package names:
    • ThinkGeo.UI.Wpf
    • ThinkGeo.UI.Blazor
    • ThinkGeo.UI.WebApi
    • ThinkGeo.Core
    • ThinkGeo.Gdal
    • ThinkGeo.Ecw
    • ThinkGeo.Cad
    • ThinkGeo.GeoTiff
    • ThinkGeo.Jpeg2000
    • ThinkGeo.MrSid
    • ThinkGeo.UmanagedProj
    • ThinkGeo.NuticalCharts
    • ThinkGeo.FileGeoDatabase
    • ThinkGeo.PersonalGeoDatabase
    • ThinkGeo.Oracle
    • ThinkGeo.Sqlite
    • ThinkGeo.MsSql
    • ThinkGeo.PostgreSql
    • ThinkGeo.Printers
    • ThinkGeo.Dependency.SQLite
    • ThinkGeo.Dependency.MicrosoftVisualCRunTime140
    • ThinkGeo.Dependency.NetTopologySuite
    • ThinkGeo.Dependency.Npgsql
    • ThinkGeo.Dependency.Printers
    • ThinkGeo.Dependency.SkiaSharp
    • ThinkGeo.Dependency.SqlClient
    • ThinkGeo.Dependency.Jint
    • ThinkGeo.Dependency.SQLite
    • ThinkGeo.Dependency.WriteableBitmapEx
  2. Redesign GeoCanvas based on SkiaSharp.
  3. Updated all the C++ runtime to one single version, use MSVC140.
  4. Use one GDAL C# wrap instead of raster layer wrappers, like JPEG2000, ECW, MrSid, Tiff, .etc.
  5. Removed FDO, and SDF layer.
  6. Renamed our all MapControl to MapView.
  7. Used GDAL for S57 and FileGeoDatabase and PersonalGeoDatabase, this will inherit from GDAL Feature Layer.
  8. MapSuite TileCache/Tile Matrix, based on current design, the TileView, TileCache, Tile, Matrix are thread safe. It will improve the performance greatly.
    • Matrix: Create/Calculate the matrix system for TileLayer and TileOverlay.
    • Tile: The tiles for the cached items, the tile contains the tile data and tile location (z,x,y)
    • TileCache: Tile Cache for ThinkGeo, it work with one tile.
    • TileView: TileOverlay each tile view, it only draw the layers or render the drawing result in UI.
  9. Refine our MapSuite properties, make sure set one property won’t change other properties, like Map.Unit will update the map extent, .etc.
  10. Support Rotation for WPF.
  11. Support StyleJson.