// the find
judero01col/GMap.NET
GMap.NET Windows Forms & Presentation is an excellent open source, powerful, free and cross-platform .NET control. Allows the use of routing, geocoding, directions and maps from Google, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac, Yendux, Mapy.cz, Maps.lt, iKarte.lv, NearMap, HereMap, CloudMade, WikiMapia, MapQuest and many more.
GMap.NET is a .NET mapping control that wraps tile-based map providers (Google, Bing, OSM, and a couple dozen others) for use in WinForms, WPF, and Avalonia apps. It handles tile caching, geocoding, routing, and marker/route/polygon overlays. This is for developers building desktop GIS or location-aware tooling who don't want to embed a browser for map rendering.
Provider breadth is genuinely useful — switching from OSM to Bing or Here is a one-liner, and the abstraction is consistent across all of them. Offline tile caching via SQLite, MSSQL, MySQL, or PostgreSQL backends means you can ship an app that works without internet. The WinForms control is a drop-in UserControl with a solid event model (marker click, map drag, zoom change) that doesn't fight the framework. Avalonia support was added recently, which matters now that Avalonia is a credible cross-platform UI target.
Google Maps and Yahoo providers are essentially dead weight — those APIs require billing accounts and have ToS restrictions that make them non-starters for most uses, but they still dominate the README's provider list. The last meaningful commit was mid-2024, release notes max out at .NET 6.0 targets, and there's no .NET 8 or 9 explicit support mentioned despite those being current LTS. The tile-fetching code uses legacy `HttpWebRequest` patterns in places rather than `HttpClient`, which means proxy, timeout, and cancellation handling is inconsistent. No async rendering pipeline — tile loading blocks or queues on a background thread with a custom lock implementation rather than using modern async/await throughout the hot paths.