`

如何将GPS坐标转换为XY平面坐标(简易转换)

阅读更多

    本文根据《GPS经纬度坐标转平面坐标的简化计算方法及精度分析》这篇文章中的的方法将GPS经纬度坐标转换为以地平面上平面直角坐标系中的X、Y坐标。这个转换方法的前提是在一定的范围以内。具体的转化公式请参考该文,下面是坐标转换的代码:

public class PlaneCoordinate {

	/**
	 * 平面坐标系
	 */
	private static final double MACRO_AXIS = 6378137; // 赤道圆的平均半径
	private static final double MINOR_AXIS = 6356752; // 半短轴的长度,地球两极距离的一半
	
	// 返回Y坐标
	private static double turnY(GePoint basePoint, GePoint point) {
		double a = Math.pow(MACRO_AXIS, 2.0);
		double b = Math.pow(MINOR_AXIS, 2.0);
		double c = Math.pow(Math.tan(basePoint.getLatitude()), 2.0);
		double d = Math.pow(1/Math.tan(basePoint.getLatitude()),2.0);
		double x = a/Math.sqrt(a + b*c);
		double y = b/Math.sqrt(b + a*d);
		
		c = Math.pow(Math.tan(point.getLatitude()), 2.0);
		d = Math.pow(1/Math.tan(point.getLatitude()), 2.0);
		
		double m = a/Math.sqrt(a + b*c);
		double n = b/Math.sqrt(b + a*d);
		
		return new PePoint(x, y).distanceBetween(new PePoint(m, n));
	}
	// 返回X坐标
	private static double turnX(GePoint basePoint, GePoint point) {
		double a = Math.pow(MACRO_AXIS, 2.0);
		double b = Math.pow(MINOR_AXIS, 2.0);
		double c = Math.pow(Math.tan(basePoint.getLatitude()), 2.0);
		double x = a/Math.sqrt(a + b*c);
		
		return x * (point.getLongtitude() - basePoint.getLongtitude());
	}

}

 

/* 经纬度坐标点(84坐标系) */
public class GePoint {
	private double latitude; // 纬度坐标
	private double longtitude; // 经度坐标
	public GePoint() {
		
	}
	
	public GePoint(double latitude, double longtitude) {
		this.latitude = latitude;
		this.longtitude = longtitude;
	}
	public double getLatitude() {
		return 2 * latitude * Math.PI / 360 ;
	}
	public void setLatitude(double latitude) {
		this.latitude = latitude;
	}
	public double getLongtitude() {
		return 2 * longtitude * Math.PI / 360;
	}
	public void setLongtitude(double longtitude) {
		this.longtitude = longtitude;
	}
	
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics