How ThinkGeo Compliments Your Esri ArcGIS Enterprise Data

Many organizations rely on Esri as the backbone of their geospatial operations. ArcGIS Enterprise provides powerful tools for data management, analytics, publishing, and enterprise governance.

And while ArcGIS handles the server side exceptionally well, organizations often need more flexibility on the client side. This is particularly true when building custom .NET applications, offline field tools, or commercial software that must scale beyond traditional per-user licensing models.

This is where ThinkGeo complements your existing Esri investment. Building your client-side with ThinkGeo enables high-performance rendering, offline workflows, and tailored user experiences built using your server-side ESRI datasets.

Your Client-Side Needs Flexibility

ThinkGeo bridges the gap by giving developers complete control over how their enterprise data is deployed.

Using ThinkGeo on the client-side allows for:

  • Highly customized desktop or mobile applications built for specific workflows.

  • Tools that run offline or disconnected from the corporate network.

  • Efficient ways to render large datasets without stressing ArcGIS Server resources.

  • Predictable, royalty-free deployment models for internal teams or OEM scenarios.

ThinkGeo provides a suite of UI controls and libraries for Desktop, Web and Mobile built entirely on .NET. These components make it easy to build tailored GIS applications that consume ArcGIS Server, ArcGIS Online, and ArcGIS Enterprise data - all without proprietary runtimes, per-user licensing, or mandatory cloud dependencies. ThinkGeo empowers teams to build the exact application they need on top of their existing enterprise data.

How ThinkGeo Builds On Your Existing ArcGIS Enterprise Data

ThinkGeo makes it simple to use ArcGIS Enterprise data inside custom applications without requiring the full Esri runtime stack. Your existing ArcGIS services, files, and basemaps can be brought directly into ThinkGeo-powered apps through several flexible integration points.

ArcGIS Services
ThinkGeo can display data from ArcGIS Feature Services, Map Services, and other REST-based endpoints - whether hosted in ArcGIS Enterprise or ArcGIS Online. This lets teams reuse live, centrally managed datasets across internal tools and workflows.

ArcGIS File-Based Data
Organizations with important shapefiles or File Geodatabase exports can load them directly into ThinkGeo for fast rendering, styling, and spatial operations. This is ideal for offline apps, legacy datasets, or mixed Esri/ThinkGeo environments.

ArcGIS Tile Packages and Cached Basemaps
Tile packages created in ArcGIS Pro or ArcGIS Enterprise can be used as high-performance basemaps in ThinkGeo, enabling consistent cartography even in offline or bandwidth-limited scenarios.

ArcGIS Vector Tile Layers
Vector basemaps authored in ArcGIS Pro can be rendered natively in ThinkGeo’s vector engine, ensuring visual consistency across your Esri web apps and ThinkGeo desktop or mobile applications.

Custom-Fit .NET Applications

From internal engineering dashboards to mission-critical field tools, ThinkGeo embeds seamlessly into:

  • WPF

  • WinForms

  • ASP.NET / Blazor

  • .NET MAUI for iOS/Android/Windows/macOS

Organizations retain full architectural control with no vendor lock-in.

Disconnected Field Operations

ThinkGeo excels in fully offline scenarios. Using ArcGIS-derived datasets, users can:

  • Navigate and pan across vector or raster basemaps

  • Edit features offline

  • Execute spatial queries and measurements

  • Work in remote environments without dependency on ArcGIS Server

Performance Optimization

ThinkGeo can reduce load on ArcGIS services by:

  • Caching heavy layers locally

  • Rendering tiles and vectors on-device

  • Using efficient streaming pipelines for large datasets

ArcGIS continues serving as the authoritative source, while ThinkGeo optimizes the user experience.

ThinkGeo and ArcGIS In The Real-World

Many organizations use ThinkGeo alongside ArcGIS every day:

  • Utilities use ArcGIS Enterprise for asset management while deploying ThinkGeo-powered offline inspection apps to field crews.

  • State and local governments rely on ArcGIS Online for hosted datasets but use ThinkGeo to build cost-effective internal .NET tools without per-seat licensing.

  • OEM software companies embed ThinkGeo maps into their commercial applications while supporting customer-hosted ArcGIS services.

In each case, ThinkGeo expands what the organization can accomplish.

Get Started With ThinkGeo

Check out this post to learn how to get up and running with ThinkGeo. If you prefer a hands-on approach, you can check out our HowDoI Samples and the code snippets below:

Tip

To see live examples using various ArcGIS data formats, just clone the HowDoI samples, run the solution and explore the samples in the left panel.

Below are a few samples of adding online data using MVT, WFS, WMS and WMTS. While the code below is taken from the WPF sample, the same code will work in Mobile or Web clients as well. It’s also worth noting that all Vector and Raster layers in ThinkGeo can be reprojected on the fly.

  
  // Add MVT tiles and style it using a style.json file.
  _mvtLayer = new MvtTilesAsyncLayer("https://demotiles.maplibre.org/style.json");
  _mvtLayer.VectorTileCache = new FileTileCache(".\\TileCache\\VectorTileCache");
  _mvtLayer.VectorTileCache.GottenTile += VectorTileCacheOnGottenTile;
  _mvtLayer.VectorTileCache.SavedTile += VectorTileCache_SavedTile;
  _layerOverlay.Layers.Add(_mvtLayer);

  // Add and Style Vector data from a WFS service
  var layer = new WfsV2AsyncLayer(
      "https://inspire-wfs.maanmittauslaitos.fi/inspire-wfs/cp/ows",
      "cp:CadastralParcel")
  layer.ZoomLevelSet.ZoomLevel13.DefaultAreaStyle = AreaStyle.CreateSimpleAreaStyle(GeoColors.Transparent, GeoColors.OrangeRed, 4);
  layer.ZoomLevelSet.ZoomLevel13.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
  layer.ProjectionConverter = new ProjectionConverter(3067, 3857);

  // a quick sample of raster-based WMS data.
  wms = new WmsAsyncLayer(new Uri("http://geo.vliz.be/geoserver/Dataportal/ows?service=WMS&"));
  wms.DrawingExceptionMode = DrawingExceptionMode.DrawException;
  wms.Parameters.Add("LAYERS", "eurobis_grid_15m-obisenv");
  wms.Parameters.Add("STYLES", "generic");
  wms.OutputFormat = "image/png";
  wms.Crs = "EPSG:3857";  // Coordinate system, typically EPSG:3857 for WMS with Spherical Mercator

  
  

If your data is better deployed offline or in a file-based format, we support every major file format. From GeoPackages and File Geodatabases to MbTiles and Shapefile to GeoJson and GeoTiffs, we have you covered.

  
  // Create and style a layer using a .gpkg GeoPackage file
  var gdalFeatureLayer = new GdalFeatureLayer(@"./Data/GeoPackage/mora_surficial_geology.gpkg");
  gdalFeatureLayer.FeatureSource.ProjectionConverter = projectionConverter;
  gdalFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyle.CreateSimplePointStyle(PointSymbolType.Circle, GeoColors.LightRed, 4);
  gdalFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyle.CreateSimpleLineStyle(GeoColor.FromArgb(128, GeoColors.LightSteelBlue), 2F, GeoColors.Black, 2F, false);
  layerOverlay.Layers.Add(gdalFeatureLayer);

  // Create and style a File Geodatabase layer from a .gdb file.
  var fileGeoDatabaseFeatureLayer = new FileGeoDatabaseFeatureLayer(@"./Data/FileGeoDatabase/zoning.gdb")
  {
     FeatureSource = {ProjectionConverter = new ProjectionConverter(2276, 3857) }, ActiveLayer = "zoning" 
  };
  // Create an Area style on zoom level 1 and then apply it to all zoom levels up to 20.
  fileGeoDatabaseFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(GeoPens.Black, new GeoSolidBrush(new GeoColor(50, GeoColors.Blue)));
  fileGeoDatabaseFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
  // Add the layer to the overlay we created earlier.
  fileGeoDatabaseOverlay.Layers.Add("Zoning", fileGeoDatabaseFeatureLayer);

  // Sample using a MBTile file local and styling via style.json file.
  mvtLayer = new VectorMbTilesAsyncLayer(@".\Data\Mbtiles\maplibre.mbtiles");
  mvtLayer.StyleJsonUri = @".\Data\Mbtiles\style.json";
  layerOverlay.Layers.Add(_mvtLayer);
  
 

Connect With Us

We hope you found today’s post useful. If you have questions or topics you'd like us to cover in future posts, we’d love to hear from you! Email us at sales@thinkgeo.com or schedule a meeting to talk in person. We always enjoy connecting with our customers, learning how you’re using ThinkGeo, and exploring new ways to improve our products.

About ThinkGeo

We are a GIS software company founded in 2004 and located in Frisco, TX. Our clients are in more than 40 industries including agriculture, energy, transportation, government, engineering, IT, and defense. We pride ourselves on our excellent service and transparency. ThinkGeo offers a variety of products and services to meet almost any GIS application need. We can even help you develop your next project - anywhere from a few hours of consulting to outsourcing an entire project. To learn more, email us at sales@thinkgeo.com, or call us direct at 1-214-449-0330.

Next
Next

Exploring GeoJSON