首先是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}; }