Click here to Skip to main content
15,887,175 members
Articles / Desktop Programming / Windows Forms

GMap.NET - Great Maps for Windows Forms and Presentation

Rate me:
Please Sign up or sign in to vote.
4.80/5 (135 votes)
16 Apr 2013MIT1 min read 1.8M   611   508   373
GMap.NET is a powerful, free, cross platform, Open Source .NET control. It enables the use of routing, geocoding, and maps from Google, Yahoo!, OpenStreet in Windows Forms and Presentation, and supports caching!

GMapNET/GMapNETv7cp.PNG

Introduction

Google Maps are cool, yeah? But it's useful only in the browser, and is insufficient for real time tracking. It also does not have cache so Google servers are overloaded. This control removes all these deficiencies! It also gives the .NET developer unlimited ability to extend it!

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

Background

The basic idea is simple: get the required data from Google/etc., cache it, and use it. Fast, simple, and practical.

Using the Code

It's more than easy. GMap.NET.dll and GMap.NET.WindowsForms.dll contain the user control. Add it to your project and simply use it.

Here are the basic control initial options: 

C#
public MainForm()
{

InitializeComponent();

try
{
   System.Net.IPHostEntry e =
        System.Net.Dns.GetHostEntry("www.google.com");
}
catch
{
   MainMap.Manager.Mode = AccessMode.CacheOnly;
   MessageBox.Show("No internet connection avaible, going to CacheOnly mode.", 
         "GMap.NET - Demo.WindowsForms", MessageBoxButtons.OK,
         MessageBoxIcon.Warning);
}

// config map
MainMap.MapProvider = GMapProviders.OpenStreetMap;
MainMap.Position = new PointLatLng(54.6961334816182, 25.2985095977783);
MainMap.MinZoom = 0;
MainMap.MaxZoom = 24;
MainMap.Zoom = 9;

// add your custom map db provider
//GMap.NET.CacheProviders.MySQLPureImageCache ch = new GMap.NET.CacheProviders.MySQLPureImageCache();
//ch.ConnectionString = @"server=sql2008;User Id=trolis;Persist Security Info=True;database=gmapnetcache;password=trolis;";
//MainMap.Manager.SecondaryCache = ch;

// set your proxy here if need
//GMapProvider.WebProxy = new WebProxy("10.2.0.100", 8080);
//GMapProvider.WebProxy.Credentials = new NetworkCredential("ogrenci@bilgeadam.com", "bilgeada");

// map events
{
   MainMap.OnPositionChanged += new PositionChanged(MainMap_OnPositionChanged);

   MainMap.OnTileLoadStart += new TileLoadStart(MainMap_OnTileLoadStart);
   MainMap.OnTileLoadComplete += new TileLoadComplete(MainMap_OnTileLoadComplete);

   MainMap.OnMapZoomChanged += new MapZoomChanged(MainMap_OnMapZoomChanged);
   MainMap.OnMapTypeChanged += new MapTypeChanged(MainMap_OnMapTypeChanged);

   MainMap.OnMarkerClick += new MarkerClick(MainMap_OnMarkerClick);
   MainMap.OnMarkerEnter += new MarkerEnter(MainMap_OnMarkerEnter);
   MainMap.OnMarkerLeave += new MarkerLeave(MainMap_OnMarkerLeave);

   MainMap.OnPolygonEnter += new PolygonEnter(MainMap_OnPolygonEnter);
   MainMap.OnPolygonLeave += new PolygonLeave(MainMap_OnPolygonLeave);

   MainMap.OnRouteEnter += new RouteEnter(MainMap_OnRouteEnter);
   MainMap.OnRouteLeave += new RouteLeave(MainMap_OnRouteLeave);

   MainMap.Manager.OnTileCacheComplete += new TileCacheComplete(OnTileCacheComplete);
   MainMap.Manager.OnTileCacheStart += new TileCacheStart(OnTileCacheStart);
   MainMap.Manager.OnTileCacheProgress += new TileCacheProgress(OnTileCacheProgress);
}   
} 

As you can see, the control options are quite simple. And there is nothing more to add.

Points of Interest

Well, it was quite cryptic to figure out how Google manages tiles, what coordinate system it uses, the JSON decryption, etc.

History

Go to the project's CodePlex site to get a running update of any changes or improvements I've made.  

License

This article, along with any associated source code and files, is licensed under The MIT License


Written By
Software Developer
Lithuania Lithuania
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
RantRe: Add Marker and Black Map Screen Pin
Chris Dunne Kinetic22-Apr-09 3:41
Chris Dunne Kinetic22-Apr-09 3:41 
GeneralRe: Add Marker and Black Map Screen Pin
radioman.lt22-Apr-09 4:06
radioman.lt22-Apr-09 4:06 
GeneralRe: Add Marker and Black Map Screen Pin
Chris Dunne Kinetic24-Apr-09 0:31
Chris Dunne Kinetic24-Apr-09 0:31 
GeneralRe: Add Marker and Black Map Screen Pin
Chris Dunne Kinetic24-Apr-09 0:48
Chris Dunne Kinetic24-Apr-09 0:48 
GeneralRe: Add Marker and Black Map Screen Pin
radioman.lt24-Apr-09 0:53
radioman.lt24-Apr-09 0:53 
GeneralRe: Add Marker and Black Map Screen Pin
Chris Dunne Kinetic24-Apr-09 1:06
Chris Dunne Kinetic24-Apr-09 1:06 
GeneralRe: Add Marker and Black Map Screen Pin
Chris Dunne Kinetic24-Apr-09 1:14
Chris Dunne Kinetic24-Apr-09 1:14 
GeneralRe: Add Marker and Black Map Screen Pin
Chris Dunne Kinetic24-Apr-09 3:19
Chris Dunne Kinetic24-Apr-09 3:19 
Ansewering my own questions as we go, nearly there...

Building the SVN Checkout files are now working without deleting files.

I have one last problem to resolve that I think once resolved will allow me to progress forward.

Adding GMap.NET.WindowsForms.dll to toobox from your SVN project Bin folder and then add control to from and rename gMap1 to MainMap for this control. Added to refernces are GMap.NET.Core and GMap.NET.WindowsForms dll's. My last problem using the sample code below has one error if i do this USING GMap;

Error 1 The type or namespace name 'GMap' could not be found (are you missing a using directive or an assembly reference?) C:\gmap4dotnet\TestMap\TestMap\Form1.cs 9 7 TestMap


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GMap;
namespace TestMap
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{


// render mode, can be GDI/GDI+
MainMap.RenderMode = GMapNETRenderMode.GDI;

// cache usage
MainMap.UseTileCache = true;
MainMap.UseRouteCache = true;
MainMap.UseGeocoderCache = true;

// map type, map/satellite/terrain
MainMap.MapType = GMapType.Map;
MainMap.Zoom = 13;
MainMap.Language = "lt";

// set initial map coordinates in Latitude,Langtitude
MainMap.CurrentPosition = new PointLatLng(54.6961334816182, 25.2985095977783);

// for advanced, we can set events
MainMap.OnCurrentPositionChanged +=
new GMapControl.CurrentPositionChanged(MainMap_OnCurrentPositionChanged);
MainMap.OnTileLoadStart += new GMapControl.TileLoadStart(MainMap_OnTileLoadStart);
MainMap.OnTileLoadComplete +=
new GMapControl.TileLoadComplete(MainMap_OnTileLoadComplete);
}
// load map on main form shown
private void MainForm_Shown(object sender, EventArgs e)
{
MainMap.ReloadMap();
}

}

}



*******************************************************

Else

USING GMapNET;


Highlighs an error at every .method for MainMap.

Error 2 'System.Windows.Forms.GMap' does not contain a definition for 'UseTileCache' and no extension method 'UseTileCache' accepting a first argument of type 'System.Windows.Forms.GMap' could be found (are you missing a using directive or an assembly reference?) C:\gmap4dotnet\TestMap\TestMap\Form1.cs 28 21 TestMap
GeneralRe: Add Marker and Black Map Screen Pin
radioman.lt24-Apr-09 7:16
radioman.lt24-Apr-09 7:16 
RantRe: Add Marker and Black Map Screen Pin
Chris Dunne Kinetic24-Apr-09 23:41
Chris Dunne Kinetic24-Apr-09 23:41 
GeneralRe: Add Marker and Black Map Screen Pin
Chris Dunne Kinetic24-Apr-09 23:42
Chris Dunne Kinetic24-Apr-09 23:42 
GeneralRe: Add Marker and Black Map Screen Pin
Chris Dunne Kinetic25-Apr-09 13:29
Chris Dunne Kinetic25-Apr-09 13:29 
GeneralRe: Add Marker and Black Map Screen Pin
radioman.lt26-Apr-09 0:31
radioman.lt26-Apr-09 0:31 
GeneralRe: Add Marker and Black Map Screen Pin
Chris Dunne Kinetic26-Apr-09 1:46
Chris Dunne Kinetic26-Apr-09 1:46 
GeneralRe: Add Marker and Black Map Screen Pin
TechnologyIS19-Mar-10 0:53
TechnologyIS19-Mar-10 0:53 
GeneralRe: Add Marker and Black Map Screen Pin
radioman.lt19-Mar-10 2:19
radioman.lt19-Mar-10 2:19 
Questionwtf Pin
radioman.lt19-Apr-09 21:39
radioman.lt19-Apr-09 21:39 
GeneralLoading up Map Pin
Chris Dunne Kinetic19-Apr-09 19:52
Chris Dunne Kinetic19-Apr-09 19:52 
GeneralRe: Loading up Map Pin
radioman.lt19-Apr-09 21:23
radioman.lt19-Apr-09 21:23 
GeneralNew DLL Pin
Chris Dunne Kinetic19-Apr-09 15:27
Chris Dunne Kinetic19-Apr-09 15:27 
GeneralRe: New DLL Pin
radioman.lt19-Apr-09 18:21
radioman.lt19-Apr-09 18:21 
GeneralRe: New DLL Pin
Chris Dunne Kinetic19-Apr-09 18:49
Chris Dunne Kinetic19-Apr-09 18:49 
GeneralRe: New DLL Pin
radioman.lt19-Apr-09 21:22
radioman.lt19-Apr-09 21:22 
GeneralAdd marker Pin
Chris Dunne Kinetic19-Apr-09 14:48
Chris Dunne Kinetic19-Apr-09 14:48 
GeneralRe: Add marker Pin
radioman.lt19-Apr-09 18:20
radioman.lt19-Apr-09 18:20 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.