亲测ArcGis albers投影转换为经纬度的代码

来源:互联网 发布:mac地址缓存能力 编辑:程序博客网 时间:2024/05/19 00:55

首先是albers转为经纬度:

public static double[] albers2ll(double x,double y){    double xd=x;    double yd=y;    double pi=4*Math.atan(1);    double fi0=0*pi/180;    double lanbuda0=110*pi/180;    double fi1=25*pi/180;    double fi2=47*pi/180;    double EF=0;    double NF=0;    double a=6378137;    double b=6356752.3142;    double e1=Math.sqrt(1-b/a*b/a);    double e2=1-e1*e1;    double alfa0=e2*(Math.sin(fi0)/(1-e1*e1*Math.sin(fi0)*Math.sin(fi0))-0.5/e1*Math.log((1-e1*Math.sin(fi0))/(1+e1*Math.sin(fi0))));    double alfa1=e2*(Math.sin(fi1)/(1-e1*e1*Math.sin(fi1)*Math.sin(fi1))-0.5/e1*Math.log((1-e1*Math.sin(fi1))/(1+e1*Math.sin(fi1))));    double alfa2=e2*(Math.sin(fi2)/(1-e1*e1*Math.sin(fi2)*Math.sin(fi2))-0.5/e1*Math.log((1-e1*Math.sin(fi2))/(1+e1*Math.sin(fi2))));    double m1=Math.cos(fi1)/Math.sqrt(1-e1*e1*Math.sin(fi1)*Math.sin(fi1));    double m2=Math.cos(fi2)/Math.sqrt(1-e1*e1*Math.sin(fi2)*Math.sin(fi2));    double n=(m1*m1-m2*m2)/(alfa2-alfa1);    double c=m1*m1+n*alfa1;    double rou0=a*Math.sqrt(c-n*alfa0)/n;    double sita=Math.atan((xd-EF)/(rou0-(yd-NF)));    double rou=Math.sqrt(Math.pow((xd-EF),2)+Math.pow((rou0-(yd-NF)),2));    double alfa=(c-Math.pow((rou*n/a),2))/n;    double beta=Math.asin(alfa/(1-(1-Math.pow(e1,2))/(2*e1)*Math.log((1-e1)/(1+e1))));    double lon=lanbuda0+sita/n;    double lat=beta+(Math.pow(e1,2)/3+31*Math.pow(e1,4)/180+517*Math.pow(e1,6)/5040)*Math.sin(2*beta)+(23*Math.pow(e1,4)/360+251*Math.pow(e1,6)/3780)*Math.sin(4*beta)+(761*Math.pow(e1,6)/45360)*Math.sin(6*beta);    lon=lon*180/pi;    lat=lat*180/pi;    return new double[]{lon,lat};}

1 0
原创粉丝点击