Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 2286 → Rev 2287

/MKLiveView/v1.0/GMap.NET.Core/GMap.NET.Projections/PlateCarreeProjectionDarbAe.cs
0,0 → 1,230

namespace GMap.NET.Projections
{
using System;
 
/// <summary>
/// Plate Carrée (literally, “plane square”) projection
/// PROJCS["WGS 84 / World Equidistant Cylindrical",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],UNIT["Meter",1]]
///
///"spatialReference":
///{"wkid":4326},"singleFusedMapCache":true,"tileInfo":
///{"rows":256,"cols":256,"dpi":96,"format":"PNG8","compressionQuality":0,
///"origin":{"x":-400,"y":400},"spatialReference":{"wkid":4326},"lods":
///
///[{"level":0,"resolution":0.0118973050291514,"scale":5000000},
///{"level":1,"resolution":0.0059486525145757,"scale":2500000},
///{"level":2,"resolution":0.00297432625728785,"scale":1250000},
///{"level":3,"resolution":0.00118973050291514,"scale":500000},
///{"level":4,"resolution":0.00059486525145757,"scale":250000},
///{"level":5,"resolution":0.000356919150874542,"scale":150000},
///{"level":6,"resolution":0.000178459575437271,"scale":75000},
///{"level":7,"resolution":0.000118973050291514,"scale":50000},
///{"level":8,"resolution":5.9486525145757E-05,"scale":25000},
///{"level":9,"resolution":3.56919150874542E-05,"scale":15000},
///{"level":10,"resolution":1.90356880466422E-05,"scale":8000},
///{"level":11,"resolution":9.51784402332112E-06,"scale":4000},
///{"level":12,"resolution":4.75892201166056E-06,"scale":2000}]},
///
///"initialExtent":
///{"xmin":42.1125196069871,"ymin":18.6650706214551,"xmax":65.698643558112
///4,"ymax":29.4472987133981,"spatialReference":{"wkid":4326}},
///
///"fullExtent":
///{"xmin":41.522866508209,"ymin":18.7071563263201,"xmax":66.2882966568906
///,"ymax":29.4052130085331,"spatialReference":{"wkid":4326}},
///
///"units":"esriDecimalDegrees"
/// </summary>
public class PlateCarreeProjectionDarbAe : PureProjection
{
public static readonly PlateCarreeProjectionDarbAe Instance = new PlateCarreeProjectionDarbAe();
 
public static readonly double MinLatitude = 18.7071563263201;
public static readonly double MaxLatitude = 29.4052130085331;
public static readonly double MinLongitude = 41.522866508209;
public static readonly double MaxLongitude = 66.2882966568906;
 
static readonly double orignX = -400;
static readonly double orignY = 400;
 
public override RectLatLng Bounds
{
get
{
return RectLatLng.FromLTRB(MinLongitude, MaxLatitude, MaxLongitude, MinLatitude);
}
}
 
GSize tileSize = new GSize(256, 256);
public override GSize TileSize
{
get
{
return tileSize;
}
}
 
public override double Axis
{
get
{
return 6378137;
}
}
 
public override double Flattening
{
get
{
return (1.0 / 298.257223563);
}
}
 
public override GPoint FromLatLngToPixel(double lat, double lng, int zoom)
{
GPoint ret = GPoint.Empty;
 
lat = Clip(lat, MinLatitude, MaxLatitude);
lng = Clip(lng, MinLongitude, MaxLongitude);
 
/*
getContainingTileCoords:function(ti,_1dd,lod)
{
var to=ti.origin,
res=lod.resolution,
tmw=ti.width*res,
tmh=ti.height*res,
tc=Math.floor((_1dd.x-to.x)/tmw),
tr=Math.floor((to.y-_1dd.y)/tmh);
}
*/
 
double res = GetTileMatrixResolution(zoom);
 
ret.X = (long)Math.Floor((lng - orignX) / res);
ret.Y = (long)Math.Floor((orignY - lat) / res);
 
return ret;
}
 
public override PointLatLng FromPixelToLatLng(long x, long y, int zoom)
{
PointLatLng ret = PointLatLng.Empty;
 
double res = GetTileMatrixResolution(zoom);
 
ret.Lat = orignY - (y * res);
ret.Lng = (x * res) + orignX;
 
return ret;
}
 
public static double GetTileMatrixResolution(int zoom)
{
double ret = 0;
 
switch(zoom)
{
#region -- sizes --
case 0:
{
ret = 0.0118973050291514;
}
break;
 
case 1:
{
ret = 0.0059486525145757;
}
break;
 
case 2:
{
ret = 0.00297432625728785;
}
break;
 
case 3:
{
ret = 0.00118973050291514;
}
break;
 
case 4:
{
ret = 0.00059486525145757;
}
break;
 
case 5:
{
ret = 0.000356919150874542;
}
break;
 
case 6:
{
ret = 0.000178459575437271;
}
break;
 
case 7:
{
ret = 0.000118973050291514;
}
break;
 
case 8:
{
ret = 5.9486525145757E-05;
}
break;
 
case 9:
{
ret = 3.56919150874542E-05;
}
break;
 
case 10:
{
ret = 1.90356880466422E-05;
}
break;
 
case 11:
{
ret = 9.51784402332112E-06;
}
break;
 
case 12:
{
ret = 4.75892201166056E-06;
}
break;
#endregion
}
 
return ret;
}
 
public override double GetGroundResolution(int zoom, double latitude)
{
return GetTileMatrixResolution(zoom);
}
 
public override GSize GetTileMatrixMaxXY(int zoom)
{
var maxPx = FromLatLngToPixel(MinLatitude, MaxLongitude, zoom);
return new GSize(FromPixelToTileXY(maxPx));
}
 
public override GSize GetTileMatrixMinXY(int zoom)
{
var minPx = FromLatLngToPixel(MaxLatitude, MinLongitude, zoom);
return new GSize(FromPixelToTileXY(minPx));
}
}
}