Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 2286 → Rev 2287

/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/ArcGIS/ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_MapProvider.cs
0,0 → 1,86

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
/// <summary>
/// ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_Map provider,
/// http://www.darb.ae/ArcGIS/rest/services/BaseMaps/Q2_2011_NAVTQ_Eng_V5/MapServer
/// </summary>
public class ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_MapProvider : GMapProvider
{
public static readonly ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_MapProvider Instance;
 
ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_MapProvider()
{
MaxZoom = 12;
Area = RectLatLng.FromLTRB(49.8846923723311, 28.0188609585523, 58.2247031977662, 21.154115956732);
Copyright = string.Format("©{0} ESRI - Map data ©{0} ArcGIS", DateTime.Today.Year);
}
 
static ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_MapProvider()
{
Instance = new ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_MapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("E03CFEDF-9277-49B3-9912-D805347F934B");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_MapProvider";
public override string Name
{
get
{
return name;
}
}
 
public override PureProjection Projection
{
get
{
return PlateCarreeProjectionDarbAe.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom)
{
// http://www.darb.ae/ArcGIS/rest/services/BaseMaps/Q2_2011_NAVTQ_Eng_V5/MapServer/tile/0/121/144
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://www.darb.ae/ArcGIS/rest/services/BaseMaps/Q2_2011_NAVTQ_Eng_V5/MapServer/tile/{0}/{1}/{2}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/ArcGIS/ArcGIS_Imagery_World_2D_MapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// ArcGIS_Imagery_World_2D_Map provider, http://server.arcgisonline.com
/// </summary>
public class ArcGIS_Imagery_World_2D_MapProvider : ArcGISMapPlateCarreeProviderBase
{
public static readonly ArcGIS_Imagery_World_2D_MapProvider Instance;
 
ArcGIS_Imagery_World_2D_MapProvider()
{
}
 
static ArcGIS_Imagery_World_2D_MapProvider()
{
Instance = new ArcGIS_Imagery_World_2D_MapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("FF7ADDAD-F155-41DB-BC42-CC6FD97C8B9D");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "ArcGIS_Imagery_World_2D_Map";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer/tile/1/0/1.jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer/tile/{0}/{1}/{2}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/ArcGIS/ArcGIS_ShadedRelief_World_2D_MapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// ArcGIS_ShadedRelief_World_2D_Map provider, http://server.arcgisonline.com
/// </summary>
public class ArcGIS_ShadedRelief_World_2D_MapProvider : ArcGISMapPlateCarreeProviderBase
{
public static readonly ArcGIS_ShadedRelief_World_2D_MapProvider Instance;
 
ArcGIS_ShadedRelief_World_2D_MapProvider()
{
}
 
static ArcGIS_ShadedRelief_World_2D_MapProvider()
{
Instance = new ArcGIS_ShadedRelief_World_2D_MapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("A8995FA4-D9D8-415B-87D0-51A7E53A90D4");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "ArcGIS_ShadedRelief_World_2D_Map";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_ShadedRelief_World_2D/MapServer/tile/1/0/1.jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_ShadedRelief_World_2D/MapServer/tile/{0}/{1}/{2}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/ArcGIS/ArcGIS_StreetMap_World_2D_MapProvider.cs
0,0 → 1,166

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
public abstract class ArcGISMapPlateCarreeProviderBase : GMapProvider
{
public ArcGISMapPlateCarreeProviderBase()
{
Copyright = string.Format("©{0} ESRI - Map data ©{0} ArcGIS", DateTime.Today.Year);
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return PlateCarreeProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
}
 
public abstract class ArcGISMapMercatorProviderBase : GMapProvider
{
public ArcGISMapMercatorProviderBase()
{
MaxZoom = null;
Copyright = string.Format("©{0} ESRI - Map data ©{0} ArcGIS", DateTime.Today.Year);
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
}
 
/// <summary>
/// ArcGIS_StreetMap_World_2D_Map provider, http://server.arcgisonline.com
/// </summary>
public class ArcGIS_StreetMap_World_2D_MapProvider : ArcGISMapPlateCarreeProviderBase
{
public static readonly ArcGIS_StreetMap_World_2D_MapProvider Instance;
 
ArcGIS_StreetMap_World_2D_MapProvider()
{
}
 
static ArcGIS_StreetMap_World_2D_MapProvider()
{
Instance = new ArcGIS_StreetMap_World_2D_MapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("00BF56D4-4B48-4939-9B11-575BBBE4A718");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "ArcGIS_StreetMap_World_2D_Map";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer/tile/0/0/0.jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer/tile/{0}/{1}/{2}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/ArcGIS/ArcGIS_Topo_US_2D_MapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// ArcGIS_Topo_US_2D_Map provider, http://server.arcgisonline.com
/// </summary>
public class ArcGIS_Topo_US_2D_MapProvider : ArcGISMapPlateCarreeProviderBase
{
public static readonly ArcGIS_Topo_US_2D_MapProvider Instance;
 
ArcGIS_Topo_US_2D_MapProvider()
{
}
 
static ArcGIS_Topo_US_2D_MapProvider()
{
Instance = new ArcGIS_Topo_US_2D_MapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("7652CC72-5C92-40F5-B572-B8FEAA728F6D");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "ArcGIS_Topo_US_2D_Map";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer/tile/4/3/15
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer/tile/{0}/{1}/{2}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/ArcGIS/ArcGIS_World_Physical_MapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// ArcGIS_World_Physical_Map provider, http://server.arcgisonline.com
/// </summary>
public class ArcGIS_World_Physical_MapProvider : ArcGISMapMercatorProviderBase
{
public static readonly ArcGIS_World_Physical_MapProvider Instance;
 
ArcGIS_World_Physical_MapProvider()
{
}
 
static ArcGIS_World_Physical_MapProvider()
{
Instance = new ArcGIS_World_Physical_MapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("0C0E73E3-5EA6-4F08-901C-AE85BCB1BFC8");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "ArcGIS_World_Physical_Map";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://services.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer/tile/2/0/2.jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer/tile/{0}/{1}/{2}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/ArcGIS/ArcGIS_World_Shaded_Relief_MapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// ArcGIS_World_Shaded_Relief_Map provider, http://server.arcgisonline.com
/// </summary>
public class ArcGIS_World_Shaded_Relief_MapProvider : ArcGISMapMercatorProviderBase
{
public static readonly ArcGIS_World_Shaded_Relief_MapProvider Instance;
 
ArcGIS_World_Shaded_Relief_MapProvider()
{
}
 
static ArcGIS_World_Shaded_Relief_MapProvider()
{
Instance = new ArcGIS_World_Shaded_Relief_MapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("2E821FEF-8EA1-458A-BC82-4F699F4DEE79");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "ArcGIS_World_Shaded_Relief_Map";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://services.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/0/0/0jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{0}/{1}/{2}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/ArcGIS/ArcGIS_World_Street_MapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// ArcGIS_World_Street_Map provider, http://server.arcgisonline.com
/// </summary>
public class ArcGIS_World_Street_MapProvider : ArcGISMapMercatorProviderBase
{
public static readonly ArcGIS_World_Street_MapProvider Instance;
 
ArcGIS_World_Street_MapProvider()
{
}
 
static ArcGIS_World_Street_MapProvider()
{
Instance = new ArcGIS_World_Street_MapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("E1FACDF6-E535-4D69-A49F-12B623A467A9");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "ArcGIS_World_Street_Map";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/0/0/0jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{0}/{1}/{2}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/ArcGIS/ArcGIS_World_Terrain_Base_MapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// ArcGIS_World_Terrain_Base_Map provider, http://server.arcgisonline.com
/// </summary>
public class ArcGIS_World_Terrain_Base_MapProvider : ArcGISMapMercatorProviderBase
{
public static readonly ArcGIS_World_Terrain_Base_MapProvider Instance;
 
ArcGIS_World_Terrain_Base_MapProvider()
{
}
 
static ArcGIS_World_Terrain_Base_MapProvider()
{
Instance = new ArcGIS_World_Terrain_Base_MapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("927F175B-5200-4D95-A99B-1C87C93099DA");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "ArcGIS_World_Terrain_Base_Map";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://services.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/0/0/0jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{0}/{1}/{2}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/ArcGIS/ArcGIS_World_Topo_MapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// ArcGIS_World_Topo_Map provider, http://server.arcgisonline.com
/// </summary>
public class ArcGIS_World_Topo_MapProvider : ArcGISMapMercatorProviderBase
{
public static readonly ArcGIS_World_Topo_MapProvider Instance;
 
ArcGIS_World_Topo_MapProvider()
{
}
 
static ArcGIS_World_Topo_MapProvider()
{
Instance = new ArcGIS_World_Topo_MapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("E0354A49-7447-4C9A-814F-A68565ED834B");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "ArcGIS_World_Topo_Map";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/0/0/0jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{0}/{1}/{2}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Bing/BingHybridMapProvider.cs
0,0 → 1,85

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// BingHybridMap provider
/// </summary>
public class BingHybridMapProvider : BingMapProviderBase
{
public static readonly BingHybridMapProvider Instance;
 
BingHybridMapProvider()
{
}
 
static BingHybridMapProvider()
{
Instance = new BingHybridMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("94E2FCB4-CAAC-45EA-A1F9-8147C4B14970");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "BingHybridMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
public override void OnInitialized()
{
base.OnInitialized();
 
if(!DisableDynamicTileUrlFormat)
{
//UrlFormat[AerialWithLabels]: http://ecn.{subdomain}.tiles.virtualearth.net/tiles/h{quadkey}.jpeg?g=3179&mkt={culture}
 
UrlDynamicFormat = GetTileUrl("AerialWithLabels");
if(!string.IsNullOrEmpty(UrlDynamicFormat))
{
UrlDynamicFormat = UrlDynamicFormat.Replace("{subdomain}", "t{0}").Replace("{quadkey}", "{1}").Replace("{culture}", "{2}");
}
}
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string key = TileXYToQuadKey(pos.X, pos.Y, zoom);
 
if(!DisableDynamicTileUrlFormat && !string.IsNullOrEmpty(UrlDynamicFormat))
{
return string.Format(UrlDynamicFormat, GetServerNum(pos, 4), key, language);
}
 
return string.Format(UrlFormat, GetServerNum(pos, 4), key, Version, language, ForceSessionIdOnTileAccess ? "&key=" + SessionId : string.Empty);
}
 
string UrlDynamicFormat = string.Empty;
 
// http://ecn.dynamic.t3.tiles.virtualearth.net/comp/CompositionHandler/12030012020203?mkt=en-us&it=A,G,L&n=z
 
static readonly string UrlFormat = "http://ecn.t{0}.tiles.virtualearth.net/tiles/h{1}.jpeg?g={2}&mkt={3}&n=z{4}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Bing/BingMapProvider.cs
0,0 → 1,779

namespace GMap.NET.MapProviders
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Xml;
using GMap.NET.Internals;
using GMap.NET.Projections;
 
public abstract class BingMapProviderBase : GMapProvider, RoutingProvider, GeocodingProvider
{
public BingMapProviderBase()
{
MaxZoom = null;
RefererUrl = "http://www.bing.com/maps/";
Copyright = string.Format("©{0} Microsoft Corporation, ©{0} NAVTEQ, ©{0} Image courtesy of NASA", DateTime.Today.Year);
}
 
public string Version = "4810";
 
/// <summary>
/// Bing Maps Customer Identification.
/// |
/// FOR LEGAL AND COMMERCIAL USAGE SET YOUR OWN REGISTERED KEY
/// |
/// http://msdn.microsoft.com/en-us/library/ff428642.aspx
/// </summary>
public string ClientKey = string.Empty;
 
internal string SessionId = string.Empty;
 
/// <summary>
/// set true to append SessionId on requesting tiles
/// </summary>
public bool ForceSessionIdOnTileAccess = false;
 
/// <summary>
/// set true to avoid using dynamic tile url format
/// </summary>
public bool DisableDynamicTileUrlFormat = false;
 
/// <summary>
/// Converts tile XY coordinates into a QuadKey at a specified level of detail.
/// </summary>
/// <param name="tileX">Tile X coordinate.</param>
/// <param name="tileY">Tile Y coordinate.</param>
/// <param name="levelOfDetail">Level of detail, from 1 (lowest detail)
/// to 23 (highest detail).</param>
/// <returns>A string containing the QuadKey.</returns>
internal string TileXYToQuadKey(long tileX, long tileY, int levelOfDetail)
{
StringBuilder quadKey = new StringBuilder();
for(int i = levelOfDetail; i > 0; i--)
{
char digit = '0';
int mask = 1 << (i - 1);
if((tileX & mask) != 0)
{
digit++;
}
if((tileY & mask) != 0)
{
digit++;
digit++;
}
quadKey.Append(digit);
}
return quadKey.ToString();
}
 
/// <summary>
/// Converts a QuadKey into tile XY coordinates.
/// </summary>
/// <param name="quadKey">QuadKey of the tile.</param>
/// <param name="tileX">Output parameter receiving the tile X coordinate.</param>
/// <param name="tileY">Output parameter receiving the tile Y coordinate.</param>
/// <param name="levelOfDetail">Output parameter receiving the level of detail.</param>
internal void QuadKeyToTileXY(string quadKey, out int tileX, out int tileY, out int levelOfDetail)
{
tileX = tileY = 0;
levelOfDetail = quadKey.Length;
for(int i = levelOfDetail; i > 0; i--)
{
int mask = 1 << (i - 1);
switch(quadKey[levelOfDetail - i])
{
case '0':
break;
 
case '1':
tileX |= mask;
break;
 
case '2':
tileY |= mask;
break;
 
case '3':
tileX |= mask;
tileY |= mask;
break;
 
default:
throw new ArgumentException("Invalid QuadKey digit sequence.");
}
}
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
 
public bool TryCorrectVersion = true;
 
/// <summary>
/// set false to use your own key.
/// FOR LEGAL AND COMMERCIAL USAGE SET YOUR OWN REGISTERED KEY
/// http://msdn.microsoft.com/en-us/library/ff428642.aspx
/// </summary>
public bool TryGetDefaultKey = true;
static bool init = false;
 
public override void OnInitialized()
{
if(!init)
{
try
{
var key = ClientKey;
 
// to avoid registration stuff, default key
if(TryGetDefaultKey && string.IsNullOrEmpty(ClientKey))
{
//old: Vx8dmDflxzT02jJUG8bEjMU07Xr9QWRpPTeRuAZTC1uZFQdDCvK/jUbHKdyHEWj4LvccTPoKofDHtzHsWu/0xuo5u2Y9rj88
key = Stuff.GString("Jq7FrGTyaYqcrvv9ugBKv4OVSKnmzpigqZtdvtcDdgZexmOZ2RugOexFSmVzTAhOWiHrdhFoNCoySnNF3MyyIOo5u2Y9rj88");
}
 
#region -- try get sesion key --
if(!string.IsNullOrEmpty(key))
{
string keyResponse = GMaps.Instance.UseUrlCache ? Cache.Instance.GetContent("BingLoggingServiceV1" + key, CacheType.UrlCache, TimeSpan.FromHours(8)) : string.Empty;
 
if(string.IsNullOrEmpty(keyResponse))
{
// Bing Maps WPF Control
// http://dev.virtualearth.net/webservices/v1/LoggingService/LoggingService.svc/Log?entry=0&auth={0}&fmt=1&type=3&group=MapControl&name=WPF&version=1.0.0.0&session=00000000-0000-0000-0000-000000000000&mkt=en-US
 
keyResponse = GetContentUsingHttp(string.Format("http://dev.virtualearth.net/webservices/v1/LoggingService/LoggingService.svc/Log?entry=0&fmt=1&type=3&group=MapControl&name=AJAX&mkt=en-us&auth={0}&jsonp=microsoftMapsNetworkCallback", key));
 
if(!string.IsNullOrEmpty(keyResponse) && keyResponse.Contains("ValidCredentials"))
{
if(GMaps.Instance.UseUrlCache)
{
Cache.Instance.SaveContent("BingLoggingServiceV1" + key, CacheType.UrlCache, keyResponse);
}
}
}
 
if(!string.IsNullOrEmpty(keyResponse) && keyResponse.Contains("sessionId") && keyResponse.Contains("ValidCredentials"))
{
// microsoftMapsNetworkCallback({"sessionId" : "xxx", "authenticationResultCode" : "ValidCredentials"})
 
SessionId = keyResponse.Split(',')[0].Split(':')[1].Replace("\"", string.Empty).Replace(" ", string.Empty);
Debug.WriteLine("GMapProviders.BingMap.SessionId: " + SessionId);
}
else
{
Debug.WriteLine("BingLoggingServiceV1: " + keyResponse);
}
}
#endregion
 
// supporting old road
if(TryCorrectVersion && DisableDynamicTileUrlFormat)
{
#region -- get the version --
string url = @"http://www.bing.com/maps";
string html = GMaps.Instance.UseUrlCache ? Cache.Instance.GetContent(url, CacheType.UrlCache, TimeSpan.FromDays(7)) : string.Empty;
 
if(string.IsNullOrEmpty(html))
{
html = GetContentUsingHttp(url);
if(!string.IsNullOrEmpty(html))
{
if(GMaps.Instance.UseUrlCache)
{
Cache.Instance.SaveContent(url, CacheType.UrlCache, html);
}
}
}
 
if(!string.IsNullOrEmpty(html))
{
#region -- match versions --
 
Regex reg = new Regex("tilegeneration:(\\d*)", RegexOptions.IgnoreCase);
Match mat = reg.Match(html);
if(mat.Success)
{
GroupCollection gc = mat.Groups;
int count = gc.Count;
if(count == 2)
{
string ver = gc[1].Value;
string old = GMapProviders.BingMap.Version;
if(ver != old)
{
GMapProviders.BingMap.Version = ver;
GMapProviders.BingSatelliteMap.Version = ver;
GMapProviders.BingHybridMap.Version = ver;
#if DEBUG
Debug.WriteLine("GMapProviders.BingMap.Version: " + ver + ", old: " + old + ", consider updating source");
if(Debugger.IsAttached)
{
Thread.Sleep(5555);
}
#endif
}
else
{
Debug.WriteLine("GMapProviders.BingMap.Version: " + ver + ", OK");
}
}
}
#endregion
}
#endregion
}
 
init = true; // try it only once
}
catch(Exception ex)
{
Debug.WriteLine("TryCorrectBingVersions failed: " + ex);
}
}
}
 
protected override bool CheckTileImageHttpResponse(WebResponse response)
{
var pass = base.CheckTileImageHttpResponse(response);
if(pass)
{
var tileInfo = response.Headers.Get("X-VE-Tile-Info");
if(tileInfo != null)
{
return !tileInfo.Equals("no-tile");
}
}
return pass;
}
 
internal string GetTileUrl(string imageryType)
{
//Retrieve map tile URL from the Imagery Metadata service: http://msdn.microsoft.com/en-us/library/ff701716.aspx
//This ensures that the current tile URL is always used.
//This will prevent the app from breaking when the map tiles change.
 
string ret = string.Empty;
if(!string.IsNullOrEmpty(SessionId))
{
try
{
string url = "http://dev.virtualearth.net/REST/V1/Imagery/Metadata/" + imageryType + "?output=xml&key=" + SessionId;
 
string r = GMaps.Instance.UseUrlCache ? Cache.Instance.GetContent("GetTileUrl" + imageryType, CacheType.UrlCache, TimeSpan.FromDays(7)) : string.Empty;
bool cache = false;
 
if(string.IsNullOrEmpty(r))
{
r = GetContentUsingHttp(url);
cache = true;
}
 
if(!string.IsNullOrEmpty(r))
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(r);
 
XmlNode xn = doc["Response"];
string statuscode = xn["StatusCode"].InnerText;
if(string.Compare(statuscode, "200", true) == 0)
{
xn = xn["ResourceSets"]["ResourceSet"]["Resources"];
XmlNodeList xnl = xn.ChildNodes;
foreach(XmlNode xno in xnl)
{
XmlNode imageUrl = xno["ImageUrl"];
 
if(imageUrl != null && !string.IsNullOrEmpty(imageUrl.InnerText))
{
if(cache && GMaps.Instance.UseUrlCache)
{
Cache.Instance.SaveContent("GetTileUrl" + imageryType, CacheType.UrlCache, r);
}
 
var baseTileUrl = imageUrl.InnerText;
 
if(baseTileUrl.Contains("{key}") || baseTileUrl.Contains("{token}"))
{
baseTileUrl.Replace("{key}", SessionId).Replace("{token}", SessionId);
}
else if(ForceSessionIdOnTileAccess)
{
// haven't seen anyone doing that, yet? ;/
baseTileUrl += "&key=" + SessionId;
}
 
Debug.WriteLine("GetTileUrl, UrlFormat[" + imageryType + "]: " + baseTileUrl);
 
ret = baseTileUrl;
break;
}
}
}
}
}
catch(Exception ex)
{
Debug.WriteLine("GetTileUrl: Error getting Bing Maps tile URL - " + ex);
}
}
return ret;
}
 
#region RoutingProvider
 
public MapRoute GetRoute(PointLatLng start, PointLatLng end, bool avoidHighways, bool walkingMode, int Zoom)
{
string tooltip;
int numLevels;
int zoomFactor;
MapRoute ret = null;
List<PointLatLng> points = GetRoutePoints(MakeRouteUrl(start, end, LanguageStr, avoidHighways, walkingMode), Zoom, out tooltip, out numLevels, out zoomFactor);
if(points != null)
{
ret = new MapRoute(points, tooltip);
}
return ret;
}
 
public MapRoute GetRoute(string start, string end, bool avoidHighways, bool walkingMode, int Zoom)
{
string tooltip;
int numLevels;
int zoomFactor;
MapRoute ret = null;
List<PointLatLng> points = GetRoutePoints(MakeRouteUrl(start, end, LanguageStr, avoidHighways, walkingMode), Zoom, out tooltip, out numLevels, out zoomFactor);
if(points != null)
{
ret = new MapRoute(points, tooltip);
}
return ret;
}
 
string MakeRouteUrl(string start, string end, string language, bool avoidHighways, bool walkingMode)
{
string addition = avoidHighways ? "&avoid=highways" : string.Empty;
string mode = walkingMode ? "Walking" : "Driving";
 
return string.Format(CultureInfo.InvariantCulture, RouteUrlFormatPointQueries, mode, start, end, addition, SessionId);
}
 
string MakeRouteUrl(PointLatLng start, PointLatLng end, string language, bool avoidHighways, bool walkingMode)
{
string addition = avoidHighways ? "&avoid=highways" : string.Empty;
string mode = walkingMode ? "Walking" : "Driving";
 
return string.Format(CultureInfo.InvariantCulture, RouteUrlFormatPointLatLng, mode, start.Lat, start.Lng, end.Lat, end.Lng, addition, SessionId);
}
 
List<PointLatLng> GetRoutePoints(string url, int zoom, out string tooltipHtml, out int numLevel, out int zoomFactor)
{
List<PointLatLng> points = null;
tooltipHtml = string.Empty;
numLevel = -1;
zoomFactor = -1;
try
{
string route = GMaps.Instance.UseRouteCache ? Cache.Instance.GetContent(url, CacheType.RouteCache) : string.Empty;
 
if(string.IsNullOrEmpty(route))
{
route = GetContentUsingHttp(url);
 
if(!string.IsNullOrEmpty(route))
{
if(GMaps.Instance.UseRouteCache)
{
Cache.Instance.SaveContent(url, CacheType.RouteCache, route);
}
}
}
 
// parse values
if(!string.IsNullOrEmpty(route))
{
#region -- title --
int tooltipEnd = 0;
{
int x = route.IndexOf("<RoutePath><Line>") + 17;
if(x >= 17)
{
tooltipEnd = route.IndexOf("</Line></RoutePath>", x + 1);
if(tooltipEnd > 0)
{
int l = tooltipEnd - x;
if(l > 0)
{
//tooltipHtml = route.Substring(x, l).Replace(@"\x26#160;", " ");
tooltipHtml = route.Substring(x, l);
}
}
}
}
#endregion
 
#region -- points --
XmlDocument doc = new XmlDocument();
doc.LoadXml(route);
XmlNode xn = doc["Response"];
string statuscode = xn["StatusCode"].InnerText;
switch(statuscode)
{
case "200":
{
xn = xn["ResourceSets"]["ResourceSet"]["Resources"]["Route"]["RoutePath"]["Line"];
XmlNodeList xnl = xn.ChildNodes;
if(xnl.Count > 0)
{
points = new List<PointLatLng>();
foreach(XmlNode xno in xnl)
{
XmlNode latitude = xno["Latitude"];
XmlNode longitude = xno["Longitude"];
points.Add(new PointLatLng(double.Parse(latitude.InnerText, CultureInfo.InvariantCulture),
double.Parse(longitude.InnerText, CultureInfo.InvariantCulture)));
}
}
break;
}
// no status implementation on routes yet although when introduced these are the codes. Exception will be catched.
case "400":
throw new Exception("Bad Request, The request contained an error.");
case "401":
throw new Exception("Unauthorized, Access was denied. You may have entered your credentials incorrectly, or you might not have access to the requested resource or operation.");
case "403":
throw new Exception("Forbidden, The request is for something forbidden. Authorization will not help.");
case "404":
throw new Exception("Not Found, The requested resource was not found.");
case "500":
throw new Exception("Internal Server Error, Your request could not be completed because there was a problem with the service.");
case "501":
throw new Exception("Service Unavailable, There's a problem with the service right now. Please try again later.");
default:
points = null;
break; // unknown, for possible future error codes
}
#endregion
}
}
catch(Exception ex)
{
points = null;
Debug.WriteLine("GetRoutePoints: " + ex);
}
return points;
}
 
// example : http://dev.virtualearth.net/REST/V1/Routes/Driving?o=xml&wp.0=44.979035,-93.26493&wp.1=44.943828508257866,-93.09332862496376&optmz=distance&rpo=Points&key=[PROVIDEYOUROWNKEY!!]
static readonly string RouteUrlFormatPointLatLng = "http://dev.virtualearth.net/REST/V1/Routes/{0}?o=xml&wp.0={1},{2}&wp.1={3},{4}{5}&optmz=distance&rpo=Points&key={6}";
static readonly string RouteUrlFormatPointQueries = "http://dev.virtualearth.net/REST/V1/Routes/{0}?o=xml&wp.0={1}&wp.1={2}{3}&optmz=distance&rpo=Points&key={4}";
 
#endregion RoutingProvider
 
#region GeocodingProvider
 
public GeoCoderStatusCode GetPoints(string keywords, out List<PointLatLng> pointList)
{
//Escape keywords to better handle special characters.
return GetLatLngFromGeocoderUrl(MakeGeocoderUrl("q=" + Uri.EscapeDataString(keywords)), out pointList);
}
 
public PointLatLng? GetPoint(string keywords, out GeoCoderStatusCode status)
{
List<PointLatLng> pointList;
status = GetPoints(keywords, out pointList);
return pointList != null && pointList.Count > 0 ? pointList[0] : (PointLatLng?)null;
}
 
public GeoCoderStatusCode GetPoints(Placemark placemark, out List<PointLatLng> pointList)
{
return GetLatLngFromGeocoderUrl(MakeGeocoderDetailedUrl(placemark), out pointList);
}
 
public PointLatLng? GetPoint(Placemark placemark, out GeoCoderStatusCode status)
{
List<PointLatLng> pointList;
status = GetLatLngFromGeocoderUrl(MakeGeocoderDetailedUrl(placemark), out pointList);
return pointList != null && pointList.Count > 0 ? pointList[0] : (PointLatLng?)null;
}
 
string MakeGeocoderDetailedUrl(Placemark placemark)
{
string parameters = string.Empty;
 
if(!AddFieldIfNotEmpty(ref parameters, "countryRegion", placemark.CountryNameCode))
AddFieldIfNotEmpty(ref parameters, "countryRegion", placemark.CountryName);
 
AddFieldIfNotEmpty(ref parameters, "adminDistrict", placemark.DistrictName);
AddFieldIfNotEmpty(ref parameters, "locality", placemark.LocalityName);
AddFieldIfNotEmpty(ref parameters, "postalCode", placemark.PostalCodeNumber);
 
if(!string.IsNullOrEmpty(placemark.HouseNo))
AddFieldIfNotEmpty(ref parameters, "addressLine", placemark.ThoroughfareName + " " + placemark.HouseNo);
else
AddFieldIfNotEmpty(ref parameters, "addressLine", placemark.ThoroughfareName);
 
return MakeGeocoderUrl(parameters);
}
 
bool AddFieldIfNotEmpty(ref string Input, string FieldName, string Value)
{
if(!string.IsNullOrEmpty(Value))
{
if(string.IsNullOrEmpty(Input))
Input = string.Empty;
else
Input = Input + "&";
 
Input = Input + FieldName + "=" + Value;
 
return true;
}
return false;
}
 
public GeoCoderStatusCode GetPlacemarks(PointLatLng location, out List<Placemark> placemarkList)
{
// http://msdn.microsoft.com/en-us/library/ff701713.aspx
throw new NotImplementedException();
}
 
public Placemark? GetPlacemark(PointLatLng location, out GeoCoderStatusCode status)
{
// http://msdn.microsoft.com/en-us/library/ff701713.aspx
throw new NotImplementedException();
}
 
string MakeGeocoderUrl(string keywords)
{
return string.Format(CultureInfo.InvariantCulture, GeocoderUrlFormat, keywords, SessionId);
}
 
GeoCoderStatusCode GetLatLngFromGeocoderUrl(string url, out List<PointLatLng> pointList)
{
var status = GeoCoderStatusCode.Unknow;
pointList = null;
 
try
{
string geo = GMaps.Instance.UseGeocoderCache ? Cache.Instance.GetContent(url, CacheType.GeocoderCache) : string.Empty;
 
bool cache = false;
 
if(string.IsNullOrEmpty(geo))
{
geo = GetContentUsingHttp(url);
 
if(!string.IsNullOrEmpty(geo))
{
cache = true;
}
}
 
status = GeoCoderStatusCode.Unknow;
if(!string.IsNullOrEmpty(geo))
{
if(geo.StartsWith("<?xml") && geo.Contains("<Response"))
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(geo);
XmlNode xn = doc["Response"];
string statuscode = xn["StatusCode"].InnerText;
switch(statuscode)
{
case "200":
{
pointList = new List<PointLatLng>();
xn = xn["ResourceSets"]["ResourceSet"]["Resources"];
XmlNodeList xnl = xn.ChildNodes;
foreach(XmlNode xno in xnl)
{
XmlNode latitude = xno["Point"]["Latitude"];
XmlNode longitude = xno["Point"]["Longitude"];
pointList.Add(new PointLatLng(Double.Parse(latitude.InnerText, CultureInfo.InvariantCulture),
Double.Parse(longitude.InnerText, CultureInfo.InvariantCulture)));
}
 
if(pointList.Count > 0)
{
status = GeoCoderStatusCode.G_GEO_SUCCESS;
if(cache && GMaps.Instance.UseGeocoderCache)
{
Cache.Instance.SaveContent(url, CacheType.GeocoderCache, geo);
}
break;
}
 
status = GeoCoderStatusCode.G_GEO_UNKNOWN_ADDRESS;
break;
}
 
case "400":
status = GeoCoderStatusCode.G_GEO_BAD_REQUEST;
break; // bad request, The request contained an error.
case "401":
status = GeoCoderStatusCode.G_GEO_BAD_KEY;
break; // Unauthorized, Access was denied. You may have entered your credentials incorrectly, or you might not have access to the requested resource or operation.
case "403":
status = GeoCoderStatusCode.G_GEO_BAD_REQUEST;
break; // Forbidden, The request is for something forbidden. Authorization will not help.
case "404":
status = GeoCoderStatusCode.G_GEO_UNKNOWN_ADDRESS;
break; // Not Found, The requested resource was not found.
case "500":
status = GeoCoderStatusCode.G_GEO_SERVER_ERROR;
break; // Internal Server Error, Your request could not be completed because there was a problem with the service.
case "501":
status = GeoCoderStatusCode.Unknow;
break; // Service Unavailable, There's a problem with the service right now. Please try again later.
default:
status = GeoCoderStatusCode.Unknow;
break; // unknown, for possible future error codes
}
}
}
}
catch(Exception ex)
{
status = GeoCoderStatusCode.ExceptionInCode;
Debug.WriteLine("GetLatLngFromGeocoderUrl: " + ex);
}
 
return status;
}
 
// http://dev.virtualearth.net/REST/v1/Locations/1%20Microsoft%20Way%20Redmond%20WA%2098052?o=xml&key=BingMapsKey
static readonly string GeocoderUrlFormat = "http://dev.virtualearth.net/REST/v1/Locations?{0}&o=xml&key={1}";
 
#endregion GeocodingProvider
}
 
/// <summary>
/// BingMapProvider provider
/// </summary>
public class BingMapProvider : BingMapProviderBase
{
public static readonly BingMapProvider Instance;
 
BingMapProvider()
{
}
 
static BingMapProvider()
{
Instance = new BingMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("D0CEB371-F10A-4E12-A2C1-DF617D6674A8");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "BingMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
public override void OnInitialized()
{
base.OnInitialized();
 
if(!DisableDynamicTileUrlFormat)
{
//UrlFormat[Road]: http://ecn.{subdomain}.tiles.virtualearth.net/tiles/r{quadkey}.jpeg?g=3179&mkt={culture}&shading=hill
 
UrlDynamicFormat = GetTileUrl("Road");
if(!string.IsNullOrEmpty(UrlDynamicFormat))
{
UrlDynamicFormat = UrlDynamicFormat.Replace("{subdomain}", "t{0}").Replace("{quadkey}", "{1}").Replace("{culture}", "{2}");
}
}
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string key = TileXYToQuadKey(pos.X, pos.Y, zoom);
 
if(!DisableDynamicTileUrlFormat && !string.IsNullOrEmpty(UrlDynamicFormat))
{
return string.Format(UrlDynamicFormat, GetServerNum(pos, 4), key, language);
}
 
return string.Format(UrlFormat, GetServerNum(pos, 4), key, Version, language, ForceSessionIdOnTileAccess ? "&key=" + SessionId : string.Empty);
}
 
string UrlDynamicFormat = string.Empty;
 
// http://ecn.t0.tiles.virtualearth.net/tiles/r120030?g=875&mkt=en-us&lbl=l1&stl=h&shading=hill&n=z
 
static readonly string UrlFormat = "http://ecn.t{0}.tiles.virtualearth.net/tiles/r{1}?g={2}&mkt={3}&lbl=l1&stl=h&shading=hill&n=z{4}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Bing/BingSatelliteMapProvider.cs
0,0 → 1,85

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// BingSatelliteMapProvider provider
/// </summary>
public class BingSatelliteMapProvider : BingMapProviderBase
{
public static readonly BingSatelliteMapProvider Instance;
 
BingSatelliteMapProvider()
{
}
 
static BingSatelliteMapProvider()
{
Instance = new BingSatelliteMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("3AC742DD-966B-4CFB-B67D-33E7F82F2D37");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "BingSatelliteMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
public override void OnInitialized()
{
base.OnInitialized();
 
if(!DisableDynamicTileUrlFormat)
{
//UrlFormat[Aerial]: http://ecn.{subdomain}.tiles.virtualearth.net/tiles/a{quadkey}.jpeg?g=3179
 
UrlDynamicFormat = GetTileUrl("Aerial");
if(!string.IsNullOrEmpty(UrlDynamicFormat))
{
UrlDynamicFormat = UrlDynamicFormat.Replace("{subdomain}", "t{0}").Replace("{quadkey}", "{1}");
}
}
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string key = TileXYToQuadKey(pos.X, pos.Y, zoom);
 
if(!DisableDynamicTileUrlFormat && !string.IsNullOrEmpty(UrlDynamicFormat))
{
return string.Format(UrlDynamicFormat, GetServerNum(pos, 4), key);
}
 
return string.Format(UrlFormat, GetServerNum(pos, 4), key, Version, language, ForceSessionIdOnTileAccess ? "&key=" + SessionId : string.Empty);
}
 
string UrlDynamicFormat = string.Empty;
 
// http://ecn.t1.tiles.virtualearth.net/tiles/a12030003131321231.jpeg?g=875&mkt=en-us&n=z
 
static readonly string UrlFormat = "http://ecn.t{0}.tiles.virtualearth.net/tiles/a{1}.jpeg?g={2}&mkt={3}&n=z{4}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Czech/CzechGeographicMapProvider.cs
0,0 → 1,59
namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// CzechTuristMap provider, http://www.mapy.cz/
/// </summary>
public class CzechGeographicMapProvider : CzechMapProviderBase
{
public static readonly CzechGeographicMapProvider Instance;
 
CzechGeographicMapProvider()
{
}
 
static CzechGeographicMapProvider()
{
Instance = new CzechGeographicMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("50EC9FCC-E4D7-4F53-8700-2D1DB73A1D48");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechGeographicMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://m3.mapserver.mapy.czzemepis-m/14-8802-5528
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/zemepis-m/{1}-{2}-{3}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Czech/CzechHistoryMapProvider.cs
0,0 → 1,74

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// CzechHistoryMap provider, http://www.mapy.cz/
/// </summary>
public class CzechHistoryMapProvider : CzechMapProviderBase
{
public static readonly CzechHistoryMapProvider Instance;
 
CzechHistoryMapProvider()
{
MaxZoom = 15;
}
 
static CzechHistoryMapProvider()
{
Instance = new CzechHistoryMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("CD44C19D-5EED-4623-B367-FB39FDC55B8F");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechHistoryMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this, CzechHybridMapProvider.Instance };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://m3.mapserver.mapy.cz/army2-m/14-8802-5528
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/army2-m/{1}-{2}-{3}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Czech/CzechHybridMapProvider.cs
0,0 → 1,73

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// CzechHybridMap provider, http://www.mapy.cz/
/// </summary>
public class CzechHybridMapProvider : CzechMapProviderBase
{
public static readonly CzechHybridMapProvider Instance;
 
CzechHybridMapProvider()
{
}
 
static CzechHybridMapProvider()
{
Instance = new CzechHybridMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("7540CE5B-F634-41E9-B23E-A6E0A97526FD");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechHybridMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { CzechSatelliteMapProvider.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://m3.mapserver.mapy.cz/hybrid-m/14-8802-5528
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/hybrid-m/{1}-{2}-{3}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Czech/CzechMapProvider.cs
0,0 → 1,115

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
public abstract class CzechMapProviderBase : GMapProvider
{
public CzechMapProviderBase()
{
RefererUrl = "http://www.mapy.cz/";
Area = new RectLatLng(51.2024819920053, 11.8401353319027, 7.22833716731277, 2.78312271922872);
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
}
 
/// <summary>
/// CzechMap provider, http://www.mapy.cz/
/// </summary>
public class CzechMapProvider : CzechMapProviderBase
{
public static readonly CzechMapProvider Instance;
 
CzechMapProvider()
{
}
 
static CzechMapProvider()
{
Instance = new CzechMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("13AB92EF-8C3B-4FAC-B2CD-2594C05F8BFC");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// ['base-m','ophoto-m','turist-m','army2-m']
// http://m3.mapserver.mapy.cz/base-m/14-8802-5528
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/base-m/{1}-{2}-{3}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Czech/CzechSatelliteMapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// CzechSatelliteMap provider, http://www.mapy.cz/
/// </summary>
public class CzechSatelliteMapProvider : CzechMapProviderBase
{
public static readonly CzechSatelliteMapProvider Instance;
 
CzechSatelliteMapProvider()
{
}
 
static CzechSatelliteMapProvider()
{
Instance = new CzechSatelliteMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("30F433DB-BBF5-463D-9AB5-76383483B605");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechSatelliteMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://m3.mapserver.mapy.cz/ophoto-m/14-8802-5528
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/ophoto-m/{1}-{2}-{3}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Czech/CzechTuristMapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// CzechTuristMap provider, http://www.mapy.cz/
/// </summary>
public class CzechTuristMapProvider : CzechMapProviderBase
{
public static readonly CzechTuristMapProvider Instance;
 
CzechTuristMapProvider()
{
}
 
static CzechTuristMapProvider()
{
Instance = new CzechTuristMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("102A54BE-3894-439B-9C1F-CA6FF2EA1FE9");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechTuristMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://m3.mapserver.mapy.cz/wtourist-m/14-8802-5528
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/wturist-m/{1}-{2}-{3}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Czech/CzechTuristWinterMapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// CzechTuristMap provider, http://www.mapy.cz/
/// </summary>
public class CzechTuristWinterMapProvider : CzechMapProviderBase
{
public static readonly CzechTuristWinterMapProvider Instance;
 
CzechTuristWinterMapProvider()
{
}
 
static CzechTuristWinterMapProvider()
{
Instance = new CzechTuristWinterMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("F7B7FC9E-BDC2-4A9D-A1D3-A6BEC8FE0EB2");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechTuristWinterMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://m3.mapserver.mapy.cz/wturist_winter-m/14-8802-5528
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/wturist_winter-m/{1}-{2}-{3}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/CzechOld/CzechHistoryMapProvider.cs
0,0 → 1,76

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// CzechHistoryMap provider, http://www.mapy.cz/
/// </summary>
public class CzechHistoryMapProviderOld : CzechMapProviderBaseOld
{
public static readonly CzechHistoryMapProviderOld Instance;
 
CzechHistoryMapProviderOld()
{
}
 
static CzechHistoryMapProviderOld()
{
Instance = new CzechHistoryMapProviderOld();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("C666AAF4-9D27-418F-97CB-7F0D8CC44544");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechHistoryOldMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this, CzechHybridMapProviderOld.Instance };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://m4.mapserver.mapy.cz/army2/9_7d00000_8080000
 
long xx = pos.X << (28 - zoom);
long yy = ((((long)Math.Pow(2.0, (double)zoom)) - 1) - pos.Y) << (28 - zoom);
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, xx, yy);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/army2/{1}_{2:x7}_{3:x7}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/CzechOld/CzechHybridMapProvider.cs
0,0 → 1,76

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// CzechHybridMap provider, http://www.mapy.cz/
/// </summary>
public class CzechHybridMapProviderOld : CzechMapProviderBaseOld
{
public static readonly CzechHybridMapProviderOld Instance;
 
CzechHybridMapProviderOld()
{
}
 
static CzechHybridMapProviderOld()
{
Instance = new CzechHybridMapProviderOld();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("F785D98E-DD1D-46FD-8BC1-1AAB69604980");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechHybridOldMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { CzechSatelliteMapProviderOld.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://m2.mapserver.mapy.cz/hybrid/9_7d00000_7b80000
 
long xx = pos.X << (28 - zoom);
long yy = ((((long)Math.Pow(2.0, (double)zoom)) - 1) - pos.Y) << (28 - zoom);
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, xx, yy);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/hybrid/{1}_{2:x7}_{3:x7}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/CzechOld/CzechMapProvider.cs
0,0 → 1,118

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
public abstract class CzechMapProviderBaseOld : GMapProvider
{
public CzechMapProviderBaseOld()
{
RefererUrl = "http://www.mapy.cz/";
Area = new RectLatLng(51.2024819920053, 11.8401353319027, 7.22833716731277, 2.78312271922872);
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MapyCZProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
}
 
/// <summary>
/// CzechMap provider, http://www.mapy.cz/
/// </summary>
public class CzechMapProviderOld : CzechMapProviderBaseOld
{
public static readonly CzechMapProviderOld Instance;
 
CzechMapProviderOld()
{
}
 
static CzechMapProviderOld()
{
Instance = new CzechMapProviderOld();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("6A1AF99A-84C6-4EF6-91A5-77B9D03257C2");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechOldMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// ['base','ophoto','turist','army2']
// http://m1.mapserver.mapy.cz/base-n/3_8000000_8000000
 
long xx = pos.X << (28 - zoom);
long yy = ((((long)Math.Pow(2.0, (double)zoom)) - 1) - pos.Y) << (28 - zoom);
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, xx, yy);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/base-n/{1}_{2:x7}_{3:x7}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/CzechOld/CzechSatelliteMapProvider.cs
0,0 → 1,63

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// CzechSatelliteMap provider, http://www.mapy.cz/
/// </summary>
public class CzechSatelliteMapProviderOld : CzechMapProviderBaseOld
{
public static readonly CzechSatelliteMapProviderOld Instance;
 
CzechSatelliteMapProviderOld()
{
}
 
static CzechSatelliteMapProviderOld()
{
Instance = new CzechSatelliteMapProviderOld();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("7846D655-5F9C-4042-8652-60B6BF629C3C");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechSatelliteOldMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
//http://m3.mapserver.mapy.cz/ophoto/9_7a80000_7a80000
 
long xx = pos.X << (28 - zoom);
long yy = ((((long)Math.Pow(2.0, (double)zoom)) - 1) - pos.Y) << (28 - zoom);
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, xx, yy);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/ophoto/{1}_{2:x7}_{3:x7}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/CzechOld/CzechTuristMapProvider.cs
0,0 → 1,63

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// CzechTuristMap provider, http://www.mapy.cz/
/// </summary>
public class CzechTuristMapProviderOld : CzechMapProviderBaseOld
{
public static readonly CzechTuristMapProviderOld Instance;
 
CzechTuristMapProviderOld()
{
}
 
static CzechTuristMapProviderOld()
{
Instance = new CzechTuristMapProviderOld();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("B923C81D-880C-42EB-88AB-AF8FE42B564D");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CzechTuristOldMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://m1.mapserver.mapy.cz/turist/3_8000000_8000000
 
long xx = pos.X << (28 - zoom);
long yy = ((((long)Math.Pow(2.0, (double)zoom)) - 1) - pos.Y) << (28 - zoom);
 
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, xx, yy);
}
 
static readonly string UrlFormat = "http://m{0}.mapserver.mapy.cz/turist/{1}_{2:x7}_{3:x7}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Etc/CloudMadeMapProvider.cs
0,0 → 1,561

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
using System.Globalization;
using GMap.NET.Internals;
using System.Collections.Generic;
using System.Xml;
using System.Diagnostics;
 
public abstract class CloudMadeMapProviderBase : GMapProvider, RoutingProvider, DirectionsProvider
{
public readonly string ServerLetters = "abc";
public readonly string DoubleResolutionString = "@2x";
 
public bool DoubleResolution = true;
public string Key;
public int StyleID;
 
public string Version = "0.3";
 
public CloudMadeMapProviderBase()
{
MaxZoom = null;
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
 
#region RoutingProvider Members
 
public MapRoute GetRoute(PointLatLng start, PointLatLng end, bool avoidHighways, bool walkingMode, int Zoom)
{
List<PointLatLng> points = GetRoutePoints(MakeRoutingUrl(start, end, walkingMode ? TravelTypeFoot : TravelTypeMotorCar, LanguageStr, "km"));
MapRoute route = points != null ? new MapRoute(points, walkingMode ? WalkingStr : DrivingStr) : null;
return route;
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="avoidHighways"></param>
/// <param name="walkingMode"></param>
/// <param name="Zoom"></param>
/// <returns></returns>
public MapRoute GetRoute(string start, string end, bool avoidHighways, bool walkingMode, int Zoom)
{
throw new NotImplementedException();
}
 
#region -- internals --
 
string MakeRoutingUrl(PointLatLng start, PointLatLng end, string travelType, string language, string units)
{
// http://developers.cloudmade.com/projects/routing-http-api/examples/
// http://routes.cloudmade.com/YOUR-API-KEY-GOES-HERE/api/0.3/start_point,[[transit_point1,...,transit_pointN]],end_point/route_type[/route_type_modifier].output_format[?lang=(en|de)][&units=(km|miles)]
return string.Format(CultureInfo.InvariantCulture, UrlFormat, Key, Version, start.Lat, start.Lng, end.Lat, end.Lng, travelType, language, units);
}
 
List<PointLatLng> GetRoutePoints(string url)
{
List<PointLatLng> points = null;
try
{
string route = GMaps.Instance.UseRouteCache ? Cache.Instance.GetContent(url, CacheType.RouteCache) : string.Empty;
if(string.IsNullOrEmpty(route))
{
route = GetContentUsingHttp(url);
if(!string.IsNullOrEmpty(route))
{
if(GMaps.Instance.UseRouteCache)
{
Cache.Instance.SaveContent(url, CacheType.RouteCache, route);
}
}
}
 
#region -- gpx response --
//<?xml version="1.0" encoding="UTF-8"?>
//<gpx creator="" version="1.1" xmlns="http://www.topografix.com/GPX/1/1"
// xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
// xsi:schemaLocation="http://www.topografix.com/GPX/1/1 gpx.xsd ">
// <extensions>
// <distance>293</distance>
// <time>34</time>
// <start>Perckhoevelaan</start>
// <end>Goudenregenlaan</end>
// </extensions>
// <wpt lat="51.17702" lon="4.39630" />
// <wpt lat="51.17656" lon="4.39655" />
// <wpt lat="51.17639" lon="4.39670" />
// <wpt lat="51.17612" lon="4.39696" />
// <wpt lat="51.17640" lon="4.39767" />
// <wpt lat="51.17668" lon="4.39828" />
// <wpt lat="51.17628" lon="4.39874" />
// <wpt lat="51.17618" lon="4.39888" />
// <rte>
// <rtept lat="51.17702" lon="4.39630">
// <desc>Head south on Perckhoevelaan, 0.1 km</desc>
// <extensions>
// <distance>111</distance>
// <time>13</time>
// <offset>0</offset>
// <distance-text>0.1 km</distance-text>
// <direction>S</direction>
// <azimuth>160.6</azimuth>
// </extensions>
// </rtept>
// <rtept lat="51.17612" lon="4.39696">
// <desc>Turn left at Laarstraat, 0.1 km</desc>
// <extensions>
// <distance>112</distance>
// <time>13</time>
// <offset>3</offset>
// <distance-text>0.1 km</distance-text>
// <direction>NE</direction>
// <azimuth>58.1</azimuth>
// <turn>TL</turn>
// <turn-angle>269.0</turn-angle>
// </extensions>
// </rtept>
// <rtept lat="51.17668" lon="4.39828">
// <desc>Turn right at Goudenregenlaan, 70 m</desc>
// <extensions>
// <distance>70</distance>
// <time>8</time>
// <offset>5</offset>
// <distance-text>70 m</distance-text>
// <direction>SE</direction>
// <azimuth>143.4</azimuth>
// <turn>TR</turn>
// <turn-angle>89.8</turn-angle>
// </extensions>
// </rtept>
// </rte>
//</gpx>
#endregion
 
if(!string.IsNullOrEmpty(route))
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(route);
System.Xml.XmlNamespaceManager xmlnsManager = new System.Xml.XmlNamespaceManager(xmldoc.NameTable);
xmlnsManager.AddNamespace("sm", "http://www.topografix.com/GPX/1/1");
 
XmlNodeList wpts = xmldoc.SelectNodes("/sm:gpx/sm:wpt", xmlnsManager);
if(wpts != null && wpts.Count > 0)
{
points = new List<PointLatLng>();
foreach(XmlNode w in wpts)
{
double lat = double.Parse(w.Attributes["lat"].InnerText, CultureInfo.InvariantCulture);
double lng = double.Parse(w.Attributes["lon"].InnerText, CultureInfo.InvariantCulture);
points.Add(new PointLatLng(lat, lng));
}
}
}
}
catch(Exception ex)
{
Debug.WriteLine("GetRoutePoints: " + ex);
}
 
return points;
}
 
static readonly string UrlFormat = "http://routes.cloudmade.com/{0}/api/{1}/{2},{3},{4},{5}/{6}.gpx?lang={7}&units={8}";
static readonly string TravelTypeFoot = "foot";
static readonly string TravelTypeMotorCar = "car";
static readonly string WalkingStr = "Walking";
static readonly string DrivingStr = "Driving";
 
#endregion
 
#endregion
 
#region DirectionsProvider Members
 
public DirectionsStatusCode GetDirections(out GDirections direction, PointLatLng start, PointLatLng end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
return GetDirectionsUrl(MakeRoutingUrl(start, end, walkingMode ? TravelTypeFoot : TravelTypeMotorCar, LanguageStr, metric ? "km" : "miles"), out direction);
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="direction"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="avoidHighways"></param>
/// <param name="avoidTolls"></param>
/// <param name="walkingMode"></param>
/// <param name="sensor"></param>
/// <param name="metric"></param>
/// <returns></returns>
public DirectionsStatusCode GetDirections(out GDirections direction, string start, string end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
throw new NotImplementedException();
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="status"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="avoidHighways"></param>
/// <param name="avoidTolls"></param>
/// <param name="walkingMode"></param>
/// <param name="sensor"></param>
/// <param name="metric"></param>
/// <returns></returns>
public IEnumerable<GDirections> GetDirections(out DirectionsStatusCode status, string start, string end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
throw new NotImplementedException();
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="status"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="avoidHighways"></param>
/// <param name="avoidTolls"></param>
/// <param name="walkingMode"></param>
/// <param name="sensor"></param>
/// <param name="metric"></param>
/// <returns></returns>
public IEnumerable<GDirections> GetDirections(out DirectionsStatusCode status, PointLatLng start, PointLatLng end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
throw new NotImplementedException();
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="direction"></param>
/// <param name="start"></param>
/// <param name="wayPoints"></param>
/// <param name="avoidHighways"></param>
/// <param name="avoidTolls"></param>
/// <param name="walkingMode"></param>
/// <param name="sensor"></param>
/// <param name="metric"></param>
/// <returns></returns>
public DirectionsStatusCode GetDirections(out GDirections direction, PointLatLng start, IEnumerable<PointLatLng> wayPoints, PointLatLng end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
throw new NotImplementedException();
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="direction"></param>
/// <param name="start"></param>
/// <param name="wayPoints"></param>
/// <param name="avoidHighways"></param>
/// <param name="avoidTolls"></param>
/// <param name="walkingMode"></param>
/// <param name="sensor"></param>
/// <param name="metric"></param>
/// <returns></returns>
public DirectionsStatusCode GetDirections(out GDirections direction, string start, IEnumerable<string> wayPoints, string end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
throw new NotImplementedException();
}
 
#region -- internals --
 
DirectionsStatusCode GetDirectionsUrl(string url, out GDirections direction)
{
DirectionsStatusCode ret = DirectionsStatusCode.UNKNOWN_ERROR;
direction = null;
 
try
{
string route = GMaps.Instance.UseRouteCache ? Cache.Instance.GetContent(url, CacheType.DirectionsCache) : string.Empty;
if(string.IsNullOrEmpty(route))
{
route = GetContentUsingHttp(url);
if(!string.IsNullOrEmpty(route))
{
if(GMaps.Instance.UseRouteCache)
{
Cache.Instance.SaveContent(url, CacheType.DirectionsCache, route);
}
}
}
 
#region -- gpx response --
//<?xml version="1.0" encoding="UTF-8"?>
//<gpx creator="" version="1.1" xmlns="http://www.topografix.com/GPX/1/1"
// xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
// xsi:schemaLocation="http://www.topografix.com/GPX/1/1 gpx.xsd ">
// <extensions>
// <distance>293</distance>
// <time>34</time>
// <start>Perckhoevelaan</start>
// <end>Goudenregenlaan</end>
// </extensions>
// <wpt lat="51.17702" lon="4.39630" />
// <wpt lat="51.17656" lon="4.39655" />
// <wpt lat="51.17639" lon="4.39670" />
// <wpt lat="51.17612" lon="4.39696" />
// <wpt lat="51.17640" lon="4.39767" />
// <wpt lat="51.17668" lon="4.39828" />
// <wpt lat="51.17628" lon="4.39874" />
// <wpt lat="51.17618" lon="4.39888" />
// <rte>
// <rtept lat="51.17702" lon="4.39630">
// <desc>Head south on Perckhoevelaan, 0.1 km</desc>
// <extensions>
// <distance>111</distance>
// <time>13</time>
// <offset>0</offset>
// <distance-text>0.1 km</distance-text>
// <direction>S</direction>
// <azimuth>160.6</azimuth>
// </extensions>
// </rtept>
// <rtept lat="51.17612" lon="4.39696">
// <desc>Turn left at Laarstraat, 0.1 km</desc>
// <extensions>
// <distance>112</distance>
// <time>13</time>
// <offset>3</offset>
// <distance-text>0.1 km</distance-text>
// <direction>NE</direction>
// <azimuth>58.1</azimuth>
// <turn>TL</turn>
// <turn-angle>269.0</turn-angle>
// </extensions>
// </rtept>
// <rtept lat="51.17668" lon="4.39828">
// <desc>Turn right at Goudenregenlaan, 70 m</desc>
// <extensions>
// <distance>70</distance>
// <time>8</time>
// <offset>5</offset>
// <distance-text>70 m</distance-text>
// <direction>SE</direction>
// <azimuth>143.4</azimuth>
// <turn>TR</turn>
// <turn-angle>89.8</turn-angle>
// </extensions>
// </rtept>
// </rte>
//</gpx>
#endregion
 
if(!string.IsNullOrEmpty(route))
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(route);
System.Xml.XmlNamespaceManager xmlnsManager = new System.Xml.XmlNamespaceManager(xmldoc.NameTable);
xmlnsManager.AddNamespace("sm", "http://www.topografix.com/GPX/1/1");
 
XmlNodeList wpts = xmldoc.SelectNodes("/sm:gpx/sm:wpt", xmlnsManager);
if(wpts != null && wpts.Count > 0)
{
ret = DirectionsStatusCode.OK;
 
direction = new GDirections();
direction.Route = new List<PointLatLng>();
 
foreach(XmlNode w in wpts)
{
double lat = double.Parse(w.Attributes["lat"].InnerText, CultureInfo.InvariantCulture);
double lng = double.Parse(w.Attributes["lon"].InnerText, CultureInfo.InvariantCulture);
direction.Route.Add(new PointLatLng(lat, lng));
}
 
if(direction.Route.Count > 0)
{
direction.StartLocation = direction.Route[0];
direction.EndLocation = direction.Route[direction.Route.Count - 1];
}
 
XmlNode n = xmldoc.SelectSingleNode("/sm:gpx/sm:metadata/sm:copyright/sm:license", xmlnsManager);
if(n != null)
{
direction.Copyrights = n.InnerText;
}
 
n = xmldoc.SelectSingleNode("/sm:gpx/sm:extensions/sm:distance", xmlnsManager);
if(n != null)
{
direction.Distance = n.InnerText + "m";
}
 
n = xmldoc.SelectSingleNode("/sm:gpx/sm:extensions/sm:time", xmlnsManager);
if(n != null)
{
direction.Duration = n.InnerText + "s";
}
 
n = xmldoc.SelectSingleNode("/sm:gpx/sm:extensions/sm:start", xmlnsManager);
if(n != null)
{
direction.StartAddress = n.InnerText;
}
 
n = xmldoc.SelectSingleNode("/sm:gpx/sm:extensions/sm:end", xmlnsManager);
if(n != null)
{
direction.EndAddress = n.InnerText;
}
 
wpts = xmldoc.SelectNodes("/sm:gpx/sm:rte/sm:rtept", xmlnsManager);
if(wpts != null && wpts.Count > 0)
{
direction.Steps = new List<GDirectionStep>();
 
foreach(XmlNode w in wpts)
{
GDirectionStep step = new GDirectionStep();
 
double lat = double.Parse(w.Attributes["lat"].InnerText, CultureInfo.InvariantCulture);
double lng = double.Parse(w.Attributes["lon"].InnerText, CultureInfo.InvariantCulture);
 
step.StartLocation = new PointLatLng(lat, lng);
 
XmlNode nn = w.SelectSingleNode("sm:desc", xmlnsManager);
if(nn != null)
{
step.HtmlInstructions = nn.InnerText;
}
 
nn = w.SelectSingleNode("sm:extensions/sm:distance-text", xmlnsManager);
if(nn != null)
{
step.Distance = nn.InnerText;
}
 
nn = w.SelectSingleNode("sm:extensions/sm:time", xmlnsManager);
if(nn != null)
{
step.Duration = nn.InnerText + "s";
}
 
direction.Steps.Add(step);
}
}
}
}
}
catch(Exception ex)
{
ret = DirectionsStatusCode.ExceptionInCode;
direction = null;
Debug.WriteLine("GetDirectionsUrl: " + ex);
}
 
return ret;
}
 
#endregion
 
#endregion
}
 
/// <summary>
/// CloudMadeMap demo provider, http://maps.cloudmade.com/
/// </summary>
public class CloudMadeMapProvider : CloudMadeMapProviderBase
{
public static readonly CloudMadeMapProvider Instance;
 
CloudMadeMapProvider()
{
Key = "5937c2bd907f4f4a92d8980a7c666ac0"; // demo key of CloudMade
StyleID = 45363; // grab your style here http://maps.cloudmade.com/?styleId=45363
}
 
static CloudMadeMapProvider()
{
Instance = new CloudMadeMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("00403A36-725F-4BC4-934F-BFC1C164D003");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "CloudMade, Demo";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, ServerLetters[GetServerNum(pos, 3)], Key, StyleID, (DoubleResolution ? DoubleResolutionString : string.Empty), zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://{0}.tile.cloudmade.com/{1}/{2}{3}/256/{4}/{5}/{6}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Etc/LatviaMapProvider.cs
0,0 → 1,119

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
public abstract class LatviaMapProviderBase : GMapProvider
{
public LatviaMapProviderBase()
{
RefererUrl = "http://www.ikarte.lv/default.aspx?lang=en";
Copyright = string.Format("©{0} Hnit-Baltic - Map data ©{0} LR Valsts zemes dieniests, SIA Envirotech", DateTime.Today.Year);
MaxZoom = 11;
Area = new RectLatLng(58.0794870805093, 20.3286067123543, 7.90883164336887, 2.506129113082);
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return LKS92Projection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
}
 
/// <summary>
/// LatviaMap provider, http://www.ikarte.lv/
/// </summary>
public class LatviaMapProvider : LatviaMapProviderBase
{
public static readonly LatviaMapProvider Instance;
 
LatviaMapProvider()
{
}
 
static LatviaMapProvider()
{
Instance = new LatviaMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("2A21CBB1-D37C-458D-905E-05F19536EF1F");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "LatviaMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://www.maps.lt/cache/ikartelv/map/_alllayers/L03/R00000037/C00000053.png
// http://www.maps.lt/arcgiscache/ikartelv/map/_alllayers/L02/R0000001c/C0000002a.png
// http://services.maps.lt/mapsk_services/rest/services/ikartelv/MapServer/tile/5/271/416.png?cl=ikrlv
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://services.maps.lt/mapsk_services/rest/services/ikartelv/MapServer/tile/{0}/{1}/{2}.png?cl=ikrlv";
//static readonly string UrlFormat = "http://www.maps.lt/arcgiscache/ikartelv/map/_alllayers/L{0:00}/R{1:x8}/C{2:x8}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Etc/MapBenderWMSProvider.cs
0,0 → 1,92

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
using System.Globalization;
 
/// <summary>
/// MapBender provider, WMS demo http://www.mapbender.org/
/// </summary>
public class MapBenderWMSProvider : GMapProvider
{
public static readonly MapBenderWMSProvider Instance;
 
MapBenderWMSProvider()
{
}
 
static MapBenderWMSProvider()
{
Instance = new MapBenderWMSProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("45742F8D-B552-4CAF-89AE-F20951BBDB2B");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "MapBender, WMS demo";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
var px1 = Projection.FromTileXYToPixel(pos);
var px2 = px1;
 
px1.Offset(0, Projection.TileSize.Height);
PointLatLng p1 = Projection.FromPixelToLatLng(px1, zoom);
 
px2.Offset(Projection.TileSize.Width, 0);
PointLatLng p2 = Projection.FromPixelToLatLng(px2, zoom);
 
var ret = string.Format(CultureInfo.InvariantCulture, UrlFormat, p1.Lng, p1.Lat, p2.Lng, p2.Lat, Projection.TileSize.Width, Projection.TileSize.Height);
 
return ret;
}
 
static readonly string UrlFormat = "http://mapbender.wheregroup.com/cgi-bin/mapserv?map=/data/umn/osm/osm_basic.map&VERSION=1.1.1&REQUEST=GetMap&SERVICE=WMS&LAYERS=OSM_Basic&styles=&bbox={0},{1},{2},{3}&width={4}&height={5}&srs=EPSG:4326&format=image/png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Etc/SpainMapProvider.cs
0,0 → 1,93

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
/// <summary>
/// SpainMap provider, http://sigpac.mapa.es/fega/visor/
/// </summary>
public class SpainMapProvider : GMapProvider
{
public static readonly SpainMapProvider Instance;
 
SpainMapProvider()
{
Copyright = string.Format("©{0} SIGPAC", DateTime.Today.Year);
MinZoom = 5;
Area = new RectLatLng(43.8741381814747, -9.700927734375, 14.34814453125, 7.8605775962932);
}
 
static SpainMapProvider()
{
Instance = new SpainMapProvider();
}
 
readonly string[] levels =
{
"0", "1", "2", "3", "4",
"MTNSIGPAC",
"MTN2000", "MTN2000", "MTN2000", "MTN2000", "MTN2000",
"MTN200", "MTN200", "MTN200",
"MTN25", "MTN25",
"ORTOFOTOS","ORTOFOTOS","ORTOFOTOS","ORTOFOTOS"
};
 
#region GMapProvider Members
 
readonly Guid id = new Guid("7B70ABB0-1265-4D34-9442-F0788F4F689F");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "SpainMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, levels[zoom], zoom, pos.X, ((2 << zoom - 1) - pos.Y - 1));
}
 
static readonly string UrlFormat = "http://sigpac.mapa.es/kmlserver/raster/{0}@3785/{1}.{2}.{3}.img";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Etc/SwedenMapProvider.cs
0,0 → 1,385

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
public abstract class SwedenMapProviderBase : GMapProvider
{
public SwedenMapProviderBase()
{
RefererUrl = "https://kso.etjanster.lantmateriet.se/?lang=en";
Copyright = string.Format("©{0} Lantmäteriet", DateTime.Today.Year);
MaxZoom = 11;
//Area = new RectLatLng(58.0794870805093, 20.3286067123543, 7.90883164336887, 2.506129113082);
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return SWEREF99_TMProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
}
 
/// <summary>
/// SwedenMap provider, https://kso.etjanster.lantmateriet.se/?lang=en#
/// </summary>
public class SwedenMapProvider : SwedenMapProviderBase
{
public static readonly SwedenMapProvider Instance;
 
SwedenMapProvider()
{
}
 
static SwedenMapProvider()
{
Instance = new SwedenMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("40890A96-6E82-4FA7-90A3-73D66B974F63");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "SwedenMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// https://kso.etjanster.lantmateriet.se/karta/topowebb/v1/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=topowebb&STYLE=default&TILEMATRIXSET=3006&TILEMATRIX=2&TILEROW=6&TILECOL=7&FORMAT=image%2Fpng
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://kso.etjanster.lantmateriet.se/karta/topowebb/v1/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=topowebb&STYLE=default&TILEMATRIXSET=3006&TILEMATRIX={0}&TILEROW={1}&TILECOL={2}&FORMAT=image%2Fpng";
}
}
 
/*
https://kso.etjanster.lantmateriet.se/?lang=en#
 
{
"analytics" : {
"account" : "UA-47513746-2"
},
"ortofotoServiceUrl" : "https://services-ver.lantmateriet.se/distribution/produkter/metabild/v1/ortofoto",
"metadata" : {
"password" : "wllZIV50DH2b",
"username" : "lant0181"
},
"minFastighetUrl" : "https://etjanster.lantmateriet.se/nyaminfastighet/?mode=TEXT&amp;module=sercxi-minafastigheter-module",
"enableKartvaljare" : false,
"frwebburl" : "https://etjanster.lantmateriet.se/frwebb/protect/index.jsp?information=FRW019&query=",
"previewServiceUrl" : "https://services-ver.lantmateriet.se/distribution/produkter/tumnagel/v1/",
"minaFastighetsArendenUrl" : "https://etjanster.lantmateriet.se/minafastighetsarenden",
"flygbildServiceUrl" : "https://services-ver.lantmateriet.se/distribution/produkter/metabild/v1/flygbild"
}
 
PROJCS["SWEREF99 TM",
GEOGCS["SWEREF99",
DATUM["SWEREF99",
SPHEROID["GRS 1980",6378137,298.257222101,
AUTHORITY["EPSG","7019"]],
TOWGS84[0,0,0,0,0,0,0],
AUTHORITY["EPSG","6619"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4619"]],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",15],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
AUTHORITY["EPSG","3006"],
AXIS["y",EAST],
AXIS["x",NORTH]]
 
{
"defaultLayer" : "topowebbwmts",
"extent" : {
"left" : -1200000,
"bottom" : 4700000,
"right" : 2600000,
"top" : 8500000
},
"projection" : "EPSG:3006",
"units" : "m",
"allOverlays" : true,
"resolutions" : [4096.0, 2048.0, 1024.0, 512.0, 256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.5, 0.25, 0.15, 0.1, 0.05, 0.01],
"initPosition" : {
"n" : 6607899,
"e" : 564931,
"zoom" : 2
},
"layers" : [{
"id" : "topowebbhydrografi",
"protocol" : "WMS",
"url" : ["https://kso.etjanster.lantmateriet.se/karta/topowebb-skikt/wms/v1.1"],
"exceptions" : "application/vnd.ogc.se_xml",
"format" : "image/png",
"layers" : "hydrografi",
"name" : "Hydrografi",
"fullmap" : "false",
"enabled" : "true",
"sheetFamily" : "",
"maxResolution" : 0.0,
"minResolution" : 0.0,
"visible" : "true",
"tileSize" : 512,
"maxScale" : 0,
"minScale" : 0,
"removeLayer" : "false",
"styles" : []
}, {
"id" : "orto",
"protocol" : "WMS",
"url" : ["https://kso.etjanster.lantmateriet.se/karta/ortofoto/wms/v1"],
"exceptions" : "application/vnd.ogc.se_xml",
"format" : "image/png",
"layers" : "orto",
"name" : "Ortofoton 0.5 m/pixel",
"fullmap" : "true",
"enabled" : "true",
"sheetFamily" : "",
"maxResolution" : 0.0,
"minResolution" : 0.0,
"visible" : "true",
"tileSize" : 512,
"maxScale" : 0,
"minScale" : 0,
"removeLayer" : "false",
"styles" : []
}, {
"id" : "topowebbwmts",
"protocol" : "WMTS",
"url" : ["https://kso.etjanster.lantmateriet.se/karta/topowebb/v1/wmts"],
"exceptions" : "application/vnd.ogc.se_xml",
"format" : "image/png",
"layers" : "topowebb",
"name" : "Topografisk webbkarta (cache)",
"fullmap" : "true",
"enabled" : "true",
"sheetFamily" : "",
"maxResolution" : 4096.0,
"minResolution" : 0.5,
"visible" : "false",
"tileSize" : 512,
"maxScale" : 0,
"minScale" : 0,
"removeLayer" : "false",
"styles" : []
}, {
"id" : "topowebbwms",
"protocol" : "WMS",
"url" : ["https://kso.etjanster.lantmateriet.se/karta/topowebb/wms/v1"],
"exceptions" : "application/vnd.ogc.se_xml",
"format" : "image/png",
"layers" : "topowebbkartan",
"name" : "Topografisk webbkarta",
"fullmap" : "true",
"enabled" : "true",
"sheetFamily" : "",
"maxResolution" : 0.0,
"minResolution" : 0.0,
"visible" : "true",
"tileSize" : 512,
"maxScale" : 0,
"minScale" : 0,
"removeLayer" : "false",
"styles" : []
}, {
"id" : "terrangskuggning",
"protocol" : "WMS",
"url" : ["https://kso.etjanster.lantmateriet.se/karta/hojdmodell/wms/v1"],
"exceptions" : "application/vnd.ogc.se_xml",
"format" : "image/png",
"layers" : "terrangskuggning",
"name" : "Terrängskuggning",
"fullmap" : "false",
"enabled" : "true",
"sheetFamily" : "",
"maxResolution" : 0.0,
"minResolution" : 0.0,
"visible" : "false",
"tileSize" : 2048,
"maxScale" : 0,
"minScale" : 0,
"removeLayer" : "false",
"styles" : []
}, {
"id" : "terrangkartan",
"protocol" : "WMS",
"url" : ["https://kso.etjanster.lantmateriet.se/karta/allmannakartor/wms/v1"],
"exceptions" : "application/vnd.ogc.se_xml",
"format" : "image/png",
"layers" : "terrangkartan",
"name" : "Terrängkartan",
"fullmap" : "true",
"enabled" : "true",
"sheetFamily" : "SE50",
"maxResolution" : 0.0,
"minResolution" : 0.0,
"visible" : "false",
"tileSize" : 512,
"maxScale" : 0,
"minScale" : 0,
"removeLayer" : "false",
"styles" : []
}, {
"id" : "fjallkartan",
"protocol" : "WMS",
"url" : ["https://kso.etjanster.lantmateriet.se/karta/allmannakartor/wms/v1"],
"exceptions" : "application/vnd.ogc.se_xml",
"format" : "image/png",
"layers" : "fjallkartan",
"name" : "Fjällkartan 1:100 000",
"fullmap" : "false",
"enabled" : "true",
"sheetFamily" : "SE100FJ",
"maxResolution" : 0.0,
"minResolution" : 0.0,
"visible" : "false",
"tileSize" : 512,
"maxScale" : 0,
"minScale" : 0,
"removeLayer" : "false",
"styles" : []
}, {
"id" : "vagkartan",
"protocol" : "WMS",
"url" : ["https://kso.etjanster.lantmateriet.se/karta/allmannakartor/wms/v1"],
"exceptions" : "application/vnd.ogc.se_xml",
"format" : "image/png",
"layers" : "vagkartan",
"name" : "Vägkartan",
"fullmap" : "true",
"enabled" : "true",
"sheetFamily" : "",
"maxResolution" : 0.0,
"minResolution" : 0.0,
"visible" : "false",
"tileSize" : 512,
"maxScale" : 0,
"minScale" : 0,
"removeLayer" : "false",
"styles" : []
}, {
"id" : "oversiktskartan",
"protocol" : "WMS",
"url" : ["https://kso.etjanster.lantmateriet.se/karta/geodata-intern/wms/v1"],
"exceptions" : "application/vnd.ogc.se_xml",
"format" : "image/png",
"layers" : "oversiktskartan",
"name" : "Översiktskartan",
"fullmap" : "true",
"enabled" : "true",
"sheetFamily" : "SE250",
"maxResolution" : 0.0,
"minResolution" : 0.0,
"visible" : "false",
"tileSize" : 512,
"maxScale" : 0,
"minScale" : 0,
"removeLayer" : "false",
"styles" : []
}, {
"id" : "sverigekartan",
"protocol" : "WMS",
"url" : ["https://kso.etjanster.lantmateriet.se/karta/allmannakartor/wms/v1"],
"exceptions" : "application/vnd.ogc.se_xml",
"format" : "image/png",
"layers" : "sverigekartan",
"name" : "Sverigekartan",
"fullmap" : "true",
"enabled" : "true",
"sheetFamily" : "",
"maxResolution" : 0.0,
"minResolution" : 0.0,
"visible" : "false",
"tileSize" : 512,
"maxScale" : 0,
"minScale" : 0,
"removeLayer" : "false",
"styles" : []
}
],
"profiles" : "[]",
"touchProfiles" : "[]",
"noAuthProfiles" : "[{'value':'default_background_noauth','text':'Topografisk','optgroup':'Standard'},{'value':'default_orto_noauth','text':'Ortofoto','optgroup':'Standard'},{'value':'default_terrangkartan_noauth','text':'Terrängkartan','optgroup':'Standard'},{'value':'default_fjallkartan_noauth','text':'Fjällkartan','optgroup':'Standard'},{'value':'default_vagkartan_noauth','text':'Vägkartan','optgroup':'Standard'},{'value':'default_sverigekartan_noauth','text':'Sverigekartan','optgroup':'Standard'},{'value':'default_terrangskuggning_noauth','text':'Terrängskuggning','optgroup':'Standard'}]",
"profileDescriptions" : {
"default_background" : "{'layers':[{'id':'topowebbwmts','index':0,'group':'','enabled':true,'visible':true,'style':'default','opacity':1.0}],'version':4}",
"default_terrangkartan_noauth" : "{'layers':[{'id':'terrangkartan','index':0,'group':'','enabled':true,'visible':true,'style':'default','opacity':1.0}],'version':4}",
"default_vagkartan_noauth" : "{'layers':[{'id':'vagkartan','index':0,'group':'','enabled':true,'visible':true,'style':'default','opacity':1.0}],'version':4}",
"default_orto_noauth" : "{'layers':[{'id':'orto025','index':0,'group':'','enabled':true,'visible':true,'style':'default','opacity':1.0},{'id':'orto','index':1,'group':'','enabled':true,'visible':true,'style':'default','opacity':1.0}],'version':4}",
"default_fjallkartan_noauth" : "{'layers':[{'id':'fjallkartan','index':0,'group':'','enabled':true,'visible':true,'style':'default','opacity':1.0}],'version':4}",
"default_sverigekartan_noauth" : "{'layers':[{'id':'sverigekartan','index':0,'group':'','enabled':true,'visible':true,'style':'default','opacity':1.0}],'version':4}",
"default_terrangskuggning_noauth" : "{'layers':[{'id':'topowebbhydrografi','index':0,'group':'','enabled':true,'visible':true,'style':'default','opacity':1.0},{'id':'terrangskuggning','index':1,'group':'','enabled':true,'visible':true,'style':'default','opacity':1.0}],'version':4}",
"default_background_noauth" : "{'layers':[{'id':'topowebbwmts','index':0,'group':'','enabled':true,'visible':true,'style':'default','opacity':1.0}],'version':4}"
}
}
*/
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Etc/TurkeyMapProvider.cs
0,0 → 1,99

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
/// <summary>
/// TurkeyMap provider, http://maps.pergo.com.tr/
/// </summary>
public class TurkeyMapProvider : GMapProvider
{
public static readonly TurkeyMapProvider Instance;
 
TurkeyMapProvider()
{
Copyright = string.Format("©{0} Pergo - Map data ©{0} Fideltus Advanced Technology", DateTime.Today.Year);
Area = new RectLatLng(42.5830078125, 25.48828125, 19.05029296875, 6.83349609375);
InvertedAxisY = true;
}
 
static TurkeyMapProvider()
{
Instance = new TurkeyMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("EDE895BD-756D-4BE4-8D03-D54DD8856F1D");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "TurkeyMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://{domain}/{layerName}/{zoomLevel}/{first3LetterOfTileX}/{second3LetterOfTileX}/{third3LetterOfTileX}/{first3LetterOfTileY}/{second3LetterOfTileY}/{third3LetterOfTileXY}.png
 
// http://map3.pergo.com.tr/tile/00/000/000/001/000/000/000.png
// That means: Zoom Level: 0 TileX: 1 TileY: 0
 
// http://domain/tile/14/000/019/371/000/011/825.png
// That means: Zoom Level: 14 TileX: 19371 TileY:11825
 
// updated version
// http://map1.pergo.com.tr/publish/tile/tile9913/06/000/000/038/000/000/039.png
 
string x = pos.X.ToString(Zeros).Insert(3, Slash).Insert(7, Slash); // - 000/000/001
string y = pos.Y.ToString(Zeros).Insert(3, Slash).Insert(7, Slash); // - 000/000/000
 
return string.Format(UrlFormat, GetServerNum(pos, 3), zoom, x, y);
}
 
static readonly string Zeros = "000000000";
static readonly string Slash = "/";
static readonly string UrlFormat = "http://map{0}.pergo.com.tr/publish/tile/tile9913/{1:00}/{2}/{3}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Etc/WikiMapiaMapProvider.cs
0,0 → 1,127

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
public abstract class WikiMapiaMapProviderBase : GMapProvider
{
public WikiMapiaMapProviderBase()
{
MaxZoom = 22;
RefererUrl = "http://wikimapia.org/";
Copyright = string.Format("© WikiMapia.org - Map data ©{0} WikiMapia", DateTime.Today.Year);
}
 
#region GMapProvider Members
 
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
public override GMapProvider[] Overlays
{
get
{
throw new NotImplementedException();
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
 
#endregion
 
public static int GetServerNum(GPoint pos)
{
return (int)(pos.X % 4 + (pos.Y % 4) * 4);
}
}
 
/// <summary>
/// WikiMapiaMap provider, http://wikimapia.org/
/// </summary>
public class WikiMapiaMapProvider : WikiMapiaMapProviderBase
{
public static readonly WikiMapiaMapProvider Instance;
 
WikiMapiaMapProvider()
{
}
 
static WikiMapiaMapProvider()
{
Instance = new WikiMapiaMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("7974022B-1AA6-41F1-8D01-F49940E4B48C");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "WikiMapiaMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, GetServerNum(pos), pos.X, pos.Y, zoom);
}
 
static readonly string UrlFormat = "http://i{0}.wikimapia.org/?x={1}&y={2}&zoom={3}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/GMapProvider.cs
0,0 → 1,703

namespace GMap.NET.MapProviders
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net;
using GMap.NET.Internals;
using GMap.NET.Projections;
using System.Text;
using System.Security.Cryptography;
 
/// <summary>
/// providers that are already build in
/// </summary>
public class GMapProviders
{
static GMapProviders()
{
list = new List<GMapProvider>();
 
Type type = typeof(GMapProviders);
foreach (var p in type.GetFields())
{
var v = p.GetValue(null) as GMapProvider; // static classes cannot be instanced, so use null...
if (v != null)
{
list.Add(v);
}
}
 
Hash = new Dictionary<Guid, GMapProvider>();
foreach (var p in list)
{
Hash.Add(p.Id, p);
}
 
DbHash = new Dictionary<int, GMapProvider>();
foreach (var p in list)
{
DbHash.Add(p.DbId, p);
}
}
 
GMapProviders()
{
}
 
public static readonly EmptyProvider EmptyProvider = EmptyProvider.Instance;
 
public static readonly OpenStreetMapProvider OpenStreetMap = OpenStreetMapProvider.Instance;
 
public static readonly OpenStreet4UMapProvider OpenStreet4UMap = OpenStreet4UMapProvider.Instance;
 
public static readonly OpenCycleMapProvider OpenCycleMap = OpenCycleMapProvider.Instance;
public static readonly OpenCycleLandscapeMapProvider OpenCycleLandscapeMap = OpenCycleLandscapeMapProvider.Instance;
public static readonly OpenCycleTransportMapProvider OpenCycleTransportMap = OpenCycleTransportMapProvider.Instance;
 
public static readonly OpenStreetMapQuestProvider OpenStreetMapQuest = OpenStreetMapQuestProvider.Instance;
public static readonly OpenStreetMapQuestSatteliteProvider OpenStreetMapQuestSattelite = OpenStreetMapQuestSatteliteProvider.Instance;
public static readonly OpenStreetMapQuestHybridProvider OpenStreetMapQuestHybrid = OpenStreetMapQuestHybridProvider.Instance;
 
public static readonly OpenSeaMapHybridProvider OpenSeaMapHybrid = OpenSeaMapHybridProvider.Instance;
 
#if OpenStreetOsm
public static readonly OpenStreetOsmProvider OpenStreetOsm = OpenStreetOsmProvider.Instance;
#endif
 
#if OpenStreetMapSurfer
public static readonly OpenStreetMapSurferProvider OpenStreetMapSurfer = OpenStreetMapSurferProvider.Instance;
public static readonly OpenStreetMapSurferTerrainProvider OpenStreetMapSurferTerrain = OpenStreetMapSurferTerrainProvider.Instance;
#endif
public static readonly WikiMapiaMapProvider WikiMapiaMap = WikiMapiaMapProvider.Instance;
 
public static readonly BingMapProvider BingMap = BingMapProvider.Instance;
public static readonly BingSatelliteMapProvider BingSatelliteMap = BingSatelliteMapProvider.Instance;
public static readonly BingHybridMapProvider BingHybridMap = BingHybridMapProvider.Instance;
 
public static readonly YahooMapProvider YahooMap = YahooMapProvider.Instance;
public static readonly YahooSatelliteMapProvider YahooSatelliteMap = YahooSatelliteMapProvider.Instance;
public static readonly YahooHybridMapProvider YahooHybridMap = YahooHybridMapProvider.Instance;
 
public static readonly GoogleMapProvider GoogleMap = GoogleMapProvider.Instance;
public static readonly GoogleSatelliteMapProvider GoogleSatelliteMap = GoogleSatelliteMapProvider.Instance;
public static readonly GoogleHybridMapProvider GoogleHybridMap = GoogleHybridMapProvider.Instance;
public static readonly GoogleTerrainMapProvider GoogleTerrainMap = GoogleTerrainMapProvider.Instance;
 
public static readonly GoogleChinaMapProvider GoogleChinaMap = GoogleChinaMapProvider.Instance;
public static readonly GoogleChinaSatelliteMapProvider GoogleChinaSatelliteMap = GoogleChinaSatelliteMapProvider.Instance;
public static readonly GoogleChinaHybridMapProvider GoogleChinaHybridMap = GoogleChinaHybridMapProvider.Instance;
public static readonly GoogleChinaTerrainMapProvider GoogleChinaTerrainMap = GoogleChinaTerrainMapProvider.Instance;
 
public static readonly GoogleKoreaMapProvider GoogleKoreaMap = GoogleKoreaMapProvider.Instance;
public static readonly GoogleKoreaSatelliteMapProvider GoogleKoreaSatelliteMap = GoogleKoreaSatelliteMapProvider.Instance;
public static readonly GoogleKoreaHybridMapProvider GoogleKoreaHybridMap = GoogleKoreaHybridMapProvider.Instance;
 
public static readonly NearMapProvider NearMap = NearMapProvider.Instance;
public static readonly NearSatelliteMapProvider NearSatelliteMap = NearSatelliteMapProvider.Instance;
public static readonly NearHybridMapProvider NearHybridMap = NearHybridMapProvider.Instance;
 
public static readonly OviMapProvider OviMap = OviMapProvider.Instance;
public static readonly OviSatelliteMapProvider OviSatelliteMap = OviSatelliteMapProvider.Instance;
public static readonly OviHybridMapProvider OviHybridMap = OviHybridMapProvider.Instance;
public static readonly OviTerrainMapProvider OviTerrainMap = OviTerrainMapProvider.Instance;
 
public static readonly YandexMapProvider YandexMap = YandexMapProvider.Instance;
public static readonly YandexSatelliteMapProvider YandexSatelliteMap = YandexSatelliteMapProvider.Instance;
public static readonly YandexHybridMapProvider YandexHybridMap = YandexHybridMapProvider.Instance;
 
public static readonly LithuaniaMapProvider LithuaniaMap = LithuaniaMapProvider.Instance;
public static readonly LithuaniaReliefMapProvider LithuaniaReliefMap = LithuaniaReliefMapProvider.Instance;
public static readonly Lithuania3dMapProvider Lithuania3dMap = Lithuania3dMapProvider.Instance;
public static readonly LithuaniaOrtoFotoMapProvider LithuaniaOrtoFotoMap = LithuaniaOrtoFotoMapProvider.Instance;
public static readonly LithuaniaOrtoFotoOldMapProvider LithuaniaOrtoFotoOldMap = LithuaniaOrtoFotoOldMapProvider.Instance;
public static readonly LithuaniaHybridMapProvider LithuaniaHybridMap = LithuaniaHybridMapProvider.Instance;
public static readonly LithuaniaHybridOldMapProvider LithuaniaHybridOldMap = LithuaniaHybridOldMapProvider.Instance;
public static readonly LithuaniaTOP50 LithuaniaTOP50Map = LithuaniaTOP50.Instance;
 
public static readonly LatviaMapProvider LatviaMap = LatviaMapProvider.Instance;
 
public static readonly MapBenderWMSProvider MapBenderWMSdemoMap = MapBenderWMSProvider.Instance;
 
public static readonly TurkeyMapProvider TurkeyMap = TurkeyMapProvider.Instance;
 
public static readonly CloudMadeMapProvider CloudMadeMap = CloudMadeMapProvider.Instance;
 
public static readonly SpainMapProvider SpainMap = SpainMapProvider.Instance;
 
public static readonly CzechMapProviderOld CzechOldMap = CzechMapProviderOld.Instance;
public static readonly CzechSatelliteMapProviderOld CzechSatelliteOldMap = CzechSatelliteMapProviderOld.Instance;
public static readonly CzechHybridMapProviderOld CzechHybridOldMap = CzechHybridMapProviderOld.Instance;
public static readonly CzechTuristMapProviderOld CzechTuristOldMap = CzechTuristMapProviderOld.Instance;
public static readonly CzechHistoryMapProviderOld CzechHistoryOldMap = CzechHistoryMapProviderOld.Instance;
 
public static readonly CzechMapProvider CzechMap = CzechMapProvider.Instance;
public static readonly CzechSatelliteMapProvider CzechSatelliteMap = CzechSatelliteMapProvider.Instance;
public static readonly CzechHybridMapProvider CzechHybridMap = CzechHybridMapProvider.Instance;
public static readonly CzechTuristMapProvider CzechTuristMap = CzechTuristMapProvider.Instance;
public static readonly CzechTuristWinterMapProvider CzechTuristWinterMap = CzechTuristWinterMapProvider.Instance;
public static readonly CzechHistoryMapProvider CzechHistoryMap = CzechHistoryMapProvider.Instance;
public static readonly CzechGeographicMapProvider CzechGeographicMap = CzechGeographicMapProvider.Instance;
public static readonly ArcGIS_Imagery_World_2D_MapProvider ArcGIS_Imagery_World_2D_Map = ArcGIS_Imagery_World_2D_MapProvider.Instance;
public static readonly ArcGIS_ShadedRelief_World_2D_MapProvider ArcGIS_ShadedRelief_World_2D_Map = ArcGIS_ShadedRelief_World_2D_MapProvider.Instance;
public static readonly ArcGIS_StreetMap_World_2D_MapProvider ArcGIS_StreetMap_World_2D_Map = ArcGIS_StreetMap_World_2D_MapProvider.Instance;
public static readonly ArcGIS_Topo_US_2D_MapProvider ArcGIS_Topo_US_2D_Map = ArcGIS_Topo_US_2D_MapProvider.Instance;
 
public static readonly ArcGIS_World_Physical_MapProvider ArcGIS_World_Physical_Map = ArcGIS_World_Physical_MapProvider.Instance;
public static readonly ArcGIS_World_Shaded_Relief_MapProvider ArcGIS_World_Shaded_Relief_Map = ArcGIS_World_Shaded_Relief_MapProvider.Instance;
public static readonly ArcGIS_World_Street_MapProvider ArcGIS_World_Street_Map = ArcGIS_World_Street_MapProvider.Instance;
public static readonly ArcGIS_World_Terrain_Base_MapProvider ArcGIS_World_Terrain_Base_Map = ArcGIS_World_Terrain_Base_MapProvider.Instance;
public static readonly ArcGIS_World_Topo_MapProvider ArcGIS_World_Topo_Map = ArcGIS_World_Topo_MapProvider.Instance;
 
public static readonly ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_MapProvider ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_Map = ArcGIS_DarbAE_Q2_2011_NAVTQ_Eng_V5_MapProvider.Instance;
 
public static readonly SwedenMapProvider SwedenMap = SwedenMapProvider.Instance;
 
static List<GMapProvider> list;
 
/// <summary>
/// get all instances of the supported providers
/// </summary>
public static List<GMapProvider> List
{
get
{
return list;
}
}
 
static Dictionary<Guid, GMapProvider> Hash;
 
public static GMapProvider TryGetProvider(Guid id)
{
GMapProvider ret;
if (Hash.TryGetValue(id, out ret))
{
return ret;
}
return null;
}
 
static Dictionary<int, GMapProvider> DbHash;
 
public static GMapProvider TryGetProvider(int DbId)
{
GMapProvider ret;
if (DbHash.TryGetValue(DbId, out ret))
{
return ret;
}
return null;
}
}
 
/// <summary>
/// base class for each map provider
/// </summary>
public abstract class GMapProvider
{
/// <summary>
/// unique provider id
/// </summary>
public abstract Guid Id
{
get;
}
 
/// <summary>
/// provider name
/// </summary>
public abstract string Name
{
get;
}
 
/// <summary>
/// provider projection
/// </summary>
public abstract PureProjection Projection
{
get;
}
 
/// <summary>
/// provider overlays
/// </summary>
public abstract GMapProvider[] Overlays
{
get;
}
 
/// <summary>
/// gets tile image using implmented provider
/// </summary>
/// <param name="pos"></param>
/// <param name="zoom"></param>
/// <returns></returns>
public abstract PureImage GetTileImage(GPoint pos, int zoom);
 
static readonly List<GMapProvider> MapProviders = new List<GMapProvider>();
 
protected GMapProvider()
{
using (var HashProvider = new SHA1CryptoServiceProvider())
{
DbId = Math.Abs(BitConverter.ToInt32(HashProvider.ComputeHash(Id.ToByteArray()), 0));
}
 
if (MapProviders.Exists(p => p.Id == Id || p.DbId == DbId))
{
throw new Exception("such provider id already exsists, try regenerate your provider guid...");
}
MapProviders.Add(this);
}
 
static GMapProvider()
{
WebProxy = EmptyWebProxy.Instance;
}
 
bool isInitialized = false;
 
/// <summary>
/// was provider initialized
/// </summary>
public bool IsInitialized
{
get
{
return isInitialized;
}
internal set
{
isInitialized = value;
}
}
 
/// <summary>
/// called before first use
/// </summary>
public virtual void OnInitialized()
{
// nice place to detect current provider version
}
 
/// <summary>
/// id for database, a hash of provider guid
/// </summary>
public readonly int DbId;
 
/// <summary>
/// area of map
/// </summary>
public RectLatLng? Area;
 
/// <summary>
/// minimum level of zoom
/// </summary>
public int MinZoom;
 
/// <summary>
/// maximum level of zoom
/// </summary>
public int? MaxZoom = 17;
 
/// <summary>
/// proxy for net access
/// </summary>
public static IWebProxy WebProxy;
 
/// <summary>
/// Connect trough a SOCKS 4/5 proxy server
/// </summary>
public static bool IsSocksProxy = false;
 
/// <summary>
/// NetworkCredential for tile http access
/// </summary>
public static ICredentials Credential;
 
/// <summary>
/// Gets or sets the value of the User-agent HTTP header.
/// It's pseudo-randomized to avoid blockages...
/// </summary>
public static string UserAgent = string.Format("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:{0}.0) Gecko/{2}{3:00}{4:00} Firefox/{0}.0.{1}", Stuff.random.Next(3, 14), Stuff.random.Next(1, 10), Stuff.random.Next(DateTime.Today.Year - 4, DateTime.Today.Year), Stuff.random.Next(12), Stuff.random.Next(30));
 
/// <summary>
/// timeout for provider connections
/// </summary>
#if !PocketPC
public static int TimeoutMs = 5 * 1000;
#else
public static int TimeoutMs = 44 * 1000;
#endif
/// <summary>
/// Gets or sets the value of the Referer HTTP header.
/// </summary>
public string RefererUrl = string.Empty;
 
public string Copyright = string.Empty;
 
/// <summary>
/// true if tile origin at BottomLeft, WMS-C
/// </summary>
public bool InvertedAxisY = false;
 
static string languageStr = "en";
public static string LanguageStr
{
get
{
return languageStr;
}
}
static LanguageType language = LanguageType.English;
 
/// <summary>
/// map language
/// </summary>
public static LanguageType Language
{
get
{
return language;
}
set
{
language = value;
languageStr = Stuff.EnumToString(Language);
}
}
 
/// <summary>
/// to bypass the cache, set to true
/// </summary>
public bool BypassCache = false;
 
/// <summary>
/// internal proxy for image managment
/// </summary>
internal static PureImageProxy TileImageProxy;
 
static readonly string requestAccept = "*/*";
static readonly string responseContentType = "image";
 
protected virtual bool CheckTileImageHttpResponse(WebResponse response)
{
//Debug.WriteLine(response.StatusCode + "/" + response.StatusDescription + "/" + response.ContentType + " -> " + response.ResponseUri);
return response.ContentType.Contains(responseContentType);
}
string Authorization = string.Empty;
/// <summary>
/// http://blog.kowalczyk.info/article/at3/Forcing-basic-http-authentication-for-HttpWebReq.html
/// </summary>
/// <param name="userName"></param>
/// <param name="userPassword"></param>
public void ForceBasicHttpAuthentication(string userName, string userPassword)
{
Authorization = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(userName + ":" + userPassword));
}
 
protected PureImage GetTileImageUsingHttp(string url)
{
PureImage ret = null;
 
#if !PocketPC
WebRequest request = IsSocksProxy ? SocksHttpWebRequest.Create(url) : WebRequest.Create(url);
#else
WebRequest request = WebRequest.Create(url);
#endif
if (WebProxy != null)
{
request.Proxy = WebProxy;
}
 
if (Credential != null)
{
request.PreAuthenticate = true;
request.Credentials = Credential;
}
if(!string.IsNullOrEmpty(Authorization))
{
request.Headers.Set("Authorization", Authorization);
}
if (request is HttpWebRequest)
{
var r = request as HttpWebRequest;
r.UserAgent = UserAgent;
r.ReadWriteTimeout = TimeoutMs * 6;
r.Accept = requestAccept;
r.Referer = RefererUrl;
r.Timeout = TimeoutMs;
}
#if !PocketPC
else if (request is SocksHttpWebRequest)
{
var r = request as SocksHttpWebRequest;
 
if (!string.IsNullOrEmpty(UserAgent))
{
r.Headers.Add("User-Agent", UserAgent);
}
 
if (!string.IsNullOrEmpty(requestAccept))
{
r.Headers.Add("Accept", requestAccept);
}
 
if (!string.IsNullOrEmpty(RefererUrl))
{
r.Headers.Add("Referer", RefererUrl);
}
}
#endif
using (var response = request.GetResponse())
{
if (CheckTileImageHttpResponse(response))
{
using (Stream responseStream = response.GetResponseStream())
{
MemoryStream data = Stuff.CopyStream(responseStream, false);
 
Debug.WriteLine("Response[" + data.Length + " bytes]: " + url);
 
if (data.Length > 0)
{
ret = TileImageProxy.FromStream(data);
 
if (ret != null)
{
ret.Data = data;
ret.Data.Position = 0;
}
else
{
data.Dispose();
}
}
data = null;
}
}
else
{
Debug.WriteLine("CheckTileImageHttpResponse[false]: " + url);
}
#if PocketPC
request.Abort();
#endif
response.Close();
}
return ret;
}
 
protected string GetContentUsingHttp(string url)
{
string ret = string.Empty;
 
#if !PocketPC
WebRequest request = IsSocksProxy ? SocksHttpWebRequest.Create(url) : WebRequest.Create(url);
#else
WebRequest request = WebRequest.Create(url);
#endif
 
if (WebProxy != null)
{
request.Proxy = WebProxy;
}
 
if (Credential != null)
{
request.PreAuthenticate = true;
request.Credentials = Credential;
}
if(!string.IsNullOrEmpty(Authorization))
{
request.Headers.Set("Authorization", Authorization);
}
 
if (request is HttpWebRequest)
{
var r = request as HttpWebRequest;
r.UserAgent = UserAgent;
r.ReadWriteTimeout = TimeoutMs * 6;
r.Accept = requestAccept;
r.Referer = RefererUrl;
r.Timeout = TimeoutMs;
}
#if !PocketPC
else if (request is SocksHttpWebRequest)
{
var r = request as SocksHttpWebRequest;
 
if (!string.IsNullOrEmpty(UserAgent))
{
r.Headers.Add("User-Agent", UserAgent);
}
 
if (!string.IsNullOrEmpty(requestAccept))
{
r.Headers.Add("Accept", requestAccept);
}
 
if (!string.IsNullOrEmpty(RefererUrl))
{
r.Headers.Add("Referer", RefererUrl);
}
}
#endif
using (var response = request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader read = new StreamReader(responseStream, Encoding.UTF8))
{
ret = read.ReadToEnd();
}
}
#if PocketPC
request.Abort();
#endif
response.Close();
}
 
return ret;
}
 
#if !PocketPC
/// <summary>
/// use at your own risk, storing tiles in files is slow and hard on the file system
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
protected virtual PureImage GetTileImageFromFile(string fileName)
{
return GetTileImageFromArray(File.ReadAllBytes(fileName));
}
#endif
protected virtual PureImage GetTileImageFromArray(byte [] data)
{
return TileImageProxy.FromArray(data);
}
protected static int GetServerNum(GPoint pos, int max)
{
return (int)(pos.X + 2 * pos.Y) % max;
}
 
public override int GetHashCode()
{
return (int)DbId;
}
 
public override bool Equals(object obj)
{
if (obj is GMapProvider)
{
return Id.Equals((obj as GMapProvider).Id);
}
return false;
}
 
public override string ToString()
{
return Name;
}
}
 
/// <summary>
/// represents empty provider
/// </summary>
public class EmptyProvider : GMapProvider
{
public static readonly EmptyProvider Instance;
 
EmptyProvider()
{
MaxZoom = null;
}
 
static EmptyProvider()
{
Instance = new EmptyProvider();
}
 
#region GMapProvider Members
 
public override Guid Id
{
get
{
return Guid.Empty;
}
}
 
readonly string name = "None";
public override string Name
{
get
{
return name;
}
}
 
readonly MercatorProjection projection = MercatorProjection.Instance;
public override PureProjection Projection
{
get
{
return projection;
}
}
 
public override GMapProvider[] Overlays
{
get
{
return null;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
return null;
}
 
#endregion
}
 
public sealed class EmptyWebProxy : IWebProxy
{
public static readonly EmptyWebProxy Instance = new EmptyWebProxy();
 
private ICredentials m_credentials;
public ICredentials Credentials
{
get
{
return this.m_credentials;
}
set
{
this.m_credentials = value;
}
}
 
public Uri GetProxy(Uri uri)
{
return uri;
}
 
public bool IsBypassed(Uri uri)
{
return true;
}
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/China/GoogleChinaHybridMapProvider.cs
0,0 → 1,81

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// GoogleChinaHybridMap provider
/// </summary>
public class GoogleChinaHybridMapProvider : GoogleMapProviderBase
{
public static readonly GoogleChinaHybridMapProvider Instance;
 
GoogleChinaHybridMapProvider()
{
RefererUrl = string.Format("http://ditu.{0}/", ServerChina);
}
 
static GoogleChinaHybridMapProvider()
{
Instance = new GoogleChinaHybridMapProvider();
}
 
public string Version = "h@298";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("B8A2A78D-1C49-45D0-8F03-9B95C83116B7");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleChinaHybridMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { GoogleChinaSatelliteMapProvider.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty; // after &x=...
string sec2 = string.Empty; // after &zoom=...
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, ChinaLanguage, pos.X, sec1, pos.Y, zoom, sec2, ServerChina);
}
 
static readonly string ChinaLanguage = "zh-CN";
static readonly string UrlFormatServer = "mt";
static readonly string UrlFormatRequest = "vt";
static readonly string UrlFormat = "http://{0}{1}.{10}/{2}/imgtp=png32&lyrs={3}&hl={4}&gl=cn&x={5}{6}&y={7}&z={8}&s={9}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/China/GoogleChinaMapProvider.cs
0,0 → 1,68

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// GoogleChinaMap provider
/// </summary>
public class GoogleChinaMapProvider : GoogleMapProviderBase
{
public static readonly GoogleChinaMapProvider Instance;
 
GoogleChinaMapProvider()
{
RefererUrl = string.Format("http://ditu.{0}/", ServerChina);
}
 
static GoogleChinaMapProvider()
{
Instance = new GoogleChinaMapProvider();
}
 
public string Version = "m@298";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("1213F763-64EE-4AB6-A14A-D84D6BCC3426");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleChinaMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty; // after &x=...
string sec2 = string.Empty; // after &zoom=...
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, ChinaLanguage, pos.X, sec1, pos.Y, zoom, sec2, ServerChina);
}
 
static readonly string ChinaLanguage = "zh-CN";
static readonly string UrlFormatServer = "mt";
static readonly string UrlFormatRequest = "vt";
static readonly string UrlFormat = "http://{0}{1}.{10}/{2}/lyrs={3}&hl={4}&gl=cn&x={5}{6}&y={7}&z={8}&s={9}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/China/GoogleChinaSatelliteMapProvider.cs
0,0 → 1,67

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// GoogleChinaSatelliteMap provider
/// </summary>
public class GoogleChinaSatelliteMapProvider : GoogleMapProviderBase
{
public static readonly GoogleChinaSatelliteMapProvider Instance;
 
GoogleChinaSatelliteMapProvider()
{
RefererUrl = string.Format("http://ditu.{0}/", ServerChina);
}
 
static GoogleChinaSatelliteMapProvider()
{
Instance = new GoogleChinaSatelliteMapProvider();
}
 
public string Version = "s@170";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("543009AC-3379-4893-B580-DBE6372B1753");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleChinaSatelliteMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty; // after &x=...
string sec2 = string.Empty; // after &zoom=...
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, pos.X, sec1, pos.Y, zoom, sec2, ServerChina);
}
 
static readonly string UrlFormatServer = "mt";
static readonly string UrlFormatRequest = "vt";
static readonly string UrlFormat = "http://{0}{1}.{9}/{2}/lyrs={3}&gl=cn&x={4}{5}&y={6}&z={7}&s={8}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/China/GoogleChinaTerrainMapProvider.cs
0,0 → 1,68

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// GoogleChinaTerrainMap provider
/// </summary>
public class GoogleChinaTerrainMapProvider : GoogleMapProviderBase
{
public static readonly GoogleChinaTerrainMapProvider Instance;
 
GoogleChinaTerrainMapProvider()
{
RefererUrl = string.Format("http://ditu.{0}/", ServerChina);
}
 
static GoogleChinaTerrainMapProvider()
{
Instance = new GoogleChinaTerrainMapProvider();
}
 
public string Version = "t@132,r@298";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("831EC3CC-B044-4097-B4B7-FC9D9F6D2CFC");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleChinaTerrainMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty; // after &x=...
string sec2 = string.Empty; // after &zoom=...
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, ChinaLanguage, pos.X, sec1, pos.Y, zoom, sec2, ServerChina);
}
 
static readonly string ChinaLanguage = "zh-CN";
static readonly string UrlFormatServer = "mt";
static readonly string UrlFormatRequest = "vt";
static readonly string UrlFormat = "http://{0}{1}.{10}/{2}/lyrs={3}&hl={4}&gl=cn&x={5}{6}&y={7}&z={8}&s={9}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/GoogleHybridMapProvider.cs
0,0 → 1,79

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// GoogleHybridMap provider
/// </summary>
public class GoogleHybridMapProvider : GoogleMapProviderBase
{
public static readonly GoogleHybridMapProvider Instance;
 
GoogleHybridMapProvider()
{
}
 
static GoogleHybridMapProvider()
{
Instance = new GoogleHybridMapProvider();
}
 
public string Version = "h@365000000"; //"h@333000000";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("B076C255-6D12-4466-AAE0-4A73D20A7E6A");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleHybridMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { GoogleSatelliteMapProvider.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty; // after &x=...
string sec2 = string.Empty; // after &zoom=...
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, language, pos.X, sec1, pos.Y, zoom, sec2, Server);
}
 
static readonly string UrlFormatServer = "mt";
static readonly string UrlFormatRequest = "vt";
static readonly string UrlFormat = "http://{0}{1}.{10}/maps/{2}/lyrs={3}&hl={4}&x={5}{6}&y={7}&z={8}&s={9}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/GoogleMapProvider.cs
0,0 → 1,2191

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
using System.Security.Cryptography;
using System.Diagnostics;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading;
using GMap.NET.Internals;
using System.Collections.Generic;
using System.Globalization;
using System.Xml;
using System.Text;
#if PocketPC
using OpenNETCF.Security.Cryptography;
#endif
 
public abstract class GoogleMapProviderBase : GMapProvider, RoutingProvider, GeocodingProvider, DirectionsProvider
{
public GoogleMapProviderBase()
{
MaxZoom = null;
RefererUrl = string.Format("http://maps.{0}/", Server);
Copyright = string.Format("©{0} Google - Map data ©{0} Tele Atlas, Imagery ©{0} TerraMetrics", DateTime.Today.Year);
}
 
public readonly string ServerAPIs /* ;}~~ */ = Stuff.GString(/*{^_^}*/"9gERyvblybF8iMuCt/LD6w=="/*d{'_'}b*/);
public readonly string Server /* ;}~~~~ */ = Stuff.GString(/*{^_^}*/"gosr2U13BoS+bXaIxt6XWg=="/*d{'_'}b*/);
public readonly string ServerChina /* ;}~ */ = Stuff.GString(/*{^_^}*/"gosr2U13BoTEJoJJuO25gQ=="/*d{'_'}b*/);
public readonly string ServerKorea /* ;}~~ */ = Stuff.GString(/*{^_^}*/"8ZVBOEsBinzi+zmP7y7pPA=="/*d{'_'}b*/);
public readonly string ServerKoreaKr /* ;}~ */ = Stuff.GString(/*{^_^}*/"gosr2U13BoQyz1gkC4QLfg=="/*d{'_'}b*/);
 
public string SecureWord = "Galileo";
 
/// <summary>
/// Your application's API key, obtained from the Google Developers Console.
/// This key identifies your application for purposes of quota management.
/// Must provide either API key or Maps for Work credentials.
/// </summary>
public string ApiKey = string.Empty;
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
GMapProvider [] overlays;
public override GMapProvider [] Overlays
{
get
{
if (overlays == null)
{
overlays = new GMapProvider [] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
 
public bool TryCorrectVersion = true;
static bool init = false;
 
public override void OnInitialized()
{
if (!init && TryCorrectVersion)
{
string url = string.Format("https://maps.{0}/maps/api/js?client=google-maps-lite&amp;libraries=search&amp;language=en&amp;region=", ServerAPIs);
try
{
string html = GMaps.Instance.UseUrlCache ? Cache.Instance.GetContent(url, CacheType.UrlCache, TimeSpan.FromHours(8)) : string.Empty;
 
if (string.IsNullOrEmpty(html))
{
html = GetContentUsingHttp(url);
if (!string.IsNullOrEmpty(html))
{
if (GMaps.Instance.UseUrlCache)
{
Cache.Instance.SaveContent(url, CacheType.UrlCache, html);
}
}
}
 
if (!string.IsNullOrEmpty(html))
{
#region -- match versions --
Regex reg = new Regex(string.Format(@"https?://mts?\d.{0}/maps/vt\?lyrs=m@(\d*)", Server), RegexOptions.IgnoreCase);
Match mat = reg.Match(html);
if (mat.Success)
{
GroupCollection gc = mat.Groups;
int count = gc.Count;
if (count > 0)
{
string ver = string.Format("m@{0}", gc [1].Value);
string old = GMapProviders.GoogleMap.Version;
 
GMapProviders.GoogleMap.Version = ver;
GMapProviders.GoogleChinaMap.Version = ver;
string verh = string.Format("h@{0}", gc [1].Value);
string oldh = GMapProviders.GoogleHybridMap.Version;
 
GMapProviders.GoogleHybridMap.Version = verh;
GMapProviders.GoogleChinaHybridMap.Version = verh;
#if DEBUG
Debug.WriteLine("GMapProviders.GoogleMap.Version: " + ver + ", " + (ver == old ? "OK" : "old: " + old + ", consider updating source"));
Debug.WriteLine("GMapProviders.GoogleHybridMap.Version: " + verh + ", " + (verh == oldh ? "OK" : "old: " + oldh + ", consider updating source"));
 
if (Debugger.IsAttached && ver != old)
{
Thread.Sleep(1111);
}
#endif
}
}
 
reg = new Regex(string.Format(@"https?://khms?\d.{0}/kh\?v=(\d*)", Server), RegexOptions.IgnoreCase);
mat = reg.Match(html);
if (mat.Success)
{
GroupCollection gc = mat.Groups;
int count = gc.Count;
if (count > 0)
{
string ver = gc [1].Value;
string old = GMapProviders.GoogleSatelliteMap.Version;
 
GMapProviders.GoogleSatelliteMap.Version = ver;
GMapProviders.GoogleKoreaSatelliteMap.Version = ver;
GMapProviders.GoogleChinaSatelliteMap.Version = "s@" + ver;
#if DEBUG
Debug.WriteLine("GMapProviders.GoogleSatelliteMap.Version: " + ver + ", " + (ver == old ? "OK" : "old: " + old + ", consider updating source"));
if (Debugger.IsAttached && ver != old)
{
Thread.Sleep(1111);
}
#endif
}
}
 
reg = new Regex(string.Format(@"https?://mts?\d.{0}/maps/vt\?lyrs=t@(\d*),r@(\d*)", Server), RegexOptions.IgnoreCase);
mat = reg.Match(html);
if (mat.Success)
{
GroupCollection gc = mat.Groups;
int count = gc.Count;
if (count > 1)
{
string ver = string.Format("t@{0},r@{1}", gc [1].Value, gc [2].Value);
string old = GMapProviders.GoogleTerrainMap.Version;
 
GMapProviders.GoogleTerrainMap.Version = ver;
GMapProviders.GoogleChinaTerrainMap.Version = ver;
#if DEBUG
Debug.WriteLine("GMapProviders.GoogleTerrainMap.Version: " + ver + ", " + (ver == old ? "OK" : "old: " + old + ", consider updating source"));
if (Debugger.IsAttached && ver != old)
{
Thread.Sleep(1111);
}
#endif
}
}
#endregion
}
 
init = true; // try it only once
}
catch (Exception ex)
{
Debug.WriteLine("TryCorrectGoogleVersions failed: " + ex.ToString());
}
}
}
 
internal void GetSecureWords(GPoint pos, out string sec1, out string sec2)
{
sec1 = string.Empty; // after &x=...
sec2 = string.Empty; // after &zoom=...
int seclen = (int)((pos.X * 3) + pos.Y) % 8;
sec2 = SecureWord.Substring(0, seclen);
if (pos.Y >= 10000 && pos.Y < 100000)
{
sec1 = Sec1;
}
}
 
static readonly string Sec1 = "&s=";
 
#region RoutingProvider Members
 
public MapRoute GetRoute(PointLatLng start, PointLatLng end, bool avoidHighways, bool walkingMode, int Zoom)
{
string tooltip;
int numLevels;
int zoomFactor;
MapRoute ret = null;
List<PointLatLng> points = GetRoutePoints(MakeRouteUrl(start, end, LanguageStr, avoidHighways, walkingMode), Zoom, out tooltip, out numLevels, out zoomFactor);
if (points != null)
{
ret = new MapRoute(points, tooltip);
}
return ret;
}
 
public MapRoute GetRoute(string start, string end, bool avoidHighways, bool walkingMode, int Zoom)
{
string tooltip;
int numLevels;
int zoomFactor;
MapRoute ret = null;
List<PointLatLng> points = GetRoutePoints(MakeRouteUrl(start, end, LanguageStr, avoidHighways, walkingMode), Zoom, out tooltip, out numLevels, out zoomFactor);
if (points != null)
{
ret = new MapRoute(points, tooltip);
}
return ret;
}
 
#region -- internals --
 
string MakeRouteUrl(PointLatLng start, PointLatLng end, string language, bool avoidHighways, bool walkingMode)
{
string opt = walkingMode ? WalkingStr : (avoidHighways ? RouteWithoutHighwaysStr : RouteStr);
return string.Format(CultureInfo.InvariantCulture, RouteUrlFormatPointLatLng, language, opt, start.Lat, start.Lng, end.Lat, end.Lng, Server);
}
 
string MakeRouteUrl(string start, string end, string language, bool avoidHighways, bool walkingMode)
{
string opt = walkingMode ? WalkingStr : (avoidHighways ? RouteWithoutHighwaysStr : RouteStr);
return string.Format(RouteUrlFormatStr, language, opt, start.Replace(' ', '+'), end.Replace(' ', '+'), Server);
}
 
List<PointLatLng> GetRoutePoints(string url, int zoom, out string tooltipHtml, out int numLevel, out int zoomFactor)
{
List<PointLatLng> points = null;
tooltipHtml = string.Empty;
numLevel = -1;
zoomFactor = -1;
try
{
string route = GMaps.Instance.UseRouteCache ? Cache.Instance.GetContent(url, CacheType.RouteCache) : string.Empty;
 
if (string.IsNullOrEmpty(route))
{
route = GetContentUsingHttp(url);
 
if (!string.IsNullOrEmpty(route))
{
if (GMaps.Instance.UseRouteCache)
{
Cache.Instance.SaveContent(url, CacheType.RouteCache, route);
}
}
}
 
// parse values
if (!string.IsNullOrEmpty(route))
{
//{
//tooltipHtml:" (300\x26#160;km / 2 valandos 59 min.)",
//polylines:
//[{
// id:"route0",
// points:"cy~rIcvp`ClJ~v@jHpu@N|BB~A?tA_@`J@nAJrB|AhEf@h@~@^pANh@Mr@a@`@_@x@cBPk@ZiBHeDQ{C]wAc@mAqCeEoA_C{@_Cy@iDoEaW}AsJcJ}t@iWowB{C_Vyw@gvGyTyjBu@gHwDoZ{W_zBsX}~BiA_MmAyOcAwOs@yNy@eTk@mVUmTE}PJ_W`@cVd@cQ`@}KjA_V`AeOn@oItAkOdAaKfBaOhDiVbD}RpBuKtEkTtP}q@fr@ypCfCmK|CmNvEqVvCuQ`BgLnAmJ`CgTpA_N~@sLlBwYh@yLp@cSj@e]zFkzKHaVViSf@wZjFwqBt@{Wr@qS`AaUjAgStBkYrEwe@xIuw@`Gmj@rFok@~BkYtCy_@|KccBvBgZjC}[tD__@pDaYjB_MpBuLhGi[fC}KfFcSnEkObFgOrFkOzEoLt[ys@tJeUlIsSbKqXtFiPfKi]rG_W|CiNhDkPfDuQlDoShEuXrEy[nOgiAxF{`@|DoVzFk[fDwPlXupA~CoPfDuQxGcd@l@yEdH{r@xDam@`AiWz@mYtAq~@p@uqAfAqx@|@kZxA}^lBq\\|Be\\lAaO~Dm`@|Gsj@tS_~AhCyUrCeZrByWv@uLlUiyDpA}NdHkn@pGmb@LkAtAoIjDqR`I{`@`BcH|I_b@zJcd@lKig@\\_CbBaIlJ}g@lIoj@pAuJtFoh@~Eqs@hDmv@h@qOfF{jBn@gSxCio@dAuQn@gIVoBjAiOlCqWbCiT`PekAzKiu@~EgYfIya@fA{ExGwWnDkMdHiU|G}R`HgQhRsa@hW}g@jVsg@|a@cbAbJkUxKoYxLa_@`IiZzHu[`DoOXsBhBuJbCwNdBaL`EkYvAwM`CeVtEwj@nDqj@BkAnB{YpGgeAn@eJ`CmYvEid@tBkQpGkd@rE}UxB}JdJo_@nDcNfSan@nS}j@lCeIvDsMbC{J|CyNbAwFfCgPz@uGvBiSdD}`@rFon@nKaqAxDmc@xBuT|Fqc@nC_PrEcUtC_MpFcT`GqQxJmXfXwq@jQgh@hBeGhG_U|BaK|G}[nRikAzIam@tDsYfE}^v@_MbAwKn@oIr@yLrBub@jAoa@b@sRdDmjBx@aZdA}XnAqVpAgTlAqPn@oGvFye@dCeRzGwb@xT_}A`BcPrAoOvCad@jAmXv@eV`BieA~@a[fBg_@`CiZ~A_OhHqk@hHcn@tEwe@rDub@nBoW~@sN|BeZnAgMvDm\\hFs^hSigArFaY`Gc\\`C}OhD}YfByQdAaNbAkOtOu~Cn@wKz@uLfCeY|CkW~B}OhCmO|AcI~A_IvDoPpEyPdImWrDuKnL_YjI{Ptl@qfAle@u|@xI}PbImQvFwMbGgOxFkOpdAosCdD_KxGsU|E}RxFcXhCwNjDwTvBiPfBqOrAyMfBcTxAaVhAwVrCy_Al@iPt@_OtA}Q`AuJ`AgIzAkK`EoUtBsJhCaKxCaKdDaKhQeg@jGiRfGaSrFyR`HsWvL}f@xp@grC`Sq|@pEsVdAoGjF{XlkAgwHxHgj@|Jex@fg@qlEjQs{AdHwh@zDkVhEkVzI_e@v}AgzHpK_l@tE}YtEy[rC}TpFme@jg@cpEbF{d@~BoXfBqUbAyOx@yN|Ao]bAo[tIazC`@iLb@aJ~AkWbBgRdBgPjA{IdCePlAmHfBmJdCiL~CuM|DoNxhDezKdDkLvBoInFqVbCuMxBqNnAeJ~CwXdBoSb^crElFsl@`Dy[zDu^xBiRzc@aaE|Fsd@vCkShDmTpG}^lD}QzDoR|zAcdHvIob@dKoj@jDmSlKiq@xVacBhEqXnBqL|Ga^zJke@`y@ktD~Mop@tP}_AdOg`AtCiQxCyOlDkPfDoN`GiTfGkRjEwLvEsL|HkQtEkJdE{HrwAkaCrT{a@rpDiuHtE_KvLuV|{AwaDzAqCb@mAf{Ac`D~FqL~y@_fBlNmZbGaNtF}Mpn@s~AlYss@dFgK|DoGhBoCrDuE~AcBtGaGnByAnDwBnCwAfDwAnFaBjGkA~[{E`iEkn@pQaDvIwBnIiCl\\qLn}J{pDhMcGrFcDhGeEvoDehC|AsArCwChBaC`C_EzC_HbBcFd@uB`@qAn@gDdB}Kz@}Hn@iPjByx@jDcvAj@}RDsEn@yTv@a]VcPtEamFBcHT_LNkEdAiShDsi@`GudAbFgx@`@iKdP}yFhBgs@p@yRjCo_AJwCXeEb@uEz@_H|@yEnBqHrCiIpAmE`o@qhBxC_IjIuVdIcXh{AgmG`i@_{BfCuLrhAssGfFeXxbBklInCsN|_AoiGpGs_@pl@w}Czy@_kEvG{]h}@ieFbQehAdHye@lPagA|Eu\\tAmI|CwWjn@mwGj@eH|]azFl@kPjAqd@jJe|DlD}vAxAeh@@eBvVk}JzIkqDfE_aBfA{YbBk[zp@e}LhAaObCeUlAuIzAeJrb@q`CjCcOnAaIpBwOtBkTjDsg@~AiPvBwOlAcH|AkIlCkLlYudApDoN`BgHhBaJvAeIvAqJbAuHrBqQbAsLx@oL`MwrCXkFr@uJh@{FhBsOvXwoB|EqVdBmHxC}KtCcJtDgKjDoIxE}JdHcMdCuDdIoKlmB}|BjJuMfFgIlE{HlEyIdEeJ~FaOvCgInCuI`EmN`J}]rEsP`EuMzCoIxGwPpi@cnAhGgPzCiJvFmRrEwQbDyOtCoPbDwTxDq\\rAsK`BgLhB{KxBoLfCgLjDqKdBqEfEkJtSy^`EcJnDuJjAwDrCeK\\}AjCaNr@qEjAaJtNaqAdCqQ`BsItS}bAbQs{@|Kor@xBmKz}@}uDze@{zAjk@}fBjTsq@r@uCd@aDFyCIwCWcCY}Aq_@w|A{AwF_DyHgHwOgu@m_BSb@nFhL",
// levels:"B?@?????@?@???A???@?@????@??@????????@????@???A????@????@??@???@??@???A???@??@???A??@???@????A??@???@??@????@??@???@????@???@??A@?@???@????A????@??@?@???@???????@??@?@????@????@?A??@???@????@??@?A??????@???????@??A???@??@???@??@????@??@?@?????@?@?A?@????@???@??@??@????@?@??@?@??@??????@???@?@????@???B???@??@??????@??@???A?????@????@???A??@??????@??@??A?@???@???@??A????@???@???@????A????@@??A???@???@??@??A????@??????@??@???@???B????@?@????????@????@????A?????@????@??A???@???@???B???@?????@???@????@????@???A???????@??A@??@?@??@@?????A?@@????????@??@?A????@?????@???@???@???@???@?@?A???@??@?@??@???@?????@???A??@???????@????@???@????@????@@???A????@?@??@?B",
// numLevels:4,
// zoomFactor:16
//}]
//}
 
#region -- title --
int tooltipEnd = 0;
{
int x = route.IndexOf("tooltipHtml:") + 13;
if (x >= 13)
{
tooltipEnd = route.IndexOf("\"", x + 1);
if (tooltipEnd > 0)
{
int l = tooltipEnd - x;
if (l > 0)
{
tooltipHtml = route.Substring(x, l).Replace(@"\x26#160;", " ");
}
}
}
}
#endregion
 
#region -- points --
int pointsEnd = 0;
{
int x = route.IndexOf("points:", tooltipEnd >= 0 ? tooltipEnd : 0) + 8;
if (x >= 8)
{
pointsEnd = route.IndexOf("\"", x + 1);
if (pointsEnd > 0)
{
int l = pointsEnd - x;
if (l > 0)
{
/*
while(l % 5 != 0)
{
l--;
}
*/
 
points = new List<PointLatLng>();
DecodePointsInto(points, route.Substring(x, l));
}
}
}
}
#endregion
 
#region -- levels --
string levels = string.Empty;
int levelsEnd = 0;
{
int x = route.IndexOf("levels:", pointsEnd >= 0 ? pointsEnd : 0) + 8;
if (x >= 8)
{
levelsEnd = route.IndexOf("\"", x + 1);
if (levelsEnd > 0)
{
int l = levelsEnd - x;
if (l > 0)
{
levels = route.Substring(x, l);
}
}
}
}
#endregion
 
#region -- numLevel --
int numLevelsEnd = 0;
{
int x = route.IndexOf("numLevels:", levelsEnd >= 0 ? levelsEnd : 0) + 10;
if (x >= 10)
{
numLevelsEnd = route.IndexOf(",", x);
if (numLevelsEnd > 0)
{
int l = numLevelsEnd - x;
if (l > 0)
{
numLevel = int.Parse(route.Substring(x, l));
}
}
}
}
#endregion
 
#region -- zoomFactor --
{
int x = route.IndexOf("zoomFactor:", numLevelsEnd >= 0 ? numLevelsEnd : 0) + 11;
if (x >= 11)
{
int end = route.IndexOf("}", x);
if (end > 0)
{
int l = end - x;
if (l > 0)
{
zoomFactor = int.Parse(route.Substring(x, l));
}
}
}
}
#endregion
 
#region -- trim point overload --
if (points != null && numLevel > 0 && !string.IsNullOrEmpty(levels))
{
if (points.Count - levels.Length > 0)
{
points.RemoveRange(levels.Length, points.Count - levels.Length);
}
 
//http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/description.html
//
string allZlevels = "TSRPONMLKJIHGFEDCBA@?";
if (numLevel > allZlevels.Length)
{
numLevel = allZlevels.Length;
}
 
// used letters in levels string
string pLevels = allZlevels.Substring(allZlevels.Length - numLevel);
 
// remove useless points at zoom
{
List<PointLatLng> removedPoints = new List<PointLatLng>();
 
for (int i = 0; i < levels.Length; i++)
{
int zi = pLevels.IndexOf(levels [i]);
if (zi > 0)
{
if (zi * numLevel > zoom)
{
removedPoints.Add(points [i]);
}
}
}
 
foreach (var v in removedPoints)
{
points.Remove(v);
}
removedPoints.Clear();
removedPoints = null;
}
}
#endregion
}
}
catch (Exception ex)
{
points = null;
Debug.WriteLine("GetRoutePoints: " + ex);
}
return points;
}
 
static readonly string RouteUrlFormatPointLatLng = "http://maps.{6}/maps?f=q&output=dragdir&doflg=p&hl={0}{1}&q=&saddr=@{2},{3}&daddr=@{4},{5}";
static readonly string RouteUrlFormatStr = "http://maps.{4}/maps?f=q&output=dragdir&doflg=p&hl={0}{1}&q=&saddr=@{2}&daddr=@{3}";
 
static readonly string WalkingStr = "&mra=ls&dirflg=w";
static readonly string RouteWithoutHighwaysStr = "&mra=ls&dirflg=dh";
static readonly string RouteStr = "&mra=ls&dirflg=d";
 
#endregion
 
#endregion
 
#region GeocodingProvider Members
 
public GeoCoderStatusCode GetPoints(string keywords, out List<PointLatLng> pointList)
{
return GetLatLngFromGeocoderUrl(MakeGeocoderUrl(keywords, LanguageStr), out pointList);
}
 
public PointLatLng? GetPoint(string keywords, out GeoCoderStatusCode status)
{
List<PointLatLng> pointList;
status = GetPoints(keywords, out pointList);
return pointList != null && pointList.Count > 0 ? pointList [0] : (PointLatLng?)null;
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="placemark"></param>
/// <param name="pointList"></param>
/// <returns></returns>
public GeoCoderStatusCode GetPoints(Placemark placemark, out List<PointLatLng> pointList)
{
throw new NotImplementedException("use GetPoints(string keywords...");
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="placemark"></param>
/// <param name="status"></param>
/// <returns></returns>
public PointLatLng? GetPoint(Placemark placemark, out GeoCoderStatusCode status)
{
throw new NotImplementedException("use GetPoint(string keywords...");
}
 
public GeoCoderStatusCode GetPlacemarks(PointLatLng location, out List<Placemark> placemarkList)
{
return GetPlacemarkFromReverseGeocoderUrl(MakeReverseGeocoderUrl(location, LanguageStr), out placemarkList);
}
 
public Placemark? GetPlacemark(PointLatLng location, out GeoCoderStatusCode status)
{
List<Placemark> pointList;
status = GetPlacemarks(location, out pointList);
return pointList != null && pointList.Count > 0 ? pointList [0] : (Placemark?)null;
}
 
#region -- internals --
 
// The Coogle Geocoding API: http://tinyurl.com/cdlj889
 
string MakeGeocoderUrl(string keywords, string language)
{
return string.Format(CultureInfo.InvariantCulture, GeocoderUrlFormat, ServerAPIs, Uri.EscapeDataString(keywords).Replace(' ', '+'), language);
}
 
string MakeReverseGeocoderUrl(PointLatLng pt, string language)
{
return string.Format(CultureInfo.InvariantCulture, ReverseGeocoderUrlFormat, ServerAPIs, pt.Lat, pt.Lng, language);
}
 
GeoCoderStatusCode GetLatLngFromGeocoderUrl(string url, out List<PointLatLng> pointList)
{
var status = GeoCoderStatusCode.Unknow;
pointList = null;
 
try
{
string geo = GMaps.Instance.UseGeocoderCache ? Cache.Instance.GetContent(url, CacheType.GeocoderCache) : string.Empty;
 
bool cache = false;
 
if (string.IsNullOrEmpty(geo))
{
string urls = url;
 
// Must provide either API key or Maps for Work credentials.
if (!string.IsNullOrEmpty(ClientId))
{
urls = GetSignedUri(url);
}
else if (!string.IsNullOrEmpty(ApiKey))
{
urls += "&key=" + ApiKey;
}
 
geo = GetContentUsingHttp(urls);
 
if (!string.IsNullOrEmpty(geo))
{
cache = true;
}
}
 
if (!string.IsNullOrEmpty(geo))
{
if (geo.StartsWith("<?xml"))
{
#region -- xml response --
//<?xml version="1.0" encoding="UTF-8"?>
//<GeocodeResponse>
// <status>OK</status>
// <result>
// <type>locality</type>
// <type>political</type>
// <formatted_address>Vilnius, Lithuania</formatted_address>
// <address_component>
// <long_name>Vilnius</long_name>
// <short_name>Vilnius</short_name>
// <type>locality</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilniaus miesto savivaldyb??</long_name>
// <short_name>Vilniaus m. sav.</short_name>
// <type>administrative_area_level_2</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilnius County</long_name>
// <short_name>Vilnius County</short_name>
// <type>administrative_area_level_1</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Lithuania</long_name>
// <short_name>LT</short_name>
// <type>country</type>
// <type>political</type>
// </address_component>
// <geometry>
// <location>
// <lat>54.6871555</lat>
// <lng>25.2796514</lng>
// </location>
// <location_type>APPROXIMATE</location_type>
// <viewport>
// <southwest>
// <lat>54.5677980</lat>
// <lng>25.0243760</lng>
// </southwest>
// <northeast>
// <lat>54.8325440</lat>
// <lng>25.4814883</lng>
// </northeast>
// </viewport>
// <bounds>
// <southwest>
// <lat>54.5677980</lat>
// <lng>25.0243760</lng>
// </southwest>
// <northeast>
// <lat>54.8325440</lat>
// <lng>25.4814883</lng>
// </northeast>
// </bounds>
// </geometry>
// </result>
// <result>
// <type>airport</type>
// <type>transit_station</type>
// <type>establishment</type>
// <formatted_address>Vilnius International Airport (VNO), 10A, Vilnius, Lithuania</formatted_address>
// <address_component>
// <long_name>Vilnius International Airport</long_name>
// <short_name>Vilnius International Airport</short_name>
// <type>establishment</type>
// </address_component>
// <address_component>
// <long_name>10A</long_name>
// <short_name>10A</short_name>
// <type>street_number</type>
// </address_component>
// <address_component>
// <long_name>Vilnius</long_name>
// <short_name>Vilnius</short_name>
// <type>locality</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilniaus miesto savivaldyb??</long_name>
// <short_name>Vilniaus m. sav.</short_name>
// <type>administrative_area_level_2</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilnius County</long_name>
// <short_name>Vilnius County</short_name>
// <type>administrative_area_level_1</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Lithuania</long_name>
// <short_name>LT</short_name>
// <type>country</type>
// <type>political</type>
// </address_component>
// <geometry>
// <location>
// <lat>54.6369440</lat>
// <lng>25.2877780</lng>
// </location>
// <location_type>APPROXIMATE</location_type>
// <viewport>
// <southwest>
// <lat>54.6158331</lat>
// <lng>25.2723832</lng>
// </southwest>
// <northeast>
// <lat>54.6538331</lat>
// <lng>25.3034219</lng>
// </northeast>
// </viewport>
// <bounds>
// <southwest>
// <lat>54.6158331</lat>
// <lng>25.2723832</lng>
// </southwest>
// <northeast>
// <lat>54.6538331</lat>
// <lng>25.3034219</lng>
// </northeast>
// </bounds>
// </geometry>
// </result>
//</GeocodeResponse>
 
#endregion
 
XmlDocument doc = new XmlDocument();
doc.LoadXml(geo);
 
XmlNode nn = doc.SelectSingleNode("//status");
if (nn != null)
{
if (nn.InnerText != "OK")
{
Debug.WriteLine("GetLatLngFromGeocoderUrl: " + nn.InnerText);
}
else
{
status = GeoCoderStatusCode.G_GEO_SUCCESS;
 
if (cache && GMaps.Instance.UseGeocoderCache)
{
Cache.Instance.SaveContent(url, CacheType.GeocoderCache, geo);
}
 
pointList = new List<PointLatLng>();
 
XmlNodeList l = doc.SelectNodes("//result");
if (l != null)
{
foreach (XmlNode n in l)
{
nn = n.SelectSingleNode("geometry/location/lat");
if (nn != null)
{
double lat = double.Parse(nn.InnerText, CultureInfo.InvariantCulture);
 
nn = n.SelectSingleNode("geometry/location/lng");
if (nn != null)
{
double lng = double.Parse(nn.InnerText, CultureInfo.InvariantCulture);
pointList.Add(new PointLatLng(lat, lng));
}
}
}
}
}
}
}
}
}
catch (Exception ex)
{
status = GeoCoderStatusCode.ExceptionInCode;
Debug.WriteLine("GetLatLngFromGeocoderUrl: " + ex);
}
 
return status;
}
 
GeoCoderStatusCode GetPlacemarkFromReverseGeocoderUrl(string url, out List<Placemark> placemarkList)
{
GeoCoderStatusCode status = GeoCoderStatusCode.Unknow;
placemarkList = null;
 
try
{
string reverse = GMaps.Instance.UsePlacemarkCache ? Cache.Instance.GetContent(url, CacheType.PlacemarkCache) : string.Empty;
 
bool cache = false;
 
if (string.IsNullOrEmpty(reverse))
{
string urls = url;
 
// Must provide either API key or Maps for Work credentials.
if (!string.IsNullOrEmpty(ClientId))
{
urls = GetSignedUri(url);
}
else if (!string.IsNullOrEmpty(ApiKey))
{
urls += "&key=" + ApiKey;
}
 
reverse = GetContentUsingHttp(urls);
 
if (!string.IsNullOrEmpty(reverse))
{
cache = true;
}
}
 
if (!string.IsNullOrEmpty(reverse))
{
if (reverse.StartsWith("<?xml"))
{
#region -- xml response --
//<?xml version="1.0" encoding="UTF-8"?>
//<GeocodeResponse>
// <status>OK</status>
// <result>
// <type>street_address</type>
// <formatted_address>Tuskul??n?? gatv?? 2, Vilnius 09213, Lithuania</formatted_address>
// <address_component>
// <long_name>2</long_name>
// <short_name>2</short_name>
// <type>street_number</type>
// </address_component>
// <address_component>
// <long_name>Tuskul??n?? gatv??</long_name>
// <short_name>Tuskul??n?? g.</short_name>
// <type>route</type>
// </address_component>
// <address_component>
// <long_name>Vilnius</long_name>
// <short_name>Vilnius</short_name>
// <type>locality</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilniaus miesto savivaldyb??</long_name>
// <short_name>Vilniaus m. sav.</short_name>
// <type>administrative_area_level_2</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilnius County</long_name>
// <short_name>Vilnius County</short_name>
// <type>administrative_area_level_1</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Lithuania</long_name>
// <short_name>LT</short_name>
// <type>country</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>09213</long_name>
// <short_name>09213</short_name>
// <type>postal_code</type>
// </address_component>
// <geometry>
// <location>
// <lat>54.6963339</lat>
// <lng>25.2968939</lng>
// </location>
// <location_type>ROOFTOP</location_type>
// <viewport>
// <southwest>
// <lat>54.6949849</lat>
// <lng>25.2955449</lng>
// </southwest>
// <northeast>
// <lat>54.6976829</lat>
// <lng>25.2982429</lng>
// </northeast>
// </viewport>
// </geometry>
// </result>
// <result>
// <type>postal_code</type>
// <formatted_address>Vilnius 09213, Lithuania</formatted_address>
// <address_component>
// <long_name>09213</long_name>
// <short_name>09213</short_name>
// <type>postal_code</type>
// </address_component>
// <address_component>
// <long_name>Vilnius</long_name>
// <short_name>Vilnius</short_name>
// <type>locality</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilniaus miesto savivaldyb??</long_name>
// <short_name>Vilniaus m. sav.</short_name>
// <type>administrative_area_level_2</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilnius County</long_name>
// <short_name>Vilnius County</short_name>
// <type>administrative_area_level_1</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Lithuania</long_name>
// <short_name>LT</short_name>
// <type>country</type>
// <type>political</type>
// </address_component>
// <geometry>
// <location>
// <lat>54.6963032</lat>
// <lng>25.2967390</lng>
// </location>
// <location_type>APPROXIMATE</location_type>
// <viewport>
// <southwest>
// <lat>54.6950889</lat>
// <lng>25.2958851</lng>
// </southwest>
// <northeast>
// <lat>54.6977869</lat>
// <lng>25.2985830</lng>
// </northeast>
// </viewport>
// <bounds>
// <southwest>
// <lat>54.6956179</lat>
// <lng>25.2958871</lng>
// </southwest>
// <northeast>
// <lat>54.6972579</lat>
// <lng>25.2985810</lng>
// </northeast>
// </bounds>
// </geometry>
// </result>
// <result>
// <type>neighborhood</type>
// <type>political</type>
// <formatted_address>??irm??nai, Vilnius, Lithuania</formatted_address>
// <address_component>
// <long_name>??irm??nai</long_name>
// <short_name>??irm??nai</short_name>
// <type>neighborhood</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilnius</long_name>
// <short_name>Vilnius</short_name>
// <type>locality</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilniaus miesto savivaldyb??</long_name>
// <short_name>Vilniaus m. sav.</short_name>
// <type>administrative_area_level_2</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilnius County</long_name>
// <short_name>Vilnius County</short_name>
// <type>administrative_area_level_1</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Lithuania</long_name>
// <short_name>LT</short_name>
// <type>country</type>
// <type>political</type>
// </address_component>
// <geometry>
// <location>
// <lat>54.7117424</lat>
// <lng>25.2974345</lng>
// </location>
// <location_type>APPROXIMATE</location_type>
// <viewport>
// <southwest>
// <lat>54.6888939</lat>
// <lng>25.2838700</lng>
// </southwest>
// <northeast>
// <lat>54.7304441</lat>
// <lng>25.3133630</lng>
// </northeast>
// </viewport>
// <bounds>
// <southwest>
// <lat>54.6888939</lat>
// <lng>25.2838700</lng>
// </southwest>
// <northeast>
// <lat>54.7304441</lat>
// <lng>25.3133630</lng>
// </northeast>
// </bounds>
// </geometry>
// </result>
// <result>
// <type>administrative_area_level_3</type>
// <type>political</type>
// <formatted_address>??irm??n?? seni??nija, Lithuania</formatted_address>
// <address_component>
// <long_name>??irm??n?? seni??nija</long_name>
// <short_name>??irm??n?? sen.</short_name>
// <type>administrative_area_level_3</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilniaus miesto savivaldyb??</long_name>
// <short_name>Vilniaus m. sav.</short_name>
// <type>administrative_area_level_2</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilnius County</long_name>
// <short_name>Vilnius County</short_name>
// <type>administrative_area_level_1</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Lithuania</long_name>
// <short_name>LT</short_name>
// <type>country</type>
// <type>political</type>
// </address_component>
// <geometry>
// <location>
// <lat>54.7117424</lat>
// <lng>25.2974345</lng>
// </location>
// <location_type>APPROXIMATE</location_type>
// <viewport>
// <southwest>
// <lat>54.6892135</lat>
// <lng>25.2837150</lng>
// </southwest>
// <northeast>
// <lat>54.7305878</lat>
// <lng>25.3135630</lng>
// </northeast>
// </viewport>
// <bounds>
// <southwest>
// <lat>54.6892135</lat>
// <lng>25.2837150</lng>
// </southwest>
// <northeast>
// <lat>54.7305878</lat>
// <lng>25.3135630</lng>
// </northeast>
// </bounds>
// </geometry>
// </result>
// <result>
// <type>locality</type>
// <type>political</type>
// <formatted_address>Vilnius, Lithuania</formatted_address>
// <address_component>
// <long_name>Vilnius</long_name>
// <short_name>Vilnius</short_name>
// <type>locality</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilniaus miesto savivaldyb??</long_name>
// <short_name>Vilniaus m. sav.</short_name>
// <type>administrative_area_level_2</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilnius County</long_name>
// <short_name>Vilnius County</short_name>
// <type>administrative_area_level_1</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Lithuania</long_name>
// <short_name>LT</short_name>
// <type>country</type>
// <type>political</type>
// </address_component>
// <geometry>
// <location>
// <lat>54.6871555</lat>
// <lng>25.2796514</lng>
// </location>
// <location_type>APPROXIMATE</location_type>
// <viewport>
// <southwest>
// <lat>54.5677980</lat>
// <lng>25.0243760</lng>
// </southwest>
// <northeast>
// <lat>54.8325440</lat>
// <lng>25.4814883</lng>
// </northeast>
// </viewport>
// <bounds>
// <southwest>
// <lat>54.5677980</lat>
// <lng>25.0243760</lng>
// </southwest>
// <northeast>
// <lat>54.8325440</lat>
// <lng>25.4814883</lng>
// </northeast>
// </bounds>
// </geometry>
// </result>
// <result>
// <type>administrative_area_level_2</type>
// <type>political</type>
// <formatted_address>Vilniaus miesto savivaldyb??, Lithuania</formatted_address>
// <address_component>
// <long_name>Vilniaus miesto savivaldyb??</long_name>
// <short_name>Vilniaus m. sav.</short_name>
// <type>administrative_area_level_2</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Vilnius County</long_name>
// <short_name>Vilnius County</short_name>
// <type>administrative_area_level_1</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Lithuania</long_name>
// <short_name>LT</short_name>
// <type>country</type>
// <type>political</type>
// </address_component>
// <geometry>
// <location>
// <lat>54.6759715</lat>
// <lng>25.2867413</lng>
// </location>
// <location_type>APPROXIMATE</location_type>
// <viewport>
// <southwest>
// <lat>54.5677980</lat>
// <lng>25.0243760</lng>
// </southwest>
// <northeast>
// <lat>54.8325440</lat>
// <lng>25.4814883</lng>
// </northeast>
// </viewport>
// <bounds>
// <southwest>
// <lat>54.5677980</lat>
// <lng>25.0243760</lng>
// </southwest>
// <northeast>
// <lat>54.8325440</lat>
// <lng>25.4814883</lng>
// </northeast>
// </bounds>
// </geometry>
// </result>
// <result>
// <type>administrative_area_level_1</type>
// <type>political</type>
// <formatted_address>Vilnius County, Lithuania</formatted_address>
// <address_component>
// <long_name>Vilnius County</long_name>
// <short_name>Vilnius County</short_name>
// <type>administrative_area_level_1</type>
// <type>political</type>
// </address_component>
// <address_component>
// <long_name>Lithuania</long_name>
// <short_name>LT</short_name>
// <type>country</type>
// <type>political</type>
// </address_component>
// <geometry>
// <location>
// <lat>54.8086502</lat>
// <lng>25.2182138</lng>
// </location>
// <location_type>APPROXIMATE</location_type>
// <viewport>
// <southwest>
// <lat>54.1276599</lat>
// <lng>24.3863751</lng>
// </southwest>
// <northeast>
// <lat>55.5174369</lat>
// <lng>26.7602130</lng>
// </northeast>
// </viewport>
// <bounds>
// <southwest>
// <lat>54.1276599</lat>
// <lng>24.3863751</lng>
// </southwest>
// <northeast>
// <lat>55.5174369</lat>
// <lng>26.7602130</lng>
// </northeast>
// </bounds>
// </geometry>
// </result>
// <result>
// <type>country</type>
// <type>political</type>
// <formatted_address>Lithuania</formatted_address>
// <address_component>
// <long_name>Lithuania</long_name>
// <short_name>LT</short_name>
// <type>country</type>
// <type>political</type>
// </address_component>
// <geometry>
// <location>
// <lat>55.1694380</lat>
// <lng>23.8812750</lng>
// </location>
// <location_type>APPROXIMATE</location_type>
// <viewport>
// <southwest>
// <lat>53.8968787</lat>
// <lng>20.9543679</lng>
// </southwest>
// <northeast>
// <lat>56.4503209</lat>
// <lng>26.8355913</lng>
// </northeast>
// </viewport>
// <bounds>
// <southwest>
// <lat>53.8968787</lat>
// <lng>20.9543679</lng>
// </southwest>
// <northeast>
// <lat>56.4503209</lat>
// <lng>26.8355913</lng>
// </northeast>
// </bounds>
// </geometry>
// </result>
//</GeocodeResponse>
 
#endregion
 
XmlDocument doc = new XmlDocument();
doc.LoadXml(reverse);
 
XmlNode nn = doc.SelectSingleNode("//status");
if (nn != null)
{
if (nn.InnerText != "OK")
{
Debug.WriteLine("GetPlacemarkFromReverseGeocoderUrl: " + nn.InnerText);
}
else
{
status = GeoCoderStatusCode.G_GEO_SUCCESS;
 
if (cache && GMaps.Instance.UsePlacemarkCache)
{
Cache.Instance.SaveContent(url, CacheType.PlacemarkCache, reverse);
}
 
placemarkList = new List<Placemark>();
 
#region -- placemarks --
XmlNodeList l = doc.SelectNodes("//result");
if (l != null)
{
foreach (XmlNode n in l)
{
Debug.WriteLine("---------------------");
 
nn = n.SelectSingleNode("formatted_address");
if (nn != null)
{
var ret = new Placemark(nn.InnerText);
 
Debug.WriteLine("formatted_address: [" + nn.InnerText + "]");
 
nn = n.SelectSingleNode("type");
if (nn != null)
{
Debug.WriteLine("type: " + nn.InnerText);
}
 
// TODO: fill Placemark details
 
XmlNodeList acl = n.SelectNodes("address_component");
foreach (XmlNode ac in acl)
{
nn = ac.SelectSingleNode("type");
if (nn != null)
{
var type = nn.InnerText;
Debug.Write(" - [" + type + "], ");
 
nn = ac.SelectSingleNode("long_name");
if (nn != null)
{
Debug.WriteLine("long_name: [" + nn.InnerText + "]");
 
switch (type)
{
case "street_address":
{
ret.StreetNumber = nn.InnerText;
}
break;
 
case "route":
{
ret.ThoroughfareName = nn.InnerText;
}
break;
 
case "postal_code":
{
ret.PostalCodeNumber = nn.InnerText;
}
break;
 
case "country":
{
ret.CountryName = nn.InnerText;
}
break;
 
case "locality":
{
ret.LocalityName = nn.InnerText;
}
break;
 
case "administrative_area_level_2":
{
ret.DistrictName = nn.InnerText;
}
break;
 
case "administrative_area_level_1":
{
ret.AdministrativeAreaName = nn.InnerText;
}
break;
 
case "administrative_area_level_3":
{
ret.SubAdministrativeAreaName = nn.InnerText;
}
break;
 
case "neighborhood":
{
ret.Neighborhood = nn.InnerText;
}
break;
}
}
}
}
 
placemarkList.Add(ret);
}
}
}
#endregion
}
}
#endregion
}
}
}
catch (Exception ex)
{
status = GeoCoderStatusCode.ExceptionInCode;
placemarkList = null;
Debug.WriteLine("GetPlacemarkReverseGeocoderUrl: " + ex.ToString());
}
 
return status;
}
 
static readonly string ReverseGeocoderUrlFormat = "http://maps.{0}/maps/api/geocode/xml?latlng={1},{2}&language={3}&sensor=false";
static readonly string GeocoderUrlFormat = "http://maps.{0}/maps/api/geocode/xml?address={1}&language={2}&sensor=false";
 
#endregion
 
#region DirectionsProvider Members
 
public DirectionsStatusCode GetDirections(out GDirections direction, PointLatLng start, PointLatLng end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
return GetDirectionsUrl(MakeDirectionsUrl(start, end, LanguageStr, avoidHighways, avoidTolls, walkingMode, sensor, metric), out direction);
}
 
public DirectionsStatusCode GetDirections(out GDirections direction, string start, string end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
return GetDirectionsUrl(MakeDirectionsUrl(start, end, LanguageStr, avoidHighways, avoidTolls, walkingMode, sensor, metric), out direction);
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="status"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="avoidHighways"></param>
/// <param name="avoidTolls"></param>
/// <param name="walkingMode"></param>
/// <param name="sensor"></param>
/// <param name="metric"></param>
/// <returns></returns>
public IEnumerable<GDirections> GetDirections(out DirectionsStatusCode status, string start, string end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
// TODO: add alternative directions
 
throw new NotImplementedException();
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="status"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="avoidHighways"></param>
/// <param name="avoidTolls"></param>
/// <param name="walkingMode"></param>
/// <param name="sensor"></param>
/// <param name="metric"></param>
/// <returns></returns>
public IEnumerable<GDirections> GetDirections(out DirectionsStatusCode status, PointLatLng start, PointLatLng end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
// TODO: add alternative directions
 
throw new NotImplementedException();
}
 
public DirectionsStatusCode GetDirections(out GDirections direction, PointLatLng start, IEnumerable<PointLatLng> wayPoints, PointLatLng end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
return GetDirectionsUrl(MakeDirectionsUrl(start, wayPoints, end, LanguageStr, avoidHighways, avoidTolls, walkingMode, sensor, metric), out direction);
}
 
public DirectionsStatusCode GetDirections(out GDirections direction, string start, IEnumerable<string> wayPoints, string end, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
return GetDirectionsUrl(MakeDirectionsUrl(start, wayPoints, end, LanguageStr, avoidHighways, avoidTolls, walkingMode, sensor, metric), out direction);
}
 
#region -- internals --
 
// The Coogle Directions API: http://tinyurl.com/6vv4cac
 
string MakeDirectionsUrl(PointLatLng start, PointLatLng end, string language, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
string av = (avoidHighways ? "&avoid=highways" : string.Empty) + (avoidTolls ? "&avoid=tolls" : string.Empty); // 6
string mt = "&units=" + (metric ? "metric" : "imperial"); // 7
string wk = "&mode=" + (walkingMode ? "walking" : "driving"); // 8
 
return string.Format(CultureInfo.InvariantCulture, DirectionUrlFormatPoint, start.Lat, start.Lng, end.Lat, end.Lng, sensor.ToString().ToLower(), language, av, mt, wk, ServerAPIs);
}
 
string MakeDirectionsUrl(string start, string end, string language, bool avoidHighways, bool walkingMode, bool avoidTolls, bool sensor, bool metric)
{
string av = (avoidHighways ? "&avoid=highways" : string.Empty) + (avoidTolls ? "&avoid=tolls" : string.Empty); // 4
string mt = "&units=" + (metric ? "metric" : "imperial"); // 5
string wk = "&mode=" + (walkingMode ? "walking" : "driving"); // 6
 
return string.Format(DirectionUrlFormatStr, start.Replace(' ', '+'), end.Replace(' ', '+'), sensor.ToString().ToLower(), language, av, mt, wk, ServerAPIs);
}
 
string MakeDirectionsUrl(PointLatLng start, IEnumerable<PointLatLng> wayPoints, PointLatLng end, string language, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
string av = (avoidHighways ? "&avoid=highways" : string.Empty) + (avoidTolls ? "&avoid=tolls" : string.Empty); // 6
string mt = "&units=" + (metric ? "metric" : "imperial"); // 7
string wk = "&mode=" + (walkingMode ? "walking" : "driving"); // 8
 
string wpLatLng = string.Empty;
int i = 0;
foreach (var wp in wayPoints)
{
wpLatLng += string.Format(CultureInfo.InvariantCulture, i++ == 0 ? "{0},{1}" : "|{0},{1}", wp.Lat, wp.Lng);
}
 
return string.Format(CultureInfo.InvariantCulture, DirectionUrlFormatWaypoint, start.Lat, start.Lng, wpLatLng, sensor.ToString().ToLower(), language, av, mt, wk, ServerAPIs, end.Lat, end.Lng);
}
 
string MakeDirectionsUrl(string start, IEnumerable<string> wayPoints, string end, string language, bool avoidHighways, bool avoidTolls, bool walkingMode, bool sensor, bool metric)
{
string av = (avoidHighways ? "&avoid=highways" : string.Empty) + (avoidTolls ? "&avoid=tolls" : string.Empty); // 6
string mt = "&units=" + (metric ? "metric" : "imperial"); // 7
string wk = "&mode=" + (walkingMode ? "walking" : "driving"); // 8
 
string wpLatLng = string.Empty;
int i = 0;
foreach (var wp in wayPoints)
{
wpLatLng += string.Format(CultureInfo.InvariantCulture, i++ == 0 ? "{0}" : "|{0}", wp.Replace(' ', '+'));
}
 
return string.Format(CultureInfo.InvariantCulture, DirectionUrlFormatWaypointStr, start.Replace(' ', '+'), wpLatLng, sensor.ToString().ToLower(), language, av, mt, wk, ServerAPIs, end.Replace(' ', '+'));
}
 
DirectionsStatusCode GetDirectionsUrl(string url, out GDirections direction)
{
DirectionsStatusCode ret = DirectionsStatusCode.UNKNOWN_ERROR;
direction = null;
 
try
{
string kml = GMaps.Instance.UseDirectionsCache ? Cache.Instance.GetContent(url, CacheType.DirectionsCache) : string.Empty;
 
bool cache = false;
 
if (string.IsNullOrEmpty(kml))
{
string urls = url;
 
// Must provide either API key or Maps for Work credentials.
if (!string.IsNullOrEmpty(ClientId))
{
urls = GetSignedUri(url);
}
else if (!string.IsNullOrEmpty(ApiKey))
{
urls += "&key=" + ApiKey;
}
 
kml = GetContentUsingHttp(urls);
 
if (!string.IsNullOrEmpty(kml))
{
cache = true;
}
}
 
if (!string.IsNullOrEmpty(kml))
{
#region -- kml response --
//<?xml version="1.0" encoding="UTF-8"?>
//<DirectionsResponse>
// <status>OK</status>
// <route>
// <summary>A1/E85</summary>
// <leg>
// <step>
// <travel_mode>DRIVING</travel_mode>
// <start_location>
// <lat>54.6893800</lat>
// <lng>25.2800500</lng>
// </start_location>
// <end_location>
// <lat>54.6907800</lat>
// <lng>25.2798000</lng>
// </end_location>
// <polyline>
// <points>soxlIiohyCYLkCJ}@Vs@?</points>
// </polyline>
// <duration>
// <value>32</value>
// <text>1 min</text>
// </duration>
// <html_instructions>Head &lt;b&gt;north&lt;/b&gt; on &lt;b&gt;Vilniaus gatvė&lt;/b&gt; toward &lt;b&gt;Tilto gatvė&lt;/b&gt;</html_instructions>
// <distance>
// <value>157</value>
// <text>0.2 km</text>
// </distance>
// </step>
// <step>
// <travel_mode>DRIVING</travel_mode>
// <start_location>
// <lat>54.6907800</lat>
// <lng>25.2798000</lng>
// </start_location>
// <end_location>
// <lat>54.6942500</lat>
// <lng>25.2621300</lng>
// </end_location>
// <polyline>
// <points>kxxlIwmhyCmApUF`@GvAYpD{@dGcCjIoIvOuAhDwAtEa@vBUnDAhB?~AThDRxAh@hBtAdC</points>
// </polyline>
// <duration>
// <value>133</value>
// <text>2 mins</text>
// </duration>
// <html_instructions>Turn &lt;b&gt;left&lt;/b&gt; onto &lt;b&gt;A. Goštauto gatvė&lt;/b&gt;</html_instructions>
// <distance>
// <value>1326</value>
// <text>1.3 km</text>
// </distance>
// </step>
// <step>
// <travel_mode>DRIVING</travel_mode>
// <start_location>
// <lat>54.6942500</lat>
// <lng>25.2621300</lng>
// </start_location>
// <end_location>
// <lat>54.6681200</lat>
// <lng>25.2377500</lng>
// </end_location>
// <polyline>
// <points>anylIi_eyC`AwD~@oBLKr@K`U|FdF|@`J^~E[j@Lh@\hB~Bn@tBZhBLrC?zIJ~DzA~OVrELlG^lDdAtDh@hAfApA`EzCvAp@jUpIpAl@bBpAdBpBxA|BdLpV`BxClAbBhBlBbChBpBhAdAXjBHlE_@t@?|@Lt@X</points>
// </polyline>
// <duration>
// <value>277</value>
// <text>5 mins</text>
// </duration>
// <html_instructions>Turn &lt;b&gt;left&lt;/b&gt; to merge onto &lt;b&gt;Geležinio Vilko gatvė&lt;/b&gt;</html_instructions>
// <distance>
// <value>3806</value>
// <text>3.8 km</text>
// </distance>
// </step>
// <step>
// <travel_mode>DRIVING</travel_mode>
// <start_location>
// <lat>54.6681200</lat>
// <lng>25.2377500</lng>
// </start_location>
// <end_location>
// <lat>54.6584100</lat>
// <lng>25.1411300</lng>
// </end_location>
// <polyline>
// <points>wjtlI}f`yC~FhBlFr@jD|A~EbC~VjNxBbBdA`BnvA|zCba@l`Bt@tDTbBJpBBfBMvDaAzF}bBjiF{HnXiHxZ</points>
// </polyline>
// <duration>
// <value>539</value>
// <text>9 mins</text>
// </duration>
// <html_instructions>Continue onto &lt;b&gt;Savanorių prospektas&lt;/b&gt;</html_instructions>
// <distance>
// <value>8465</value>
// <text>8.5 km</text>
// </distance>
// </step>
// <step>
// <travel_mode>DRIVING</travel_mode>
// <start_location>
// <lat>54.6584100</lat>
// <lng>25.1411300</lng>
// </start_location>
// <end_location>
// <lat>54.9358200</lat>
// <lng>23.9260000</lng>
// </end_location>
// <polyline>
// <points>anrlIakmxCiq@|qCuBbLcK~n@wUrkAcPnw@gCnPoQt}AoB`MuAdHmAdFoCtJqClImBxE{DrIkQ|ZcEvIkDzIcDhKyBxJ{EdXuCtS_G`g@mF|\eF`WyDhOiE~NiErMaGpOoj@ppAoE|K_EzKeDtKkEnOsLnd@mDzLgI~U{FrNsEvJoEtI_FpI{J`O_EjFooBf_C{GdJ_FjIsH`OoFhMwH`UcDtL{CzMeDlQmAzHuU~bBiArIwApNaBfWaLfiCoBpYsDf\qChR_FlVqEpQ_ZbfA}CfN{A~HwCtRiAfKmBlVwBx[gBfRcBxMaLdp@sXrzAaE~UqCzRyC`[_q@z|LgC|e@m@vNqp@b}WuLraFo@jPaS~bDmJryAeo@v|G}CnWsm@~`EoKvo@kv@lkEkqBrlKwBvLkNj|@cu@`~EgCnNuiBpcJakAx|GyB`KqdC~fKoIfYicAxtCiDrLu@hDyBjQm@xKoGdxBmQhoGuUn|Dc@nJ[`OW|VaEn|Ee@`X</points>
// </polyline>
// <duration>
// <value>3506</value>
// <text>58 mins</text>
// </duration>
// <html_instructions>Continue onto &lt;b&gt;A1/E85&lt;/b&gt;</html_instructions>
// <distance>
// <value>85824</value>
// <text>85.8 km</text>
// </distance>
// </step>
// <step>
// <travel_mode>DRIVING</travel_mode>
// <start_location>
// <lat>54.9358200</lat>
// <lng>23.9260000</lng>
// </start_location>
// <end_location>
// <lat>54.9376500</lat>
// <lng>23.9195600</lng>
// </end_location>
// <polyline>
// <points>{shnIo``qCQ^MnD[lBgA`DqBdEu@xB}@zJCjB</points>
// </polyline>
// <duration>
// <value>39</value>
// <text>1 min</text>
// </duration>
// <html_instructions>Take the exit toward &lt;b&gt;Senamiestis/Aleksotas&lt;/b&gt;</html_instructions>
// <distance>
// <value>476</value>
// <text>0.5 km</text>
// </distance>
// </step>
// <step>
// <travel_mode>DRIVING</travel_mode>
// <start_location>
// <lat>54.9376500</lat>
// <lng>23.9195600</lng>
// </start_location>
// <end_location>
// <lat>54.9361300</lat>
// <lng>23.9189700</lng>
// </end_location>
// <polyline>
// <points>i_inIgx~pCnHtB</points>
// </polyline>
// <duration>
// <value>28</value>
// <text>1 min</text>
// </duration>
// <html_instructions>Turn &lt;b&gt;left&lt;/b&gt; onto &lt;b&gt;Kleboniškio gatvė&lt;/b&gt;</html_instructions>
// <distance>
// <value>173</value>
// <text>0.2 km</text>
// </distance>
// </step>
// <step>
// <travel_mode>DRIVING</travel_mode>
// <start_location>
// <lat>54.9361300</lat>
// <lng>23.9189700</lng>
// </start_location>
// <end_location>
// <lat>54.9018900</lat>
// <lng>23.8937000</lng>
// </end_location>
// <polyline>
// <points>yuhnIqt~pCvAb@JLrOvExSdHvDdAv`@pIpHnAdl@hLdB`@nDvAtEjDdCvCjLzOvAzBhC`GpHfRbQd^`JpMPt@ClA</points>
// </polyline>
// <duration>
// <value>412</value>
// <text>7 mins</text>
// </duration>
// <html_instructions>Continue onto &lt;b&gt;Jonavos gatvė&lt;/b&gt;</html_instructions>
// <distance>
// <value>4302</value>
// <text>4.3 km</text>
// </distance>
// </step>
// <step>
// <travel_mode>DRIVING</travel_mode>
// <start_location>
// <lat>54.9018900</lat>
// <lng>23.8937000</lng>
// </start_location>
// <end_location>
// <lat>54.8985600</lat>
// <lng>23.8933400</lng>
// </end_location>
// <polyline>
// <points>y_bnIsvypCMf@FnARlAf@zAl@^v@EZ_@pAe@x@k@xBPpA@pAQNSf@oB</points>
// </polyline>
// <duration>
// <value>69</value>
// <text>1 min</text>
// </duration>
// <html_instructions>At the roundabout, take the &lt;b&gt;3rd&lt;/b&gt; exit and stay on &lt;b&gt;Jonavos gatvė&lt;/b&gt;</html_instructions>
// <distance>
// <value>478</value>
// <text>0.5 km</text>
// </distance>
// </step>
// <step>
// <travel_mode>DRIVING</travel_mode>
// <start_location>
// <lat>54.8985600</lat>
// <lng>23.8933400</lng>
// </start_location>
// <end_location>
// <lat>54.8968500</lat>
// <lng>23.8930000</lng>
// </end_location>
// <polyline>
// <points>_kanIktypCbEx@pCH</points>
// </polyline>
// <duration>
// <value>38</value>
// <text>1 min</text>
// </duration>
// <html_instructions>Turn &lt;b&gt;right&lt;/b&gt; onto &lt;b&gt;A. Mapu gatvė&lt;/b&gt;&lt;div style=&quot;font-size:0.9em&quot;&gt;Destination will be on the right&lt;/div&gt;</html_instructions>
// <distance>
// <value>192</value>
// <text>0.2 km</text>
// </distance>
// </step>
// <duration>
// <value>5073</value>
// <text>1 hour 25 mins</text>
// </duration>
// <distance>
// <value>105199</value>
// <text>105 km</text>
// </distance>
// <start_location>
// <lat>54.6893800</lat>
// <lng>25.2800500</lng>
// </start_location>
// <end_location>
// <lat>54.8968500</lat>
// <lng>23.8930000</lng>
// </end_location>
// <start_address>Vilnius, Lithuania</start_address>
// <end_address>Kaunas, Lithuania</end_address>
// </leg>
// <copyrights>Map data ©2011 Tele Atlas</copyrights>
// <overview_polyline>
// <points>soxlIiohyCYL}Fb@mApUF`@GvAYpD{@dGcCjIoIvOwBpFy@xC]jBSxCC~E^~Er@lCtAdC`AwD~@oB`AW`U|FdF|@`J^~E[tAj@hB~BjA~ELrCJzOzA~Od@`N^lDdAtDt@xAjAnApDlCbXbKpAl@bBpAdBpBxA|BdLpV`BxCvDpEbChBpBhAdAXjBHbG_@|@LtHbClFr@jK`F~VjNxBbB`@h@rwAt|Cba@l`BjAxGNxEMvDaAzF}bBjiFcFbQ_y@|gD{CxMeBnJcK~n@wh@dkCkAlIoQt}AeEfV}EzQqClImBxE{DrIkQ|ZcEvIkDzIcDhKyBxJ{EdXuCtS_G`g@mF|\eF`WyDhOiE~NiErMaGpOoj@ppAoE|K_EzKeDtKmXzbAgI~U{FrNsEvJoLfT{J`O_EjFooBf_C{GdJkLtSwI`SyClI}CrJcDtL{CzMeDlQcXzlBiArIwApNaBfWaLfiCoBpYsDf\qChR_FlVqEpQ_ZbfAyFfXwCtRiAfKeFfs@gBfRcBxMaLdp@sXrzAaE~UqCzRyC`[_q@z|LuDtu@qp@b}WuLraFo@jPo^r}Faq@pfHaBtMsm@~`EoKvo@kv@lkEcuBjzKkNj|@cu@`~EgCnNuiBpcJakAx|GyB`KqdC~fKoIfYidAbwCoD|MeAbHcA|Im@xK}YnhKyV~gEs@~f@aEn|Ee@`XQ^MnD[lBoF`N}@zJCjBfKxCJLdj@bQv`@pIpHnAdl@hLdB`@nDvAtEjDdCvCbOvSzLhZbQd^`JpMPt@QtBFnAz@hDl@^j@?f@e@pAe@x@k@xBPfCEf@Uj@wBbEx@pCH</points>
// </overview_polyline>
// <bounds>
// <southwest>
// <lat>54.6389500</lat>
// <lng>23.8920900</lng>
// </southwest>
// <northeast>
// <lat>54.9376500</lat>
// <lng>25.2800500</lng>
// </northeast>
// </bounds>
// </route>
//</DirectionsResponse>
#endregion
 
XmlDocument doc = new XmlDocument();
doc.LoadXml(kml);
 
XmlNode nn = doc.SelectSingleNode("/DirectionsResponse/status");
if (nn != null)
{
ret = (DirectionsStatusCode)Enum.Parse(typeof(DirectionsStatusCode), nn.InnerText, false);
if (ret == DirectionsStatusCode.OK)
{
if (cache && GMaps.Instance.UseDirectionsCache)
{
Cache.Instance.SaveContent(url, CacheType.DirectionsCache, kml);
}
 
direction = new GDirections();
 
nn = doc.SelectSingleNode("/DirectionsResponse/route/summary");
if (nn != null)
{
direction.Summary = nn.InnerText;
Debug.WriteLine("summary: " + direction.Summary);
}
 
nn = doc.SelectSingleNode("/DirectionsResponse/route/leg/duration");
if (nn != null)
{
var t = nn.SelectSingleNode("text");
if (t != null)
{
direction.Duration = t.InnerText;
Debug.WriteLine("duration: " + direction.Duration);
}
 
t = nn.SelectSingleNode("value");
if (t != null)
{
if (!string.IsNullOrEmpty(t.InnerText))
{
direction.DurationValue = uint.Parse(t.InnerText);
Debug.WriteLine("value: " + direction.DurationValue);
}
}
}
 
nn = doc.SelectSingleNode("/DirectionsResponse/route/leg/distance");
if (nn != null)
{
var t = nn.SelectSingleNode("text");
if (t != null)
{
direction.Distance = t.InnerText;
Debug.WriteLine("distance: " + direction.Distance);
}
 
t = nn.SelectSingleNode("value");
if (t != null)
{
if (!string.IsNullOrEmpty(t.InnerText))
{
direction.DistanceValue = uint.Parse(t.InnerText);
Debug.WriteLine("value: " + direction.DistanceValue);
}
}
}
 
nn = doc.SelectSingleNode("/DirectionsResponse/route/leg/start_location");
if (nn != null)
{
var pt = nn.SelectSingleNode("lat");
if (pt != null)
{
direction.StartLocation.Lat = double.Parse(pt.InnerText, CultureInfo.InvariantCulture);
}
 
pt = nn.SelectSingleNode("lng");
if (pt != null)
{
direction.StartLocation.Lng = double.Parse(pt.InnerText, CultureInfo.InvariantCulture);
}
}
 
nn = doc.SelectSingleNode("/DirectionsResponse/route/leg/end_location");
if (nn != null)
{
var pt = nn.SelectSingleNode("lat");
if (pt != null)
{
direction.EndLocation.Lat = double.Parse(pt.InnerText, CultureInfo.InvariantCulture);
}
 
pt = nn.SelectSingleNode("lng");
if (pt != null)
{
direction.EndLocation.Lng = double.Parse(pt.InnerText, CultureInfo.InvariantCulture);
}
}
 
nn = doc.SelectSingleNode("/DirectionsResponse/route/leg/start_address");
if (nn != null)
{
direction.StartAddress = nn.InnerText;
Debug.WriteLine("start_address: " + direction.StartAddress);
}
 
nn = doc.SelectSingleNode("/DirectionsResponse/route/leg/end_address");
if (nn != null)
{
direction.EndAddress = nn.InnerText;
Debug.WriteLine("end_address: " + direction.EndAddress);
}
 
nn = doc.SelectSingleNode("/DirectionsResponse/route/copyrights");
if (nn != null)
{
direction.Copyrights = nn.InnerText;
Debug.WriteLine("copyrights: " + direction.Copyrights);
}
 
nn = doc.SelectSingleNode("/DirectionsResponse/route/overview_polyline/points");
if (nn != null)
{
direction.Route = new List<PointLatLng>();
DecodePointsInto(direction.Route, nn.InnerText);
}
 
XmlNodeList steps = doc.SelectNodes("/DirectionsResponse/route/leg/step");
if (steps != null)
{
if (steps.Count > 0)
{
direction.Steps = new List<GDirectionStep>();
}
 
foreach (XmlNode s in steps)
{
GDirectionStep step = new GDirectionStep();
 
Debug.WriteLine("----------------------");
nn = s.SelectSingleNode("travel_mode");
if (nn != null)
{
step.TravelMode = nn.InnerText;
Debug.WriteLine("travel_mode: " + step.TravelMode);
}
 
nn = s.SelectSingleNode("start_location");
if (nn != null)
{
var pt = nn.SelectSingleNode("lat");
if (pt != null)
{
step.StartLocation.Lat = double.Parse(pt.InnerText, CultureInfo.InvariantCulture);
}
 
pt = nn.SelectSingleNode("lng");
if (pt != null)
{
step.StartLocation.Lng = double.Parse(pt.InnerText, CultureInfo.InvariantCulture);
}
}
 
nn = s.SelectSingleNode("end_location");
if (nn != null)
{
var pt = nn.SelectSingleNode("lat");
if (pt != null)
{
step.EndLocation.Lat = double.Parse(pt.InnerText, CultureInfo.InvariantCulture);
}
 
pt = nn.SelectSingleNode("lng");
if (pt != null)
{
step.EndLocation.Lng = double.Parse(pt.InnerText, CultureInfo.InvariantCulture);
}
}
 
nn = s.SelectSingleNode("duration");
if (nn != null)
{
nn = nn.SelectSingleNode("text");
if (nn != null)
{
step.Duration = nn.InnerText;
Debug.WriteLine("duration: " + step.Duration);
}
}
 
nn = s.SelectSingleNode("distance");
if (nn != null)
{
nn = nn.SelectSingleNode("text");
if (nn != null)
{
step.Distance = nn.InnerText;
Debug.WriteLine("distance: " + step.Distance);
}
}
 
nn = s.SelectSingleNode("html_instructions");
if (nn != null)
{
step.HtmlInstructions = nn.InnerText;
Debug.WriteLine("html_instructions: " + step.HtmlInstructions);
}
 
nn = s.SelectSingleNode("polyline");
if (nn != null)
{
nn = nn.SelectSingleNode("points");
if (nn != null)
{
step.Points = new List<PointLatLng>();
DecodePointsInto(step.Points, nn.InnerText);
}
}
 
direction.Steps.Add(step);
}
}
}
}
}
}
catch (Exception ex)
{
direction = null;
ret = DirectionsStatusCode.ExceptionInCode;
Debug.WriteLine("GetDirectionsUrl: " + ex);
}
return ret;
}
 
static void DecodePointsInto(List<PointLatLng> path, string encodedPath)
{
// https://github.com/googlemaps/google-maps-services-java/blob/master/src/main/java/com/google/maps/internal/PolylineEncoding.java
int len = encodedPath.Length;
int index = 0;
int lat = 0;
int lng = 0;
while (index < len)
{
int result = 1;
int shift = 0;
int b;
do
{
b = encodedPath[index++] - 63 - 1;
result += b << shift;
shift += 5;
} while (b >= 0x1f && index < len);
lat += (result & 1) != 0 ? ~(result >> 1) : (result >> 1);
 
result = 1;
shift = 0;
 
if (index < len)
{
do
{
b = encodedPath[index++] - 63 - 1;
result += b << shift;
shift += 5;
} while (b >= 0x1f && index < len);
lng += (result & 1) != 0 ? ~(result >> 1) : (result >> 1);
}
 
path.Add(new PointLatLng(lat * 1e-5, lng * 1e-5));
}
}
 
static readonly string DirectionUrlFormatStr = "http://maps.{7}/maps/api/directions/xml?origin={0}&destination={1}&sensor={2}&language={3}{4}{5}{6}";
static readonly string DirectionUrlFormatPoint = "http://maps.{9}/maps/api/directions/xml?origin={0},{1}&destination={2},{3}&sensor={4}&language={5}{6}{7}{8}";
static readonly string DirectionUrlFormatWaypoint = "http://maps.{8}/maps/api/directions/xml?origin={0},{1}&waypoints={2}&destination={9},{10}&sensor={3}&language={4}{5}{6}{7}";
static readonly string DirectionUrlFormatWaypointStr = "http://maps.{7}/maps/api/directions/xml?origin={0}&waypoints={1}&destination={8}&sensor={2}&language={3}{4}{5}{6}";
 
#endregion
 
#endregion
 
#region -- Maps API for Work --
/// <summary>
/// https://developers.google.com/maps/documentation/business/webservices/auth#how_do_i_get_my_signing_key
/// To access the special features of the Google Maps API for Work you must provide a client ID
/// when accessing any of the API libraries or services.
/// When registering for Google Google Maps API for Work you will receive this client ID from Enterprise Support.
/// All client IDs begin with a gme- prefix. Your client ID is passed as the value of the client parameter.
/// Generally, you should store your private key someplace safe and read them into your code
/// </summary>
/// <param name="clientId"></param>
/// <param name="privateKey"></param>
public void SetEnterpriseCredentials(string clientId, string privateKey)
{
privateKey = privateKey.Replace("-", "+").Replace("_", "/");
_privateKeyBytes = Convert.FromBase64String(privateKey);
_clientId = clientId;
}
private byte[] _privateKeyBytes;
 
private string _clientId = string.Empty;
 
/// <summary>
/// Your client ID. To access the special features of the Google Maps API for Work
/// you must provide a client ID when accessing any of the API libraries or services.
/// When registering for Google Google Maps API for Work you will receive this client ID
/// from Enterprise Support. All client IDs begin with a gme- prefix.
/// </summary>
public string ClientId
{
get
{
return _clientId;
}
}
 
string GetSignedUri(Uri uri)
{
var builder = new UriBuilder(uri);
builder.Query = builder.Query.Substring(1) + "&client=" + _clientId;
uri = builder.Uri;
string signature = GetSignature(uri);
 
return uri.Scheme + "://" + uri.Host + uri.LocalPath + uri.Query + "&signature=" + signature;
}
 
string GetSignedUri(string url)
{
return GetSignedUri(new Uri(url));
}
 
string GetSignature(Uri uri)
{
byte[] encodedPathQuery = Encoding.ASCII.GetBytes(uri.LocalPath + uri.Query);
var hashAlgorithm = new HMACSHA1(_privateKeyBytes);
byte[] hashed = hashAlgorithm.ComputeHash(encodedPathQuery);
return Convert.ToBase64String(hashed).Replace("+", "-").Replace("/", "_");
}
#endregion
}
 
/// <summary>
/// GoogleMap provider
/// </summary>
public class GoogleMapProvider : GoogleMapProviderBase
{
public static readonly GoogleMapProvider Instance;
 
GoogleMapProvider()
{
}
 
static GoogleMapProvider()
{
Instance = new GoogleMapProvider();
}
 
public string Version = "m@365000000"; //"m@333000000";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("D7287DA0-A7FF-405F-8166-B6BAF26D066C");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty; // after &x=...
string sec2 = string.Empty; // after &zoom=...
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, language, pos.X, sec1, pos.Y, zoom, sec2, Server);
}
 
static readonly string UrlFormatServer = "mt";
static readonly string UrlFormatRequest = "vt";
static readonly string UrlFormat = "http://{0}{1}.{10}/maps/{2}/lyrs={3}&hl={4}&x={5}{6}&y={7}&z={8}&s={9}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/GoogleSatelliteMapProvider.cs
0,0 → 1,66

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// GoogleSatelliteMap provider
/// </summary>
public class GoogleSatelliteMapProvider : GoogleMapProviderBase
{
public static readonly GoogleSatelliteMapProvider Instance;
 
GoogleSatelliteMapProvider()
{
}
 
static GoogleSatelliteMapProvider()
{
Instance = new GoogleSatelliteMapProvider();
}
 
public string Version = "701";//"192";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("9CB89D76-67E9-47CF-8137-B9EE9FC46388");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleSatelliteMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty; // after &x=...
string sec2 = string.Empty; // after &zoom=...
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, language, pos.X, sec1, pos.Y, zoom, sec2, Server);
}
 
static readonly string UrlFormatServer = "khm";
static readonly string UrlFormatRequest = "kh";
static readonly string UrlFormat = "http://{0}{1}.{10}/{2}/v={3}&hl={4}&x={5}{6}&y={7}&z={8}&s={9}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/GoogleTerrainMapProvider.cs
0,0 → 1,66

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// GoogleTerrainMap provider
/// </summary>
public class GoogleTerrainMapProvider : GoogleMapProviderBase
{
public static readonly GoogleTerrainMapProvider Instance;
 
GoogleTerrainMapProvider()
{
}
 
static GoogleTerrainMapProvider()
{
Instance = new GoogleTerrainMapProvider();
}
 
public string Version = "t@365,r@365000000"; // "t@132,r@333000000";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("A42EDF2E-63C5-4967-9DBF-4EFB3AF7BC11");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleTerrainMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty; // after &x=...
string sec2 = string.Empty; // after &zoom=...
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, language, pos.X, sec1, pos.Y, zoom, sec2, Server);
}
 
static readonly string UrlFormatServer = "mt";
static readonly string UrlFormatRequest = "vt";
static readonly string UrlFormat = "http://{0}{1}.{10}/maps/{2}/lyrs={3}&hl={4}&x={5}{6}&y={7}&z={8}&s={9}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/Korea/GoogleKoreaHybridMapProvider.cs
0,0 → 1,79

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// GoogleKoreaHybridMap provider
/// </summary>
public class GoogleKoreaHybridMapProvider : GoogleMapProviderBase
{
public static readonly GoogleKoreaHybridMapProvider Instance;
 
GoogleKoreaHybridMapProvider()
{
}
 
static GoogleKoreaHybridMapProvider()
{
Instance = new GoogleKoreaHybridMapProvider();
}
 
public string Version = "kr1t.12";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("41A91842-04BC-442B-9AC8-042156238A5B");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleKoreaHybridMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { GoogleKoreaSatelliteMapProvider.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty;
string sec2 = string.Empty;
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, language, pos.X, sec1, pos.Y, zoom, sec2, ServerKorea);
}
 
static readonly string UrlFormatServer = "mt";
static readonly string UrlFormatRequest = "mt";
static readonly string UrlFormat = "http://{0}{1}.{10}/{2}/v={3}&hl={4}&x={5}{6}&y={7}&z={8}&s={9}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/Korea/GoogleKoreaMapProvider.cs
0,0 → 1,67

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// GoogleKoreaMap provider
/// </summary>
public class GoogleKoreaMapProvider : GoogleMapProviderBase
{
public static readonly GoogleKoreaMapProvider Instance;
 
GoogleKoreaMapProvider()
{
Area = new RectLatLng(38.6597777307125, 125.738525390625, 4.02099609375, 4.42072406219614);
}
 
static GoogleKoreaMapProvider()
{
Instance = new GoogleKoreaMapProvider();
}
 
public string Version = "kr1.12";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("0079D360-CB1B-4986-93D5-AD299C8E20E6");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleKoreaMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty;
string sec2 = string.Empty;
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, language, pos.X, sec1, pos.Y, zoom, sec2, ServerKorea);
}
 
static readonly string UrlFormatServer = "mt";
static readonly string UrlFormatRequest = "mt";
static readonly string UrlFormat = "http://{0}{1}.{10}/{2}/v={3}&hl={4}&x={5}{6}&y={7}&z={8}&s={9}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Google/Korea/GoogleKoreaSatelliteMapProvider.cs
0,0 → 1,66

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// GoogleKoreaSatelliteMap provider
/// </summary>
public class GoogleKoreaSatelliteMapProvider : GoogleMapProviderBase
{
public static readonly GoogleKoreaSatelliteMapProvider Instance;
 
GoogleKoreaSatelliteMapProvider()
{
}
 
static GoogleKoreaSatelliteMapProvider()
{
Instance = new GoogleKoreaSatelliteMapProvider();
}
 
public string Version = "170";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("70370941-D70C-4123-BE4A-AEE6754047F5");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "GoogleKoreaSatelliteMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
string sec1 = string.Empty;
string sec2 = string.Empty;
GetSecureWords(pos, out sec1, out sec2);
 
return string.Format(UrlFormat, UrlFormatServer, GetServerNum(pos, 4), UrlFormatRequest, Version, language, pos.X, sec1, pos.Y, zoom, sec2, ServerKoreaKr);
}
 
static readonly string UrlFormatServer = "khm";
static readonly string UrlFormatRequest = "kh";
static readonly string UrlFormat = "http://{0}{1}.{10}/{2}/v={3}&hl={4}&x={5}{6}&y={7}&z={8}&s={9}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Lithuania/Lithuania3dMapProvider.cs
0,0 → 1,65

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// Lithuania3dMap (2.5d) provider
/// </summary>
public class Lithuania3dMapProvider : LithuaniaMapProviderBase
{
public static readonly Lithuania3dMapProvider Instance;
 
Lithuania3dMapProvider()
{
}
 
static Lithuania3dMapProvider()
{
Instance = new Lithuania3dMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("CCC5B65F-C8BC-47CE-B39D-5E262E6BF083");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "Lithuania 2.5d Map";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://dc1.maps.lt/cache/mapslt_25d_vkkp/map/_alllayers/L01/R00007194/C0000a481.png
int z = zoom;
if(zoom >= 10)
{
z -= 10;
}
 
return string.Format(UrlFormat, z, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://dc1.maps.lt/cache/mapslt_25d_vkkp/map/_alllayers/L{0:00}/R{1:x8}/C{2:x8}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Lithuania/LithuaniaHybridMapProvider.cs
0,0 → 1,73

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// LithuaniaHybridMap provider
/// </summary>
public class LithuaniaHybridMapProvider : LithuaniaMapProviderBase
{
public static readonly LithuaniaHybridMapProvider Instance;
 
LithuaniaHybridMapProvider()
{
}
 
static LithuaniaHybridMapProvider()
{
Instance = new LithuaniaHybridMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("279AB0E0-4704-4AA6-86AD-87D13B1F8975");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "LithuaniaHybridMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { LithuaniaOrtoFotoMapProvider.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://dc5.maps.lt/cache/mapslt_ortofoto_overlay/map/_alllayers/L09/R000016b1/C000020e1.jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
internal static readonly string UrlFormat = "http://dc5.maps.lt/cache/mapslt_ortofoto_overlay/map/_alllayers/L{0:00}/R{1:x8}/C{2:x8}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Lithuania/LithuaniaHybridOldMapProvider.cs
0,0 → 1,57

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// LithuaniaHybridOldMap, from 2010 data, provider
/// </summary>
public class LithuaniaHybridOldMapProvider : LithuaniaMapProviderBase
{
public static readonly LithuaniaHybridOldMapProvider Instance;
 
LithuaniaHybridOldMapProvider()
{
}
 
static LithuaniaHybridOldMapProvider()
{
Instance = new LithuaniaHybridOldMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("35C5C685-E868-4AC7-97BE-10A9A37A81B5");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "LithuaniaHybridMapOld";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { LithuaniaOrtoFotoOldMapProvider.Instance, LithuaniaHybridMapProvider.Instance };
}
return overlays;
}
}
 
#endregion
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Lithuania/LithuaniaMapProvider.cs
0,0 → 1,116

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
public abstract class LithuaniaMapProviderBase : GMapProvider
{
public LithuaniaMapProviderBase()
{
RefererUrl = "http://www.maps.lt/map/";
Copyright = string.Format("©{0} Hnit-Baltic - Map data ©{0} ESRI", DateTime.Today.Year);
MaxZoom = 12;
Area = new RectLatLng(56.431489960361, 20.8962105239809, 5.8924169643369, 2.58940626652217);
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return LKS94Projection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
}
 
/// <summary>
/// LithuaniaMap provider, http://www.maps.lt/map/
/// </summary>
public class LithuaniaMapProvider : LithuaniaMapProviderBase
{
public static readonly LithuaniaMapProvider Instance;
 
LithuaniaMapProvider()
{
}
 
static LithuaniaMapProvider()
{
Instance = new LithuaniaMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("5859079F-1B5E-484B-B05C-41CE664D8A93");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "LithuaniaMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://dc5.maps.lt/cache/mapslt/map/_alllayers/L08/R00000912/C00000d25.png
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://dc5.maps.lt/cache/mapslt/map/_alllayers/L{0:00}/R{1:x8}/C{2:x8}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Lithuania/LithuaniaOrtoFotoMapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// LithuaniaOrtoFotoMap provider
/// </summary>
public class LithuaniaOrtoFotoMapProvider : LithuaniaMapProviderBase
{
public static readonly LithuaniaOrtoFotoMapProvider Instance;
 
LithuaniaOrtoFotoMapProvider()
{
}
 
static LithuaniaOrtoFotoMapProvider()
{
Instance = new LithuaniaOrtoFotoMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("043FF9EF-612C-411F-943C-32C787A88D6A");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "LithuaniaOrtoFotoMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://dc5.maps.lt/cache/mapslt_ortofoto/map/_alllayers/L08/R00000914/C00000d28.jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://dc5.maps.lt/cache/mapslt_ortofoto/map/_alllayers/L{0:00}/R{1:x8}/C{2:x8}.jpg";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Lithuania/LithuaniaOrtoFotoOldMapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// LithuaniaOrtoFotoNewMap, from 2010 data, provider
/// </summary>
public class LithuaniaOrtoFotoOldMapProvider : LithuaniaMapProviderBase
{
public static readonly LithuaniaOrtoFotoOldMapProvider Instance;
 
LithuaniaOrtoFotoOldMapProvider()
{
}
 
static LithuaniaOrtoFotoOldMapProvider()
{
Instance = new LithuaniaOrtoFotoOldMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("C37A148E-0A7D-4123-BE4E-D0D3603BE46B");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "LithuaniaOrtoFotoMapOld";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://dc1.maps.lt/cache/mapslt_ortofoto_2010/map/_alllayers/L09/R000016b1/C000020e2.jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://dc1.maps.lt/cache/mapslt_ortofoto_2010/map/_alllayers/L{0:00}/R{1:x8}/C{2:x8}.jpg";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Lithuania/LithuaniaReliefMapProvider.cs
0,0 → 1,70

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
/// <summary>
/// LithuaniaReliefMap provider, http://www.maps.lt/map/
/// </summary>
public class LithuaniaReliefMapProvider : LithuaniaMapProviderBase
{
public static readonly LithuaniaReliefMapProvider Instance;
 
LithuaniaReliefMapProvider()
{
 
}
 
static LithuaniaReliefMapProvider()
{
Instance = new LithuaniaReliefMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("85F89205-1062-4F10-B536-90CD8B2F1B7D");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "LithuaniaReliefMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureProjection Projection
{
get
{
return LKS94rProjection.Instance;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://dc5.maps.lt/cache/mapslt_relief_vector/map/_alllayers/L09/R00001892/C000020df.jpg
 
return string.Format(UrlFormat, zoom, pos.Y, pos.X);
}
 
static readonly string UrlFormat = "http://dc5.maps.lt/cache/mapslt_relief_vector/map/_alllayers/L{0:00}/R{1:x8}/C{2:x8}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Lithuania/LithuaniaTOP50.cs
0,0 → 1,67

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
public class LithuaniaTOP50 : GMapProvider
{
public static readonly LithuaniaTOP50 Instance;
 
LithuaniaTOP50()
{
MaxZoom = 15;
}
 
static LithuaniaTOP50()
{
Instance = new LithuaniaTOP50();
}
 
#region GMapProvider Members
 
Guid id = new Guid("2920B1AF-6D57-4895-9A21-D5837CBF1049");
public override Guid Id
{
get
{
return id;
}
}
 
public override string Name
{
get
{
return "LithuaniaTOP50";
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if (overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
return null;
}
#endregion
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/NearMap/NearHybridMapProvider.cs
0,0 → 1,74

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// NearHybridMap provider - http://www.nearmap.com/
/// </summary>
public class NearHybridMapProvider : NearMapProviderBase
{
public static readonly NearHybridMapProvider Instance;
 
NearHybridMapProvider()
{
}
 
static NearHybridMapProvider()
{
Instance = new NearHybridMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("4BF8819A-635D-4A94-8DC7-94C0E0F04BFD");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "NearHybridMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { NearSatelliteMapProvider.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://web1.nearmap.com/maps/hl=en&x=37&y=19&z=6&nml=MapT&nmg=1&s=2KbhmZZ
// http://web1.nearmap.com/maps/hl=en&x=36&y=19&z=6&nml=MapT&nmg=1&s=2YKWhQi
 
return string.Format(UrlFormat, GetServerNum(pos, 3), pos.X, pos.Y, zoom);
}
 
static readonly string UrlFormat = "http://web{0}.nearmap.com/maps/hl=en&x={1}&y={2}&z={3}&nml=MapT&nmg=1";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/NearMap/NearMapProvider.cs
0,0 → 1,184

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
using System.Net;
using System.Text;
 
/// <summary>
/// http://en.wikipedia.org/wiki/NearMap
/// nearmap originally allowed personal use of images for free for non-enterprise users.
/// However this free access ended in December 2012, when the company modified its business model to user-pay
/// </summary>
public abstract class NearMapProviderBase : GMapProvider
{
public NearMapProviderBase()
{
// credentials doesn't work ;/
//Credential = new NetworkCredential("greatmaps", "greatmaps");
//try ForceBasicHttpAuthentication(...);
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
 
public new static int GetServerNum(GPoint pos, int max)
{
// var hostNum=((opts.nodes!==0)?((tileCoords.x&2)%opts.nodes):0)+opts.nodeStart;
return (int)(pos.X & 2) % max;
}
 
static readonly string SecureStr = "Vk52edzNRYKbGjF8Ur0WhmQlZs4wgipDETyL1oOMXIAvqtxJBuf7H36acCnS9P";
 
public string GetSafeString(GPoint pos)
{
#region -- source --
/*
TileLayer.prototype.differenceEngine=function(s,a)
{
var offset=0,result="",alen=a.length,v,p;
for(var i=0; i<alen; i++)
{
v=parseInt(a.charAt(i),10);
if(!isNaN(v))
{
offset+=v;
p=s.charAt(offset%s.length);
result+=p
}
}
return result
};
TileLayer.prototype.getSafeString=function(x,y,nmd)
{
var arg=x.toString()+y.toString()+((3*x)+y).toString();
if(nmd)
{
arg+=nmd
}
return this.differenceEngine(TileLayer._substring,arg)
};
*/
#endregion
 
var arg = pos.X.ToString() + pos.Y.ToString() + ((3 * pos.X) + pos.Y).ToString();
 
string ret = "&s=";
int offset = 0;
for(int i = 0; i < arg.Length; i++)
{
offset += int.Parse(arg[i].ToString());
ret += SecureStr[offset % SecureStr.Length];
}
 
return ret;
}
}
 
/// <summary>
/// NearMap provider - http://www.nearmap.com/
/// </summary>
public class NearMapProvider : NearMapProviderBase
{
public static readonly NearMapProvider Instance;
 
NearMapProvider()
{
RefererUrl = "http://www.nearmap.com/";
}
 
static NearMapProvider()
{
Instance = new NearMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("E33803DF-22CB-4FFA-B8E3-15383ED9969D");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "NearMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://web1.nearmap.com/maps/hl=en&x=18681&y=10415&z=15&nml=Map_&nmg=1&s=kY8lZssipLIJ7c5
// http://web1.nearmap.com/kh/v=nm&hl=en&x=20&y=8&z=5&nml=Map_&s=55KUZ
//http://maps.au.nearmap.com/api/0/authentication/checkticket?nmf=json&return200=true&callback=jQuery110206126813754172529_1431499242400&_=1431499242401
//jQuery110206126813754172529_1431499242400({"IncidentId":null,"AccountContext":{"AccountId":"account2574457","Username":"demo"},"Result":{"Ticket":{"Ticket":"1637726D061CB8B8A28BC98064443C96FB07008C16531B2F5100F98B9EBFE69C4083C88C920D3BF4C0768A27ADE9ECADF324A380DBF80C3C0982DC83374FE8EBF0F70868735351FC7","Expires":"\/Date(1432103400000)\/","CookieName":"nearmap_web3_app"},"Status":"Ok","Username":"demo","AccountId":"account2574457"}})
// http://web1.au.nearmap.com/maps/hl=en&x=1855837&y=1265913&z=21&nml=V&httpauth=false&version=2
// http://web2.au.nearmap.com/maps/hl=en&x=231977&y=158238&z=18&nml=Dem&httpauth=false&version=2
return string.Format(UrlFormat, GetServerNum(pos, 3), pos.X, pos.Y, zoom, GetSafeString(pos));
}
 
static readonly string UrlFormat = "http://web{0}.nearmap.com/kh/v=nm&hl=en&x={1}&y={2}&z={3}&nml=Map_{4}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/NearMap/NearSatelliteMapProvider.cs
0,0 → 1,63

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// NearSatelliteMap provider - http://www.nearmap.com/
/// </summary>
public class NearSatelliteMapProvider : NearMapProviderBase
{
public static readonly NearSatelliteMapProvider Instance;
 
NearSatelliteMapProvider()
{
}
 
static NearSatelliteMapProvider()
{
Instance = new NearSatelliteMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("56D00148-05B7-408D-8F7A-8D7250FF8121");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "NearSatelliteMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://web2.nearmap.com/maps/hl=en&x=14&y=8&z=5&nml=Vert&s=kdj00
// http://web2.nearmap.com/maps/hl=en&x=6&y=4&z=4&nml=Vert
// http://web2.nearmap.com/maps/hl=en&x=3&y=1&z=3&nml=Vert&s=2edd
// http://web0.nearmap.com/maps/hl=en&x=69&y=39&z=7&nml=Vert&s=z80wiTM
 
return string.Format(UrlFormat, GetServerNum(pos, 4), pos.X, pos.Y, zoom, GetSafeString(pos));
}
 
static readonly string UrlFormat = "http://web{0}.nearmap.com/maps/hl=en&x={1}&y={2}&z={3}&nml=Vert{4}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenCycleLandscapeMapProvider.cs
0,0 → 1,74

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OpenCycleMap Landscape provider - http://www.opencyclemap.org
/// </summary>
public class OpenCycleLandscapeMapProvider : OpenStreetMapProviderBase
{
public static readonly OpenCycleLandscapeMapProvider Instance;
 
OpenCycleLandscapeMapProvider()
{
RefererUrl = "http://www.opencyclemap.org/";
}
 
static OpenCycleLandscapeMapProvider()
{
Instance = new OpenCycleLandscapeMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("BDBAA939-6597-4D87-8F4F-261C49E35F56");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenCycleLandscapeMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
char letter = ServerLetters[GMapProvider.GetServerNum(pos, 3)];
return string.Format(UrlFormat, letter, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://{0}.tile3.opencyclemap.org/landscape/{1}/{2}/{3}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenCycleMapProvider.cs
0,0 → 1,73

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OpenCycleMap provider - http://www.opencyclemap.org
/// </summary>
public class OpenCycleMapProvider : OpenStreetMapProviderBase
{
public static readonly OpenCycleMapProvider Instance;
 
OpenCycleMapProvider()
{
RefererUrl = "http://www.opencyclemap.org/";
}
 
static OpenCycleMapProvider()
{
Instance = new OpenCycleMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("D7E1826E-EE1E-4441-9F15-7C2DE0FE0B0A");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenCycleMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
char letter = ServerLetters[GMapProvider.GetServerNum(pos, 3)];
return string.Format(UrlFormat, letter, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://{0}.tile.opencyclemap.org/cycle/{1}/{2}/{3}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenCycleTransportMapProvider.cs
0,0 → 1,73

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OpenCycleMap Transport provider - http://www.opencyclemap.org
/// </summary>
public class OpenCycleTransportMapProvider : OpenStreetMapProviderBase
{
public static readonly OpenCycleTransportMapProvider Instance;
 
OpenCycleTransportMapProvider()
{
RefererUrl = "http://www.opencyclemap.org/";
}
 
static OpenCycleTransportMapProvider()
{
Instance = new OpenCycleTransportMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("AF66DF88-AD25-43A9-8F82-56FCA49A748A");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenCycleTransportMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
char letter = ServerLetters[GMapProvider.GetServerNum(pos, 3)];
return string.Format(UrlFormat, letter, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://{0}.tile2.opencyclemap.org/transport/{1}/{2}/{3}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenSeaMapHybridProvider.cs
0,0 → 1,72

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OpenSeaMapHybrid provider - http://openseamap.org
/// </summary>
public class OpenSeaMapHybridProvider : OpenStreetMapProviderBase
{
public static readonly OpenSeaMapHybridProvider Instance;
 
OpenSeaMapHybridProvider()
{
RefererUrl = "http://openseamap.org/";
}
 
static OpenSeaMapHybridProvider()
{
Instance = new OpenSeaMapHybridProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("FAACDE73-4B90-4AE6-BB4A-ADE4F3545592");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenSeaMapHybrid";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { OpenStreetMapProvider.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://tiles.openseamap.org/seamark/{0}/{1}/{2}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenStreet4UMapProvider.cs
0,0 → 1,79

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OpenStreet4UMap provider
/// http://www.4umaps.eu
///
/// 4UMaps are topographic outdoor maps based on OpenStreetmap data.
/// The map contains everything you need for any kind of back country activity like hiking,
/// mountain biking, cycling, climbing etc. 4UMaps has elevation lines, hill shading,
/// peak height and name, streets, ways, tracks and trails, as well as springs, supermarkets,
/// restaurants, hotels, shelters etc.
/// </summary>
public class OpenStreet4UMapProvider : OpenStreetMapProviderBase
{
public static readonly OpenStreet4UMapProvider Instance;
 
OpenStreet4UMapProvider()
{
RefererUrl = "http://www.4umaps.eu/map.htm";
Copyright = string.Format("© 4UMaps.eu, © OpenStreetMap - Map data ©{0} OpenStreetMap", DateTime.Today.Year);
}
 
static OpenStreet4UMapProvider()
{
Instance = new OpenStreet4UMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("3E3D919E-9814-4978-B430-6AAB2C1E41B2");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenStreet4UMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom);
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom)
{
return string.Format(UrlFormat, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://4umaps.eu/{0}/{1}/{2}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenStreetMapProvider.cs
0,0 → 1,547
 
namespace GMap.NET.MapProviders
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Xml;
using GMap.NET.Internals;
using GMap.NET.Projections;
 
public abstract class OpenStreetMapProviderBase : GMapProvider, RoutingProvider, GeocodingProvider
{
public OpenStreetMapProviderBase()
{
MaxZoom = null;
RefererUrl = "http://www.openstreetmap.org/";
Copyright = string.Format("© OpenStreetMap - Map data ©{0} OpenStreetMap", DateTime.Today.Year);
}
 
public readonly string ServerLetters = "abc";
public int MinExpectedRank = 0;
 
#region GMapProvider Members
 
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
public override GMapProvider[] Overlays
{
get
{
throw new NotImplementedException();
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
 
#endregion
 
#region GMapRoutingProvider Members
 
public MapRoute GetRoute(PointLatLng start, PointLatLng end, bool avoidHighways, bool walkingMode, int Zoom)
{
List<PointLatLng> points = GetRoutePoints(MakeRoutingUrl(start, end, walkingMode ? TravelTypeFoot : TravelTypeMotorCar));
MapRoute route = points != null ? new MapRoute(points, walkingMode ? WalkingStr : DrivingStr) : null;
return route;
}
 
/// <summary>
/// NotImplemented
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="avoidHighways"></param>
/// <param name="walkingMode"></param>
/// <param name="Zoom"></param>
/// <returns></returns>
public MapRoute GetRoute(string start, string end, bool avoidHighways, bool walkingMode, int Zoom)
{
throw new NotImplementedException("use GetRoute(PointLatLng start, PointLatLng end...");
}
 
#region -- internals --
string MakeRoutingUrl(PointLatLng start, PointLatLng end, string travelType)
{
return string.Format(CultureInfo.InvariantCulture, RoutingUrlFormat, start.Lat, start.Lng, end.Lat, end.Lng, travelType);
}
 
List<PointLatLng> GetRoutePoints(string url)
{
List<PointLatLng> points = null;
try
{
string route = GMaps.Instance.UseRouteCache ? Cache.Instance.GetContent(url, CacheType.RouteCache) : string.Empty;
if(string.IsNullOrEmpty(route))
{
route = GetContentUsingHttp(url);
if(!string.IsNullOrEmpty(route))
{
if(GMaps.Instance.UseRouteCache)
{
Cache.Instance.SaveContent(url, CacheType.RouteCache, route);
}
}
}
 
if(!string.IsNullOrEmpty(route))
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(route);
System.Xml.XmlNamespaceManager xmlnsManager = new System.Xml.XmlNamespaceManager(xmldoc.NameTable);
xmlnsManager.AddNamespace("sm", "http://earth.google.com/kml/2.0");
 
///Folder/Placemark/LineString/coordinates
var coordNode = xmldoc.SelectSingleNode("/sm:kml/sm:Document/sm:Folder/sm:Placemark/sm:LineString/sm:coordinates", xmlnsManager);
 
string[] coordinates = coordNode.InnerText.Split('\n');
 
if(coordinates.Length > 0)
{
points = new List<PointLatLng>();
 
foreach(string coordinate in coordinates)
{
if(coordinate != string.Empty)
{
string[] XY = coordinate.Split(',');
if(XY.Length == 2)
{
double lat = double.Parse(XY[1], CultureInfo.InvariantCulture);
double lng = double.Parse(XY[0], CultureInfo.InvariantCulture);
points.Add(new PointLatLng(lat, lng));
}
}
}
}
}
}
catch(Exception ex)
{
Debug.WriteLine("GetRoutePoints: " + ex);
}
 
return points;
}
 
static readonly string RoutingUrlFormat = "http://www.yournavigation.org/api/1.0/gosmore.php?format=kml&flat={0}&flon={1}&tlat={2}&tlon={3}&v={4}&fast=1&layer=mapnik";
static readonly string TravelTypeFoot = "foot";
static readonly string TravelTypeMotorCar = "motorcar";
 
static readonly string WalkingStr = "Walking";
static readonly string DrivingStr = "Driving";
#endregion
 
#endregion
 
#region GeocodingProvider Members
 
public GeoCoderStatusCode GetPoints(string keywords, out List<PointLatLng> pointList)
{
// http://nominatim.openstreetmap.org/search?q=lithuania,vilnius&format=xml
 
#region -- response --
//<searchresults timestamp="Wed, 01 Feb 12 09:46:00 -0500" attribution="Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0." querystring="lithuania,vilnius" polygon="false" exclude_place_ids="29446018,53849547,8831058,29614806" more_url="http://open.mapquestapi.com/nominatim/v1/search?format=xml&exclude_place_ids=29446018,53849547,8831058,29614806&accept-language=en&q=lithuania%2Cvilnius">
//<place place_id="29446018" osm_type="way" osm_id="24598347" place_rank="30" boundingbox="54.6868133544922,54.6879043579102,25.2885360717773,25.2898139953613" lat="54.6873633486028" lon="25.289199818878" display_name="National Museum of Lithuania, 1, Arsenalo g., Senamiesčio seniūnija, YAHOO-HIRES-20080313, Vilnius County, Šalčininkų rajonas, Vilniaus apskritis, 01513, Lithuania" class="tourism" type="museum" icon="http://open.mapquestapi.com/nominatim/v1/images/mapicons/tourist_museum.p.20.png"/>
//<place place_id="53849547" osm_type="way" osm_id="55469274" place_rank="30" boundingbox="54.6896553039551,54.690486907959,25.2675743103027,25.2692089080811" lat="54.6900227236882" lon="25.2683589759401" display_name="Ministry of Foreign Affairs of the Republic of Lithuania, 2, J. Tumo Vaižganto g., Naujamiesčio seniūnija, Vilnius, Vilnius County, Vilniaus m. savivaldybė, Vilniaus apskritis, LT-01104, Lithuania" class="amenity" type="public_building"/>
//<place place_id="8831058" osm_type="node" osm_id="836234960" place_rank="30" boundingbox="54.6670935059,54.6870973206,25.2638857269,25.2838876343" lat="54.677095" lon="25.2738876" display_name="Railway Museum of Lithuania, 15, Mindaugo g., Senamiesčio seniūnija, Vilnius, Vilnius County, Vilniaus m. savivaldybė, Vilniaus apskritis, 03215, Lithuania" class="tourism" type="museum" icon="http://open.mapquestapi.com/nominatim/v1/images/mapicons/tourist_museum.p.20.png"/>
//<place place_id="29614806" osm_type="way" osm_id="24845629" place_rank="30" boundingbox="54.6904983520508,54.6920852661133,25.2606296539307,25.2628803253174" lat="54.6913385159005" lon="25.2617684209873" display_name="Seimas (Parliament) of the Republic of Lithuania, 53, Gedimino pr., Naujamiesčio seniūnija, Vilnius, Vilnius County, Vilniaus m. savivaldybė, Vilniaus apskritis, LT-01111, Lithuania" class="amenity" type="public_building"/>
//</searchresults>
#endregion
 
return GetLatLngFromGeocoderUrl(MakeGeocoderUrl(keywords), out pointList);
}
 
public PointLatLng? GetPoint(string keywords, out GeoCoderStatusCode status)
{
List<PointLatLng> pointList;
status = GetPoints(keywords, out pointList);
return pointList != null && pointList.Count > 0 ? pointList[0] : (PointLatLng?) null;
}
 
public GeoCoderStatusCode GetPoints(Placemark placemark, out List<PointLatLng> pointList)
{
// http://nominatim.openstreetmap.org/search?street=&city=vilnius&county=&state=&country=lithuania&postalcode=&format=xml
 
#region -- response --
//<searchresults timestamp="Thu, 29 Nov 12 08:38:23 +0000" attribution="Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright" querystring="vilnius, lithuania" polygon="false" exclude_place_ids="98093941" more_url="http://nominatim.openstreetmap.org/search?format=xml&exclude_place_ids=98093941&accept-language=de-de,de;q=0.8,en-us;q=0.5,en;q=0.3&q=vilnius%2C+lithuania">
//<place place_id="98093941" osm_type="relation" osm_id="1529146" place_rank="16" boundingbox="54.5693359375,54.8323097229004,25.0250644683838,25.4815216064453" lat="54.6843135" lon="25.2853984" display_name="Vilnius, Vilniaus m. savivaldybė, Distrikt Vilnius, Litauen" class="boundary" type="administrative" icon="http://nominatim.openstreetmap.org/images/mapicons/poi_boundary_administrative.p.20.png"/>
//</searchresults>
#endregion
 
return GetLatLngFromGeocoderUrl(MakeDetailedGeocoderUrl(placemark), out pointList);
}
 
public PointLatLng? GetPoint(Placemark placemark, out GeoCoderStatusCode status)
{
List<PointLatLng> pointList;
status = GetPoints(placemark, out pointList);
return pointList != null && pointList.Count > 0 ? pointList[0] : (PointLatLng?) null;
}
 
public GeoCoderStatusCode GetPlacemarks(PointLatLng location, out List<Placemark> placemarkList)
{
throw new NotImplementedException("use GetPlacemark");
}
 
public Placemark? GetPlacemark(PointLatLng location, out GeoCoderStatusCode status)
{
//http://nominatim.openstreetmap.org/reverse?format=xml&lat=52.5487429714954&lon=-1.81602098644987&zoom=18&addressdetails=1
 
#region -- response --
/*
<reversegeocode timestamp="Wed, 01 Feb 12 09:51:11 -0500" attribution="Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0." querystring="format=xml&lat=52.5487429714954&lon=-1.81602098644987&zoom=18&addressdetails=1">
<result place_id="2061235282" osm_type="way" osm_id="90394420" lat="52.5487800131654" lon="-1.81626922291265">
137, Pilkington Avenue, Castle Vale, City of Birmingham, West Midlands, England, B72 1LH, United Kingdom
</result>
<addressparts>
<house_number>
137
</house_number>
<road>
Pilkington Avenue
</road>
<suburb>
Castle Vale
</suburb>
<city>
City of Birmingham
</city>
<county>
West Midlands
</county>
<state_district>
West Midlands
</state_district>
<state>
England
</state>
<postcode>
B72 1LH
</postcode>
<country>
United Kingdom
</country>
<country_code>
gb
</country_code>
</addressparts>
</reversegeocode>
*/
 
#endregion
 
return GetPlacemarkFromReverseGeocoderUrl(MakeReverseGeocoderUrl(location), out status);
}
 
#region -- internals --
 
string MakeGeocoderUrl(string keywords)
{
return string.Format(GeocoderUrlFormat, keywords.Replace(' ', '+'));
}
 
string MakeDetailedGeocoderUrl(Placemark placemark)
{
var street = String.Join(" ", new[] { placemark.HouseNo, placemark.ThoroughfareName }).Trim();
return string.Format(GeocoderDetailedUrlFormat,
street.Replace(' ', '+'),
placemark.LocalityName.Replace(' ', '+'),
placemark.SubAdministrativeAreaName.Replace(' ', '+'),
placemark.AdministrativeAreaName.Replace(' ', '+'),
placemark.CountryName.Replace(' ', '+'),
placemark.PostalCodeNumber.Replace(' ', '+'));
}
 
string MakeReverseGeocoderUrl(PointLatLng pt)
{
return string.Format(CultureInfo.InvariantCulture, ReverseGeocoderUrlFormat, pt.Lat, pt.Lng);
}
 
GeoCoderStatusCode GetLatLngFromGeocoderUrl(string url, out List<PointLatLng> pointList)
{
var status = GeoCoderStatusCode.Unknow;
pointList = null;
 
try
{
string geo = GMaps.Instance.UseGeocoderCache ? Cache.Instance.GetContent(url, CacheType.GeocoderCache) : string.Empty;
 
bool cache = false;
 
if(string.IsNullOrEmpty(geo))
{
geo = GetContentUsingHttp(url);
 
if(!string.IsNullOrEmpty(geo))
{
cache = true;
}
}
 
if(!string.IsNullOrEmpty(geo))
{
if(geo.StartsWith("<?xml") && geo.Contains("<place"))
{
if(cache && GMaps.Instance.UseGeocoderCache)
{
Cache.Instance.SaveContent(url, CacheType.GeocoderCache, geo);
}
 
XmlDocument doc = new XmlDocument();
doc.LoadXml(geo);
{
XmlNodeList l = doc.SelectNodes("/searchresults/place");
if(l != null)
{
pointList = new List<PointLatLng>();
 
foreach(XmlNode n in l)
{
var nn = n.Attributes["place_rank"];
 
int rank = 0;
#if !PocketPC
if (nn != null && Int32.TryParse(nn.Value, out rank))
{
#else
if(nn != null && !string.IsNullOrEmpty(nn.Value))
{
rank = int.Parse(nn.Value, NumberStyles.Integer, CultureInfo.InvariantCulture);
#endif
if(rank < MinExpectedRank)
continue;
}
 
nn = n.Attributes["lat"];
if(nn != null)
{
double lat = double.Parse(nn.Value, CultureInfo.InvariantCulture);
 
nn = n.Attributes["lon"];
if(nn != null)
{
double lng = double.Parse(nn.Value, CultureInfo.InvariantCulture);
pointList.Add(new PointLatLng(lat, lng));
}
}
}
 
status = GeoCoderStatusCode.G_GEO_SUCCESS;
}
}
}
}
}
catch(Exception ex)
{
status = GeoCoderStatusCode.ExceptionInCode;
Debug.WriteLine("GetLatLngFromGeocoderUrl: " + ex);
}
 
return status;
}
 
Placemark? GetPlacemarkFromReverseGeocoderUrl(string url, out GeoCoderStatusCode status)
{
status = GeoCoderStatusCode.Unknow;
Placemark? ret = null;
 
try
{
string geo = GMaps.Instance.UsePlacemarkCache ? Cache.Instance.GetContent(url, CacheType.PlacemarkCache) : string.Empty;
 
bool cache = false;
 
if(string.IsNullOrEmpty(geo))
{
geo = GetContentUsingHttp(url);
 
if(!string.IsNullOrEmpty(geo))
{
cache = true;
}
}
 
if(!string.IsNullOrEmpty(geo))
{
if(geo.StartsWith("<?xml") && geo.Contains("<result"))
{
if(cache && GMaps.Instance.UsePlacemarkCache)
{
Cache.Instance.SaveContent(url, CacheType.PlacemarkCache, geo);
}
 
XmlDocument doc = new XmlDocument();
doc.LoadXml(geo);
{
XmlNode r = doc.SelectSingleNode("/reversegeocode/result");
if(r != null)
{
var p = new Placemark(r.InnerText);
 
XmlNode ad = doc.SelectSingleNode("/reversegeocode/addressparts");
if(ad != null)
{
var vl = ad.SelectSingleNode("country");
if(vl != null)
{
p.CountryName = vl.InnerText;
}
 
vl = ad.SelectSingleNode("country_code");
if(vl != null)
{
p.CountryNameCode = vl.InnerText;
}
 
vl = ad.SelectSingleNode("postcode");
if(vl != null)
{
p.PostalCodeNumber = vl.InnerText;
}
 
vl = ad.SelectSingleNode("state");
if(vl != null)
{
p.AdministrativeAreaName = vl.InnerText;
}
 
vl = ad.SelectSingleNode("region");
if(vl != null)
{
p.SubAdministrativeAreaName = vl.InnerText;
}
 
vl = ad.SelectSingleNode("suburb");
if(vl != null)
{
p.LocalityName = vl.InnerText;
}
 
vl = ad.SelectSingleNode("road");
if(vl != null)
{
p.ThoroughfareName = vl.InnerText;
}
}
 
ret = p;
 
status = GeoCoderStatusCode.G_GEO_SUCCESS;
}
}
}
}
}
catch(Exception ex)
{
ret = null;
status = GeoCoderStatusCode.ExceptionInCode;
Debug.WriteLine("GetPlacemarkFromReverseGeocoderUrl: " + ex);
}
 
return ret;
}
 
static readonly string ReverseGeocoderUrlFormat = "http://nominatim.openstreetmap.org/reverse?format=xml&lat={0}&lon={1}&zoom=18&addressdetails=1";
static readonly string GeocoderUrlFormat = "http://nominatim.openstreetmap.org/search?q={0}&format=xml";
static readonly string GeocoderDetailedUrlFormat = "http://nominatim.openstreetmap.org/search?street={0}&city={1}&county={2}&state={3}&country={4}&postalcode={5}&format=xml";
 
#endregion
 
#endregion
}
 
/// <summary>
/// OpenStreetMap provider - http://www.openstreetmap.org/
/// </summary>
public class OpenStreetMapProvider : OpenStreetMapProviderBase
{
public static readonly OpenStreetMapProvider Instance;
 
OpenStreetMapProvider()
{
}
 
static OpenStreetMapProvider()
{
Instance = new OpenStreetMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("0521335C-92EC-47A8-98A5-6FD333DDA9C0");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenStreetMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
char letter = ServerLetters[GetServerNum(pos, 3)];
return string.Format(UrlFormat, letter, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://{0}.tile.openstreetmap.org/{1}/{2}/{3}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenStreetMapQuestHybridProvider.cs
0,0 → 1,72

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OpenStreetMapQuestHybrid provider - http://wiki.openstreetmap.org/wiki/MapQuest
/// </summary>
public class OpenStreetMapQuestHybridProvider : OpenStreetMapProviderBase
{
public static readonly OpenStreetMapQuestHybridProvider Instance;
 
OpenStreetMapQuestHybridProvider()
{
Copyright = string.Format("© MapQuest - Map data ©{0} MapQuest, OpenStreetMap", DateTime.Today.Year);
}
 
static OpenStreetMapQuestHybridProvider()
{
Instance = new OpenStreetMapQuestHybridProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("95E05027-F846-4429-AB7A-9445ABEEFA2A");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenStreetMapQuestHybrid";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { OpenStreetMapQuestSatteliteProvider.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://otile{0}.mqcdn.com/tiles/1.0.0/hyb/{1}/{2}/{3}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenStreetMapQuestProvider.cs
0,0 → 1,72

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OpenStreetMapQuest provider - http://wiki.openstreetmap.org/wiki/MapQuest
/// </summary>
public class OpenStreetMapQuestProvider : OpenStreetMapProviderBase
{
public static readonly OpenStreetMapQuestProvider Instance;
 
OpenStreetMapQuestProvider()
{
Copyright = string.Format("© MapQuest - Map data ©{0} MapQuest, OpenStreetMap", DateTime.Today.Year);
}
 
static OpenStreetMapQuestProvider()
{
Instance = new OpenStreetMapQuestProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("D0A12840-973A-448B-B9C2-89B8A07DFF0F");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenStreetMapQuest";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://otile{0}.mqcdn.com/tiles/1.0.0/osm/{1}/{2}/{3}.png";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenStreetMapQuestSatteliteProvider.cs
0,0 → 1,72

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OpenStreetMapQuestSattelite provider - http://wiki.openstreetmap.org/wiki/MapQuest
/// </summary>
public class OpenStreetMapQuestSatteliteProvider : OpenStreetMapProviderBase
{
public static readonly OpenStreetMapQuestSatteliteProvider Instance;
 
OpenStreetMapQuestSatteliteProvider()
{
Copyright = string.Format("© MapQuest - Map data ©{0} MapQuest, OpenStreetMap", DateTime.Today.Year);
}
 
static OpenStreetMapQuestSatteliteProvider()
{
Instance = new OpenStreetMapQuestSatteliteProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("E590D3B1-37F4-442B-9395-ADB035627F67");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenStreetMapQuestSattelite";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, GetServerNum(pos, 3) + 1, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://otile{0}.mqcdn.com/tiles/1.0.0/sat/{1}/{2}/{3}.jpg";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenStreetMapSurferProvider.cs
0,0 → 1,78

namespace GMap.NET.MapProviders
{
using System;
 
#if OpenStreetMapSurfer
/// <summary>
/// OpenStreetMapSurfer provider
/// http://wiki.openstreetmap.org/wiki/MapSurfer.Net
///
/// Since May 2011 the service http://www.mapsurfer.net is unavailable due
/// to hosting problems.
/// </summary>
public class OpenStreetMapSurferProvider : OpenStreetMapProviderBase
{
public static readonly OpenStreetMapSurferProvider Instance;
 
OpenStreetMapSurferProvider()
{
RefererUrl = "http://www.mapsurfer.net/";
}
 
static OpenStreetMapSurferProvider()
{
Instance = new OpenStreetMapSurferProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("6282888B-2F01-4029-9CD8-0CFFCB043995");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenStreetMapSurfer";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, pos.X, pos.Y, zoom);
}
 
static readonly string UrlFormat = "http://tiles1.mapsurfer.net/tms_r.ashx?x={0}&y={1}&z={2}";
}
#endif
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenStreetMapSurferTerrainProvider.cs
0,0 → 1,74

namespace GMap.NET.MapProviders
{
using System;
 
#if OpenStreetMapSurfer
/// <summary>
/// OpenStreetMapSurferTerrain provider
/// </summary>
public class OpenStreetMapSurferTerrainProvider : OpenStreetMapProviderBase
{
public static readonly OpenStreetMapSurferTerrainProvider Instance;
 
OpenStreetMapSurferTerrainProvider()
{
RefererUrl = "http://www.mapsurfer.net/";
}
 
static OpenStreetMapSurferTerrainProvider()
{
Instance = new OpenStreetMapSurferTerrainProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("E87954A4-1852-4B64-95FA-24E512E4B021");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenStreetMapSurferTerrain";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, pos.X, pos.Y, zoom);
}
 
static readonly string UrlFormat = "http://tiles2.mapsurfer.net/tms_t.ashx?x={0}&y={1}&z={2}";
}
#endif
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/OpenStreetMap/OpenStreetOsmProvider.cs
0,0 → 1,80

namespace GMap.NET.MapProviders
{
using System;
 
#if OpenStreetOsm
/// <summary>
/// OpenStreetOsm provider
/// http://wiki.openstreetmap.org/wiki/Osmarender
///
/// Osmarender is a rule-based rendering tool for generating SVG images
/// of OSM data. Note that Osmarender has not been actively maintained
/// since March 2012 and was discontinued as a main Slippy Map layer on
/// openstreetmap.org around that time.
/// </summary>
public class OpenStreetOsmProvider : OpenStreetMapProviderBase
{
public static readonly OpenStreetOsmProvider Instance;
 
OpenStreetOsmProvider()
{
}
 
static OpenStreetOsmProvider()
{
Instance = new OpenStreetOsmProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("07EF8CBC-A91D-4B2F-8B2D-70DBE384EF18");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OpenStreetOsm";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, string.Empty);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
char letter = ServerLetters[GMapProvider.GetServerNum(pos, 3)];
return string.Format(UrlFormat, letter, zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://{0}.tah.openstreetmap.org/Tiles/tile/{1}/{2}/{3}.png";
}
#endif
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Ovi/OviHybridMapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OviHybridMap provider
/// </summary>
public class OviHybridMapProvider : OviMapProviderBase
{
public static readonly OviHybridMapProvider Instance;
 
OviHybridMapProvider()
{
}
 
static OviHybridMapProvider()
{
Instance = new OviHybridMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("B85A8FD2-40F4-40EE-9B45-491AA45D86C1");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OviHybridMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://c.maptile.maps.svc.ovi.com/maptiler/v2/maptile/newest/hybrid.day/12/2316/1277/256/png8
 
return string.Format(UrlFormat, UrlServerLetters[GetServerNum(pos, 4)], zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://{0}.maptile.maps.svc.ovi.com/maptiler/v2/maptile/newest/hybrid.day/{1}/{2}/{3}/256/png8";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Ovi/OviMapProvider.cs
0,0 → 1,117

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
 
public abstract class OviMapProviderBase : GMapProvider
{
public OviMapProviderBase()
{
MaxZoom = null;
RefererUrl = "http://maps.ovi.com/";
Copyright = string.Format("©{0} OVI Nokia - Map data ©{0} NAVTEQ, Imagery ©{0} DigitalGlobe", DateTime.Today.Year);
}
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
 
protected static readonly string UrlServerLetters = "bcde";
}
 
/// <summary>
/// OviMap provider
/// </summary>
public class OviMapProvider : OviMapProviderBase
{
public static readonly OviMapProvider Instance;
 
OviMapProvider()
{
}
 
static OviMapProvider()
{
Instance = new OviMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("30DC1083-AC4D-4471-A232-D8A67AC9373A");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OviMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://c.maptile.maps.svc.ovi.com/maptiler/v2/maptile/newest/normal.day/12/2321/1276/256/png8
 
return string.Format(UrlFormat, UrlServerLetters[GetServerNum(pos, 4)], zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://{0}.maptile.maps.svc.ovi.com/maptiler/v2/maptile/newest/normal.day/{1}/{2}/{3}/256/png8";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Ovi/OviSatelliteMapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OviSatelliteMap provider
/// </summary>
public class OviSatelliteMapProvider : OviMapProviderBase
{
public static readonly OviSatelliteMapProvider Instance;
 
OviSatelliteMapProvider()
{
}
 
static OviSatelliteMapProvider()
{
Instance = new OviSatelliteMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("6696CE12-7694-4073-BC48-79EE849F2563");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OviSatelliteMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://b.maptile.maps.svc.ovi.com/maptiler/v2/maptile/newest/satellite.day/12/2313/1275/256/png8
 
return string.Format(UrlFormat, UrlServerLetters[GetServerNum(pos, 4)], zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://{0}.maptile.maps.svc.ovi.com/maptiler/v2/maptile/newest/satellite.day/{1}/{2}/{3}/256/png8";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Ovi/OviTerrainMapProvider.cs
0,0 → 1,60

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// OviTerrainMap provider
/// </summary>
public class OviTerrainMapProvider : OviMapProviderBase
{
public static readonly OviTerrainMapProvider Instance;
 
OviTerrainMapProvider()
{
}
 
static OviTerrainMapProvider()
{
Instance = new OviTerrainMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("7267339C-445E-4E61-B8B8-82D0B7AAACC5");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "OviTerrainMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://d.maptile.maps.svc.ovi.com/maptiler/v2/maptile/newest/terrain.day/12/2317/1277/256/png8
 
return string.Format(UrlFormat, UrlServerLetters[GetServerNum(pos, 4)], zoom, pos.X, pos.Y);
}
 
static readonly string UrlFormat = "http://{0}.maptile.maps.svc.ovi.com/maptiler/v2/maptile/newest/terrain.day/{1}/{2}/{3}/256/png8";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Yahoo/YahooHybridMapProvider.cs
0,0 → 1,75

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// YahooHybridMap provider
/// </summary>
public class YahooHybridMapProvider : YahooMapProviderBase
{
public static readonly YahooHybridMapProvider Instance;
 
YahooHybridMapProvider()
{
}
 
static YahooHybridMapProvider()
{
Instance = new YahooHybridMapProvider();
}
 
public string Version = "4.3";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("A084E0DB-F9A6-45C1-BC2F-791E1F4E958E");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "YahooHybridMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { YahooSatelliteMapProvider.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://maps1.yimg.com/hx/tl?b=1&v=4.3&t=h&.intl=en&x=14&y=5&z=7&r=1
 
return string.Format(UrlFormat, ((GetServerNum(pos, 2)) + 1), Version, language, pos.X, (((1 << zoom) >> 1) - 1 - pos.Y), (zoom + 1));
}
 
static readonly string UrlFormat = "http://maps{0}.yimg.com/hx/tl?v={1}&t=h&.intl={2}&x={3}&y={4}&z={5}&r=1";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Yahoo/YahooMapProvider.cs
0,0 → 1,427
 
namespace GMap.NET.MapProviders
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Xml;
using GMap.NET.Internals;
using GMap.NET.Projections;
 
public abstract class YahooMapProviderBase : GMapProvider, GeocodingProvider
{
public YahooMapProviderBase()
{
RefererUrl = "http://maps.yahoo.com/";
Copyright = string.Format("© Yahoo! Inc. - Map data & Imagery ©{0} NAVTEQ", DateTime.Today.Year);
}
 
public string AppId = string.Empty;
public int MinExpectedQuality = 39;
 
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjection.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
 
#region GeocodingProvider Members
 
public GeoCoderStatusCode GetPoints(string keywords, out List<PointLatLng> pointList)
{
// http://where.yahooapis.com/geocode?q=lithuania,vilnius&appid=1234&flags=CG&gflags=QL&locale=LT-lt
 
#region -- response --
//<ResultSet version="1.0"><Error>0</Error><ErrorMessage>No error</ErrorMessage><Locale>LT-lt</Locale><Quality>40</Quality><Found>1</Found><Result><quality>40</quality><latitude>54.689850</latitude><longitude>25.269260</longitude><offsetlat>54.689850</offsetlat><offsetlon>25.269260</offsetlon><radius>46100</radius></Result></ResultSet>
#endregion
 
return GetLatLngFromGeocoderUrl(MakeGeocoderUrl(keywords), out pointList);
}
 
public PointLatLng? GetPoint(string keywords, out GeoCoderStatusCode status)
{
List<PointLatLng> pointList;
status = GetPoints(keywords, out pointList);
return pointList != null && pointList.Count > 0 ? pointList[0] : (PointLatLng?)null;
}
 
public GeoCoderStatusCode GetPoints(Placemark placemark, out List<PointLatLng> pointList)
{
// http://where.yahooapis.com/geocode?country=LT&state=Vilniaus+Apskritis&county=Vilniaus+Miesto+Savivaldybe&city=Vilnius&neighborhood=Naujamiestis&postal=01108&street=J.+Tumo-Vaizganto+Gatve&house=2&appid=1234&flags=CG&gflags=QL&locale=LT-lt
 
#region -- response --
//<ResultSet version="1.0"><Error>0</Error><ErrorMessage>No error</ErrorMessage><Locale>LT-lt</Locale><Quality>19</Quality><Found>1</Found><Result><quality>87</quality><latitude>54.690181</latitude><longitude>25.269483</longitude><offsetlat>54.690227</offsetlat><offsetlon>25.269278</offsetlon><radius>500</radius></Result></ResultSet>
#endregion
 
return GetLatLngFromGeocoderUrl(MakeGeocoderDetailedUrl(placemark), out pointList);
}
 
public PointLatLng? GetPoint(Placemark placemark, out GeoCoderStatusCode status)
{
List<PointLatLng> pointList;
status = GetPoints(placemark, out pointList);
return pointList != null && pointList.Count > 0 ? pointList[0] : (PointLatLng?)null;
}
 
public GeoCoderStatusCode GetPlacemarks(PointLatLng location, out List<Placemark> placemarkList)
{
// http://where.yahooapis.com/geocode?q=54.689850,25.269260&appid=1234&flags=G&gflags=QRL&locale=LT-lt
 
#region -- response --
//<ResultSet version="1.0"><Error>0</Error><ErrorMessage>No error</ErrorMessage><Locale>LT-lt</Locale><Quality>99</Quality><Found>1</Found><Result><quality>99</quality><latitude>54.689850</latitude><longitude>25.269260</longitude><offsetlat>54.689850</offsetlat><offsetlon>25.269260</offsetlon><radius>500</radius><name>54.689850,25.269260</name><line1>2 J. Tumo-Vaizganto Gatve</line1><line2>01108 Naujamiestis</line2><line3/><line4>Lietuvos Respublika</line4><house>2</house><street>J. Tumo-Vaizganto Gatve</street><xstreet/><unittype/><unit/><postal>01108</postal><level4>Naujamiestis</level4><level3>Vilnius</level3><level2>Vilniaus Miesto Savivaldybe</level2><level1>Vilniaus Apskritis</level1><level0>Lietuvos Respublika</level0><level0code>LT</level0code><level1code/><level2code/><hash/><woeid>12758362</woeid><woetype>11</woetype><uzip>01108</uzip></Result></ResultSet>
#endregion
 
return GetPlacemarksFromReverseGeocoderUrl(MakeReverseGeocoderUrl(location), out placemarkList);
}
 
public Placemark ? GetPlacemark(PointLatLng location, out GeoCoderStatusCode status)
{
List<Placemark> placemarkList;
status = GetPlacemarks(location, out placemarkList);
return placemarkList != null && placemarkList.Count > 0 ? placemarkList[0] : (Placemark?)null;
}
 
#region -- internals --
 
string MakeGeocoderUrl(string keywords)
{
return string.Format(CultureInfo.InvariantCulture, GeocoderUrlFormat, keywords.Replace(' ', '+'), AppId, !string.IsNullOrEmpty(LanguageStr) ? "&locale=" + LanguageStr : "");
}
 
string MakeGeocoderDetailedUrl(Placemark placemark)
{
return string.Format(GeocoderDetailedUrlFormat,
PrepareUrlString(placemark.CountryName),
PrepareUrlString(placemark.AdministrativeAreaName),
PrepareUrlString(placemark.SubAdministrativeAreaName),
PrepareUrlString(placemark.LocalityName),
PrepareUrlString(placemark.DistrictName),
PrepareUrlString(placemark.PostalCodeNumber),
PrepareUrlString(placemark.ThoroughfareName),
PrepareUrlString(placemark.HouseNo),
AppId,
!string.IsNullOrEmpty(LanguageStr) ? "&locale=" + LanguageStr : string.Empty);
}
 
string MakeReverseGeocoderUrl(PointLatLng pt)
{
return string.Format(CultureInfo.InvariantCulture, ReverseGeocoderUrlFormat, pt.Lat, pt.Lng, AppId, !string.IsNullOrEmpty(LanguageStr) ? "&locale=" + LanguageStr : "");
}
 
string PrepareUrlString(string str)
{
if (str == null) return string.Empty;
return str.Replace(' ', '+');
}
 
GeoCoderStatusCode GetLatLngFromGeocoderUrl(string url, out List<PointLatLng> pointList)
{
var status = GeoCoderStatusCode.Unknow;
pointList = null;
 
try
{
string geo = GMaps.Instance.UseGeocoderCache ? Cache.Instance.GetContent(url, CacheType.GeocoderCache) : string.Empty;
 
bool cache = false;
 
if (string.IsNullOrEmpty(geo))
{
geo = GetContentUsingHttp(url);
 
if (!string.IsNullOrEmpty(geo))
{
cache = true;
}
}
 
if (!string.IsNullOrEmpty(geo))
{
if (geo.StartsWith("<?xml") && geo.Contains("<Result"))
{
if (cache && GMaps.Instance.UseGeocoderCache)
{
Cache.Instance.SaveContent(url, CacheType.GeocoderCache, geo);
}
 
XmlDocument doc = new XmlDocument();
doc.LoadXml(geo);
{
XmlNodeList l = doc.SelectNodes("/ResultSet/Result");
if (l != null)
{
pointList = new List<PointLatLng>();
 
foreach (XmlNode n in l)
{
var nn = n.SelectSingleNode("quality");
if (nn != null)
{
var quality = int.Parse(nn.InnerText);
if (quality < MinExpectedQuality) continue;
 
nn = n.SelectSingleNode("latitude");
if (nn != null)
{
double lat = double.Parse(nn.InnerText, CultureInfo.InvariantCulture);
 
nn = n.SelectSingleNode("longitude");
if (nn != null)
{
double lng = double.Parse(nn.InnerText, CultureInfo.InvariantCulture);
pointList.Add(new PointLatLng(lat, lng));
}
}
}
}
 
status = GeoCoderStatusCode.G_GEO_SUCCESS;
}
}
}
}
}
catch (Exception ex)
{
status = GeoCoderStatusCode.ExceptionInCode;
Debug.WriteLine("GetLatLngFromGeocoderUrl: " + ex);
}
 
return status;
}
 
GeoCoderStatusCode GetPlacemarksFromReverseGeocoderUrl(string url, out List<Placemark> placemarkList)
{
var status = GeoCoderStatusCode.Unknow;
placemarkList = null;
 
try
{
string geo = GMaps.Instance.UsePlacemarkCache ? Cache.Instance.GetContent(url, CacheType.PlacemarkCache) : string.Empty;
 
bool cache = false;
 
if (string.IsNullOrEmpty(geo))
{
geo = GetContentUsingHttp(url);
 
if (!string.IsNullOrEmpty(geo))
{
cache = true;
}
}
 
if (!string.IsNullOrEmpty(geo))
{
if (geo.StartsWith("<?xml") && geo.Contains("<ResultSet"))
{
if (cache && GMaps.Instance.UsePlacemarkCache)
{
Cache.Instance.SaveContent(url, CacheType.PlacemarkCache, geo);
}
 
XmlDocument doc = new XmlDocument();
doc.LoadXml(geo);
{
XmlNodeList l = doc.SelectNodes("/ResultSet/Result");
if (l != null)
{
placemarkList = new List<Placemark>();
 
foreach (XmlNode n in l)
{
var vl = n.SelectSingleNode("name");
if (vl == null) continue;
 
Placemark placemark = new Placemark(vl.InnerText);
 
vl = n.SelectSingleNode("level0");
if (vl != null)
{
placemark.CountryName = vl.InnerText;
}
 
vl = n.SelectSingleNode("level0code");
if (vl != null)
{
placemark.CountryNameCode = vl.InnerText;
}
 
vl = n.SelectSingleNode("postal");
if (vl != null)
{
placemark.PostalCodeNumber = vl.InnerText;
}
 
vl = n.SelectSingleNode("level1");
if (vl != null)
{
placemark.AdministrativeAreaName = vl.InnerText;
}
 
vl = n.SelectSingleNode("level2");
if (vl != null)
{
placemark.SubAdministrativeAreaName = vl.InnerText;
}
 
vl = n.SelectSingleNode("level3");
if (vl != null)
{
placemark.LocalityName = vl.InnerText;
}
 
vl = n.SelectSingleNode("level4");
if (vl != null)
{
placemark.DistrictName = vl.InnerText;
}
 
vl = n.SelectSingleNode("street");
if (vl != null)
{
placemark.ThoroughfareName = vl.InnerText;
}
 
vl = n.SelectSingleNode("house");
if (vl != null)
{
placemark.HouseNo = vl.InnerText;
}
 
vl = n.SelectSingleNode("radius");
if (vl != null)
{
placemark.Accuracy = int.Parse(vl.InnerText);
}
placemarkList.Add(placemark);
}
 
status = GeoCoderStatusCode.G_GEO_SUCCESS;
}
}
}
}
}
catch (Exception ex)
{
status = GeoCoderStatusCode.ExceptionInCode;
Debug.WriteLine("GetPlacemarkFromReverseGeocoderUrl: " + ex);
}
 
return status;
}
 
static readonly string ReverseGeocoderUrlFormat = "http://where.yahooapis.com/geocode?q={0},{1}&appid={2}&flags=G&gflags=QRL{3}";
static readonly string GeocoderUrlFormat = "http://where.yahooapis.com/geocode?q={0}&appid={1}&flags=CG&gflags=QL{2}";
static readonly string GeocoderDetailedUrlFormat = "http://where.yahooapis.com/geocode?country={0}&state={1}&county={2}&city={3}&neighborhood={4}&postal={5}&street={6}&house={7}&appid={8}&flags=CG&gflags=QL{9}";
 
#endregion
 
#endregion
}
 
/// <summary>
/// YahooMap provider
/// </summary>
public class YahooMapProvider : YahooMapProviderBase
{
public static readonly YahooMapProvider Instance;
 
YahooMapProvider()
{
}
 
static YahooMapProvider()
{
Instance = new YahooMapProvider();
}
 
public string Version = "2.1";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("65DB032C-6869-49B0-A7FC-3AE41A26AF4D");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "YahooMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://maps1.yimg.com/hx/tl?b=1&v=4.3&.intl=en&x=12&y=7&z=7&r=1
// http://2.base.maps.api.here.com/maptile/2.1/maptile/newest/normal.day/11/1169/652/256/png8?lg=EN&token=TrLJuXVK62IQk0vuXFzaig%3D%3D&app_id=eAdkWGYRoc4RfxVo0Z4B
// https://4.aerial.maps.api.here.com/maptile/2.1/maptile/newest/hybrid.day/11/1167/652/256/jpg?lg=ENG&token=TrLJuXVK62IQk0vuXFzaig%3D%3D&requestid=yahoo.prod&app_id=eAdkWGYRoc4RfxVo0Z4B
// https://4.aerial.maps.api.here.com/maptile/2.1/maptile/newest/satellite.day/13/4671/2604/256/jpg?lg=ENG&token=TrLJuXVK62IQk0vuXFzaig%3D%3D&requestid=yahoo.prod&app_id=eAdkWGYRoc4RfxVo0Z4B
 
return string.Format(UrlFormat, ((GetServerNum(pos, 2)) + 1), Version, zoom, pos.X, pos.Y, language, rnd1, rnd2);
}
 
string rnd1 = Guid.NewGuid().ToString("N").Substring(0, 28);
string rnd2 = Guid.NewGuid().ToString("N").Substring(0, 20);
 
//static readonly string UrlFormat = "http://maps{0}.yimg.com/hx/tl?v={1}&.intl={2}&x={3}&y={4}&z={5}&r=1";
static readonly string UrlFormat = "http://{0}.base.maps.api.here.com/maptile/{1}/maptile/newest/normal.day/{2}/{3}/{4}/256/png8?lg={5}&token={6}&requestid=yahoo.prod&app_id={7}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Yahoo/YahooSatelliteMapProvider.cs
0,0 → 1,62

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// YahooSatelliteMap provider
/// </summary>
public class YahooSatelliteMapProvider : YahooMapProviderBase
{
public static readonly YahooSatelliteMapProvider Instance;
 
YahooSatelliteMapProvider()
{
}
 
static YahooSatelliteMapProvider()
{
Instance = new YahooSatelliteMapProvider();
}
 
public string Version = "1.9";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("55D71878-913F-4320-B5B6-B4167A3F148F");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "YahooSatelliteMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
// http://maps3.yimg.com/ae/ximg?v=1.9&t=a&s=256&.intl=en&x=15&y=7&z=7&r=1
 
return string.Format(UrlFormat, ((GetServerNum(pos, 2)) + 1), Version, language, pos.X, (((1 << zoom) >> 1) - 1 - pos.Y), (zoom + 1));
}
 
static readonly string UrlFormat = "http://maps{0}.yimg.com/ae/ximg?v={1}&t=a&s=256&.intl={2}&x={3}&y={4}&z={5}&r=1";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Yandex/YandexHybridMapProvider.cs
0,0 → 1,72

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// YandexHybridMap provider
/// </summary>
public class YandexHybridMapProvider : YandexMapProviderBase
{
public static readonly YandexHybridMapProvider Instance;
 
YandexHybridMapProvider()
{
}
 
static YandexHybridMapProvider()
{
Instance = new YandexHybridMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("78A3830F-5EE3-432C-A32E-91B7AF6BBCB9");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "YandexHybridMap";
public override string Name
{
get
{
return name;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { YandexSatelliteMapProvider.Instance, this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, UrlServer, GetServerNum(pos, 4) + 1, Version, pos.X, pos.Y, zoom, language, Server);
}
 
static readonly string UrlServer = "vec";
static readonly string UrlFormat = "http://{0}0{1}.{7}/tiles?l=skl&v={2}&x={3}&y={4}&z={5}&lang={6}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Yandex/YandexMapProvider.cs
0,0 → 1,115

namespace GMap.NET.MapProviders
{
using System;
using GMap.NET.Projections;
using GMap.NET.Internals;
 
public abstract class YandexMapProviderBase : GMapProvider
{
#region GMapProvider Members
public override Guid Id
{
get
{
throw new NotImplementedException();
}
}
 
public override string Name
{
get
{
throw new NotImplementedException();
}
}
 
public override PureProjection Projection
{
get
{
return MercatorProjectionYandex.Instance;
}
}
 
GMapProvider[] overlays;
public override GMapProvider[] Overlays
{
get
{
if(overlays == null)
{
overlays = new GMapProvider[] { this };
}
return overlays;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
throw new NotImplementedException();
}
#endregion
 
protected string Version = "4.6.9";
 
public readonly string Server /*d{'_'}b*/ = /*{^_^}*/ Stuff.GString /*{"_"}*/ (/* ;}~ */"MECxW6okUK3Ir7a9ue/vIA=="/* ;}~ */);
public readonly string ServerRu /*d{'_'}b*/ = /*{^_^}*/ Stuff.GString /*{"_"}*/ (/* ;}~ */"MECxW6okUK0FRlRPbF0BQg=="/* ;}~ */);
public readonly string ServerCom /*d{'_'}b*/ = /*{^_^}*/ Stuff.GString/*{"_"}*/ (/* ;}~ */"MECxW6okUK2JNHOW5AuimA=="/* ;}~ */);
}
 
/// <summary>
/// YenduxMap provider
/// </summary>
public class YandexMapProvider : YandexMapProviderBase
{
public static readonly YandexMapProvider Instance;
 
YandexMapProvider()
{
RefererUrl = "http://" + ServerCom + "/";
}
 
static YandexMapProvider()
{
Instance = new YandexMapProvider();
}
 
#region GMapProvider Members
 
readonly Guid id = new Guid("82DC969D-0491-40F3-8C21-4D90B67F47EB");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "YandexMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, UrlServer, GetServerNum(pos, 4) + 1, Version, pos.X, pos.Y, zoom, language, Server);
}
 
static readonly string UrlServer = "vec";
static readonly string UrlFormat = "http://{0}0{1}.{7}/tiles?l=map&v={2}&x={3}&y={4}&z={5}&lang={6}";
}
}
/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.MapProviders/Yandex/YandexSatelliteMapProvider.cs
0,0 → 1,61

namespace GMap.NET.MapProviders
{
using System;
 
/// <summary>
/// YandexSatelliteMap provider
/// </summary>
public class YandexSatelliteMapProvider : YandexMapProviderBase
{
public static readonly YandexSatelliteMapProvider Instance;
 
YandexSatelliteMapProvider()
{
}
 
static YandexSatelliteMapProvider()
{
Instance = new YandexSatelliteMapProvider();
}
 
public new string Version = "3.135.0";
 
#region GMapProvider Members
 
readonly Guid id = new Guid("2D4CE763-0F91-40B2-A511-13EF428237AD");
public override Guid Id
{
get
{
return id;
}
}
 
readonly string name = "YandexSatelliteMap";
public override string Name
{
get
{
return name;
}
}
 
public override PureImage GetTileImage(GPoint pos, int zoom)
{
string url = MakeTileImageUrl(pos, zoom, LanguageStr);
 
return GetTileImageUsingHttp(url);
}
 
#endregion
 
string MakeTileImageUrl(GPoint pos, int zoom, string language)
{
return string.Format(UrlFormat, UrlServer, GetServerNum(pos, 4) + 1, Version, pos.X, pos.Y, zoom, language, Server);
}
 
static readonly string UrlServer = "sat";
static readonly string UrlFormat = "http://{0}0{1}.{7}/tiles?l=sat&v={2}&x={3}&y={4}&z={5}&lang={6}";
}
}