WGS84坐标系经纬度转地心坐标系坐标

说明:转载的,忘记地址了。


/**
* WGS84转地心坐标系
**/
public static double[] WGS84toECEF(double latitude, double longitude, double height) {
		double X;
		double Y;
		double Z;
		double a = 6378137.0;
		double b = 6356752.31424518;
		double E = (a * a - b * b) / (a * a);
		double COSLAT = Math.cos(latitude * Math.PI / 180);
		double SINLAT = Math.sin(latitude * Math.PI / 180);
		double COSLONG = Math.cos(longitude * Math.PI / 180);
		double SINLONG = Math.sin(longitude * Math.PI / 180);
		double N = a / (Math.sqrt(1 - E * SINLAT * SINLAT));
		double NH = N + height;
		X = NH * COSLAT * COSLONG;
		Y = NH * COSLAT * SINLONG;
		Z = (b * b * N / (a * a) + height) * SINLAT;
		return new double[] { X, Y, Z };
	}

   /**
   * 地心坐标系转WGS84
   */
	public static String ECEFtoWGS84(double x, double y, double z){
		double a, b, c, d;
		double Longitude;// 经度
		double Latitude;// 纬度
		double Altitude;// 海拔高度
		double p, q;
		double N;
		a = 6378137.0;
		b = 6356752.31424518;
		c = Math.sqrt(((a * a) - (b * b)) / (a * a));
		d = Math.sqrt(((a * a) - (b * b)) / (b * b));
		p = Math.sqrt((x * x) + (y * y));
		q = Math.atan2((z * a), (p * b));
		Longitude = Math.atan2(y, x);
		Latitude = Math.atan2((z + (d * d) * b * Math.pow(Math.sin(q), 3)),
				(p - (c * c) * a * Math.pow(Math.cos(q), 3)));
		N = a / Math.sqrt(1 - ((c * c) * Math.pow(Math.sin(Latitude), 2)));
		Altitude = (p / Math.cos(Latitude)) - N;
		Longitude = Longitude * 180.0 / Math.PI;
		Latitude = Latitude * 180.0 / Math.PI;
		return Longitude + "," + Latitude + "," + Altitude;
	}

你可能感兴趣的:(java)