/**
* 地图工具
*
* @author dxm
*
*/
public class MapUtil {
// 参考点
private double[] d34 = null;
private double[] d33 = null;
private double[] gs34 = null;
private double[] gs33 = null;
// 参考点位置
private double x34, y34;
// 计算参数
private double a, b, c, bl;
/**
* 构造器
*
* @param ds34 参考点经纬度
* @param ds33 参考点经纬度
* @param length 两个参考点在本坐标系长度
*/
public MapUtil(String[] ds34, String[] ds33, double x34, double y34, double length) {
this.x34 = x34;
this.y34 = y34;
d34 = convertGPS(ds34[0], ds34[1]);
d33 = convertGPS(ds33[0], ds33[1]);
gs34 = BLToGauss(d34[0], d34[1]);
gs33 = BLToGauss(d33[0], d33[1]);
// 点33到点34的高斯横向距离
a = gs34[0] - gs33[0];
// 点33到点34的高斯纵向距离
b = gs34[1] - gs33[1];
// 点33到点34的高斯直线距离
c = Math.sqrt(a * a + b * b);
// 高斯距离与本坐标系的比例
bl = length / c;
}
/**
* 根据经纬度算XY
*
* @param lng
* @param lat
* @return
*/
public int[] getXY(double lng, double lat) {
// 与参考点比较经度计算坐标
if (lng > d34[0]) {
return getXY1(lng, lat);
} else {
return getXY2(lng, lat);
}
}
/**
* 已有定点为基准算XY坐标
*/
private int[] getXY1(double lng, double lat) {
// 将经纬度转换为高斯投影坐标
double[] gs = BLToGauss(lng, lat);
// 与点34的横向高斯距离
double d = Math.abs(gs[0] - gs34[0]);
double e = d * c / b;
double f = a *