一个由影长和时间计算经纬度的py脚本,如果信息只有一张图片,只要有拍摄时间和阴影,参考这个小脚本,方便计算经纬度坐标,减少时区时间经纬度之间的换算过程
[Python] 纯文本查看 复制代码 #!/usr/bin/env python
#-*-coding:utf-8-*-
#coding=UTF-8
#test version
import math
#参数变量
ns =180#纬度
ew = 360#经度
ns_z=0#直射纬度
ew_z=0#直射经度
jingducha =0#经度差
weiducha =0#纬度差
weidu_y=0
jingdu_y=0
date_m = input("请输入影子长度测量日期(月):")
date_d = input("请输入影子长度测量日期(日):")
sq_ew = int(input("请输入时区(东:1,西:2):"))
sq_ji = int(input("请输入时区数:"))
time_h = float(input("请输入影子测量时间(时):"))
time_m = float(input("请输入影子测量时间(分):"))
sun = float(input("请输入影子方向(时钟秒针数字表示指向):"))
long = float(input("请输入影子长度比值(影子长度/实际长度):"))
#时区换算
sq = 0
if sq_ew == 1:
sq = sq_ji+12
if sq == 24:
sq = sq-24
if sq_ew == 2:
sq = 12-sq_ji
#时间日期换算(东西12区为基准)
time = time_h*60 + time_m - sq*60
if time < 0:
time = time + 1440
date_d = int(date_d) -1
date = int(date_m)*30.5 + int(date_d)
#计算太阳直射经度
if time < 720:
time = time+1440
ew = ((time-720)/1440)*360
#输出太阳直射经度
if ew<180:
ew_z=180-ew
print("太阳直射经度为:\n西经")
print(ew_z)
if ew>=180:
ew_z=ew-180
print("太阳直射经度为:\n东经")
print(ew_z)
#计算太阳直射纬度
if date < 83:
date = date+365
date_bili=(date-83)/91.25
if date_bili<1:
ns = 90 - date_bili*23.433333333333334
if 1<=date_bili<=3:
ns = 90+(date_bili-2)*23.433333333333334
if date_bili>3:
ns = 90 - (date_bili-4)*23.433333333333334
#输出太阳直射纬度
if ns>90:
ns_z=ns-90
print("太阳直射纬度为:\n南纬")
print(ns_z)
if ns<=90:
ns_z=90-ns
print("太阳直射纬度为:\n北纬")
print(ns_z)
#计算偏移夹角
jiajiao = 90 - math.degrees(math.atan(long)) #太阳夹角
#计算影子经纬度差
weiducha=math.cos(math.radians(sun*6))
jingducha=math.sin(math.radians(sun*6))
#计算影子经纬度
weidu = ns - weiducha
jingdu = ew + jingducha
#输出影子经纬度
if jingdu<=0:
jingdu=jingdu+360
if jingdu>360:
jingdu=jingdu-360
if jingdu<180:
jingdu_y=180-jingdu
print("影子所在经度为:\n西经")
print(jingdu_y)
if jingdu>=180:
jingdu_y=jingdu-180
print("影子所在经度为:\n东经")
print(jingdu_y)
if weidu<0:
weidu=0-weidu
if weidu>180:
weidu=180-(weidu-180)
if weidu>90:
weidu_y=weidu-90
print("影子所在纬度为:\n南纬")
print(weidu_y)
if weidu<=90:
weidu_y=90-weidu
print("影子所在纬度为:\n北纬")
print(weidu_y) |