吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2209|回复: 12
收起左侧

[Python 转载] 影长求经纬度

[复制链接]
aydcyhr 发表于 2020-8-3 19:23
一个由影长和时间计算经纬度的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)

免费评分

参与人数 5吾爱币 +4 热心值 +4 收起 理由
619168708 + 1 + 1 热心回复!
周是圆周的周 + 1 热心回复!
abc265 + 1 终于有一个我能看懂的了
zhuzhici + 1 + 1 我很赞同!
从零学习的歪经小 + 1 + 1 正在学python,感觉可能能找到女神家了,试试去、

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| aydcyhr 发表于 2020-8-17 20:13

这个我来解释一下,变量名是真的懒得改了,写完一次不愿意再动的那种

封装函数我不太懂,是自己瞎学的,这段时间了解一下,多谢了

时区的问题我是通过日期加时间来解决的,比如冬至,赤道与太阳的夹角是确定的,那么加上时间和一个与太阳对应的相对坐标,那么是应该是可以确定下来当前时区的,需要进一步计算的是纬度,这个我是用了个三角函数来做的,准确度肯定不太行了,也就是看金蝉脱壳的时候想到的,六分仪看着挺厉害
lindey 发表于 2020-8-19 23:31
aydcyhr 发表于 2020-8-17 20:13
这个我来解释一下,变量名是真的懒得改了,写完一次不愿意再动的那种

封装函数我不太懂,是自己瞎学的 ...

感谢回复。
---

关于时区问题,虽然没有概念,但是觉得很有道理。不过代码中应未应用吧?【sq_ew】、【sq_ji】是输入量。。

列明 发表于 2020-8-3 20:49
变量命名不规范啊,一会拼音一会英语,看得很出戏啊。还是要感谢分享!
luzhiyao 发表于 2020-8-3 20:56
不打包一下?
 楼主| aydcyhr 发表于 2020-8-8 18:51

不打包了,直接复制自己运行就行
 楼主| aydcyhr 发表于 2020-8-8 18:53
列明 发表于 2020-8-3 20:49
变量命名不规范啊,一会拼音一会英语,看得很出戏啊。还是要感谢分享!

写的时候我自己也懵,写好之后也懒得改变量名了
firefox1234 发表于 2020-8-8 19:41
按这个算法 快下山的时候 影子无限长?
 楼主| aydcyhr 发表于 2020-8-8 21:42
firefox1234 发表于 2020-8-8 19:41
按这个算法 快下山的时候 影子无限长?

肯定是按照在水平面的投影了
firefox1234 发表于 2020-8-9 11:33
快下山的时候,夹角无限小,影子就是无限大
 楼主| aydcyhr 发表于 2020-8-10 07:09
firefox1234 发表于 2020-8-9 11:33
快下山的时候,夹角无限小,影子就是无限大

所以输入的都是一个假的值,还怎么去要求结果
lindey 发表于 2020-8-17 12:47

收藏!


这功能新奇,收藏之。

  • 变量命名有点尬
  • 未封装函数
  • 变量多,图片的时区实际中应未知
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 01:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表