双标准纬线正轴等角圆锥投影并绘制相关图像 基于python

 

 

以下是兰勃特等角投影正解公式

1,计算e

a=6378140

b=6356755

第一偏心率e2=(a2-b2)/a2

 

2.计算r和U

纬圈半径:r=N*cosφ={a/(1-e2sin2φ)1/2}cosφ

(N为卯酉圈半径)

U=tan(45︒+φ/2)/ tan(45︒+ψ/2)

(ψ=arcsin(esinφ))

 

3计算ρ和δ

由φ1=24︒和φ2=48︒可计算出常量r1和r2,U1和U2

α=(lg r2-lg r1)/(lg U2-lg U1)

 

k1= r1*(U1)^α/α

k2= r2*(U2)^α/α

k= k1+ k2/2

 

ρ=k/U^α

 

δ=α*λ

 

4计算x,y的坐标

X=ρs-ρcosδ  y=ρsinδ

 

 

 

(ρs投影区中最低纬线φs的投影半径)
 
以下附上相关代码
# coding=gbk
#地图学实习1
import matplotlib.pyplot as plt
import numpy
import math
#δ=wd φ=J ψ=Q α=R ρ=P λ=jd

#计算得出e的值
J1=24*math.pi/180
J2=48*math.pi/180   

a=6378140
b=6356755
e2=(pow(a,2)-pow(b,2))/pow(a,2)
e=numpy.sqrt(e2)  

#计算两条标准纬线的u和r,计算出k的值和R的值
def get_r(J):
    r=(a*math.cos(J))/pow((1-pow(e,2)*pow(math.sin(J),2)),1/2)
    return r
    
def get_U(J): 
    Q=math.atan(e*math.sin(J))
    U=math.tan(45*math.pi/180+J/2)/pow(math.tan(45*math.pi/180+Q/2),e)
    return U
    
r1=get_r(J1)
r2=get_r(J2)
U1=get_U(J1)
U2=get_U(J2)

R=(math.log(r2)-math.log(r1))/(math.log(U1)-math.log(U2))

lons=[]
lats=[]

#读取文本文件中的内容
with open('test2.txt','r')as f0:
    for i in f0:
        tmp=i.split()
        lons.append(tmp[0])
        lats.append(tmp[1])
        
loc = dict(zip(lons,lats))

#计算出k的值
def get_P(jd):
    k1=r1*pow(U1,R)
    k2=r2*pow(U2,R)
    k=(k1+k2)/2
    P=k/pow(get_U(jd),R)
    return P
    
#计算ps(最小纬圈半径)   
mixwd=float(min(lats))*math.pi/180
Ps=get_P(mixwd)

alon=[]
alat=[]   
WD=[]  

#最终的x,y的值(其中的‘-y’不知道为什么要加负号,不过加上图像就和黑龙江一样了)
for lon,lat in zip(lons, lats):
	P=get_P(float(lat)*math.pi/180)
	wd=R*float(lon)*math.pi/180
	WD.append(wd)
	x=Ps-P*math.cos(wd)
	alon.append(x)
	y=P*math.sin(wd)
	alat.append(-y)  

#描绘出最终结果
plt.plot(alon,alat,linewidth=1)
plt.show()
    

最后绘制出的图像为黑龙江省的地图轮廓获取相关代码及数据

你可能感兴趣的:(双标准纬线正轴等角圆锥投影并绘制相关图像 基于python)