影长求经纬度
一个由影长和时间计算经纬度的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) lindey 发表于 2020-8-17 12:47
# 收藏!
---
这个我来解释一下,变量名是真的懒得改了,写完一次不愿意再动的那种
封装函数我不太懂,是自己瞎学的,这段时间了解一下,多谢了
时区的问题我是通过日期加时间来解决的,比如冬至,赤道与太阳的夹角是确定的,那么加上时间和一个与太阳对应的相对坐标,那么是应该是可以确定下来当前时区的,需要进一步计算的是纬度,这个我是用了个三角函数来做的,准确度肯定不太行了,也就是看金蝉脱壳的时候想到的,六分仪看着挺厉害 aydcyhr 发表于 2020-8-17 20:13
这个我来解释一下,变量名是真的懒得改了,写完一次不愿意再动的那种
封装函数我不太懂,是自己瞎学的 ...
感谢回复。
---
关于时区问题,虽然没有概念,但是觉得很有道理。不过代码中应未应用吧?【sq_ew】、【sq_ji】是输入量。。
变量命名不规范啊,一会拼音一会英语,看得很出戏啊。还是要感谢分享! 不打包一下? luzhiyao 发表于 2020-8-3 20:56
不打包一下?
不打包了,直接复制自己运行就行 列明 发表于 2020-8-3 20:49
变量命名不规范啊,一会拼音一会英语,看得很出戏啊。还是要感谢分享!
写的时候我自己也懵,写好之后也懒得改变量名了 按这个算法 快下山的时候 影子无限长? firefox1234 发表于 2020-8-8 19:41
按这个算法 快下山的时候 影子无限长?
肯定是按照在水平面的投影了 快下山的时候,夹角无限小,影子就是无限大 firefox1234 发表于 2020-8-9 11:33
快下山的时候,夹角无限小,影子就是无限大
所以输入的都是一个假的值,还怎么去要求结果{:1_904:} # 收藏!
---
这功能新奇,收藏之。
- 变量命名有点尬
- 未封装函数
- 变量多,图片的时区实际中应未知
页:
[1]
2