public LngLatPoint GCJ2WGS(double gcjLat, double gcjLng) { if (this.OutOfChina(gcjLat, gcjLng)) { return(new LngLatPoint(gcjLat, gcjLng)); } LngLatPoint point = this.Delta(gcjLat, gcjLng); return(new LngLatPoint(gcjLat - point.Lat, gcjLng - point.Lng)); }
public LngLatPoint WGS2GCJ(double wgsLat, double wgsLng) { if (this.OutOfChina(wgsLat, wgsLng)) { return(new LngLatPoint(wgsLat, wgsLng)); } LngLatPoint point = this.Delta(wgsLat, wgsLng); return(new LngLatPoint(wgsLat + point.Lat, wgsLng + point.Lng)); }
public LngLatPoint GCJ2WGSExact(double gcjLat, double gcjLng) { double num = 0.01; double num2 = 1E-06; double num3 = num; double num4 = num; double num5 = gcjLat - num3; double num6 = gcjLng - num4; double num7 = gcjLat + num3; double num8 = gcjLng + num4; double wgsLat = 0.0; double wgsLng = 0.0; for (int i = 0; i < 0x3e8; i++) { wgsLat = (num5 + num7) / 2.0; wgsLng = (num6 + num8) / 2.0; LngLatPoint point = this.WGS2GCJ(wgsLat, wgsLng); num3 = point.Lat - gcjLat; num4 = point.Lng - gcjLng; if ((Math.Abs(num3) < num2) && (Math.Abs(num4) < num2)) { return(new LngLatPoint(wgsLat, wgsLng)); } if (num3 > 0.0) { num7 = wgsLat; } else { num5 = wgsLat; } if (num4 > 0.0) { num8 = wgsLng; } else { num6 = wgsLng; } } return(new LngLatPoint(wgsLat, wgsLng)); }
private LngLatPoint Delta(double lat, double lng) { LngLatPoint point = new LngLatPoint(); double num = 6378245.0; double num2 = 0.0066934216229659433; double num3 = this.TransformLat(lng - 105.0, lat - 35.0); double num4 = this.TransformLon(lng - 105.0, lat - 35.0); double a = (lat / 180.0) * 3.1415926535897931; double d = Math.Sin(a); d = 1.0 - ((num2 * d) * d); double num7 = Math.Sqrt(d); num3 = (num3 * 180.0) / (((num * (1.0 - num2)) / (d * num7)) * 3.1415926535897931); num4 = (num4 * 180.0) / (((num / num7) * Math.Cos(a)) * 3.1415926535897931); point.Lat = num3; point.Lng = num4; return(point); }