[Python] 影长求经纬度

kain
2020-08-03 / 0 评论 / 579 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2020年08月04日,已超过1385天没有更新,文章所提及的内容可能已过时失效,所以请自行测试验证。
一个由影长和时间计算经纬度的py脚本,如果信息只有一张图片,只要有拍摄时间和阴影,参考这个小脚本,方便计算经纬度坐标,减少时区时间经纬度之间的换算过程
#!/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)
0

评论 (0)

取消