[GIS] Offline Maps API for C# Desktop Application

cgoogle-maps-apimaps

I have a C# WPF application which has browser control to display a Google Map.

Google Maps API v3 is being used in the application.

I use data received from a service to plot users current location and history. So a lot of markers and polylines are in use.

But to use Google Maps API, we need to be connected to the internet for sending requests to the server. And I believe that the API wont work offline even with the Enterprise Edition.

I need an alternative to the Google Maps API (preferably open source) to work completely offline, which provide similar services like marking locations, drawing lines, zoom, etc., I don't have lots of time to finish this. So instead of trying out the different available APIs, I was hoping somebody must have done a similar thing so I can finish my task on time. I am currently trying out ArcGIS. Is it good enough for my purpose? Is there an open source alternative?

Best Answer

I suggest you to use this opensource library:

GMap.NET - Great Maps for Windows Forms & Presentation

GMap.NET is great and Powerful, Free, cross platform, open source .NET control. Enable use routing, geocoding, directions and maps from Coogle, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac, Yendux, Mapy.cz, Maps.lt, iKarte.lv, NearMap, OviMap, CloudMade, WikiMapia, MapQuest in Windows Forms & Presentation, supports caching and runs on windows mobile!

It is an opensource library that can do most of your requirements, i forgot to mention that GMap.Net support WPF applications.

And also if you want to use a more advanced library you can try:

SharpMap

SharpMap is an easy-to-use mapping library for use in web and desktop applications. It provides access to many types of GIS data, enables spatial querying of that data, and renders beautiful maps. The engine is written in C# and based on the .Net 4.0 framework. SharpMap is released under GNU Lesser General Public License.

It contains many features like working as a WFS client to load a request data from a standard OGC Services.

Hope my answer help you.