orangleliu笔记本

python开发笔记,问题解决,技术分享。 ...

↑我也要推荐

自制计算经纬度位移 python 程序

发布时间:2011-06-20 12:21:23, 关注:+7701, 赞美:+4, 不爽:+226

原始出处: Rikku的涂鸦馆

前两天,我的老同学发邮件给我,希望我能制作一个能多点定位的,可以计算经度和纬度距离的在线计算器来帮助他的工作。当然还不止这些,同时他还希望能做以下相对的排序。

比如说,同一个位置的经纬度开始,移动向东南西北等不同方向位移的经纬度位置。

呵呵,真是个麻烦的家伙,现在虽然在做 IT,但荒废了的地理知识还是记得些的,好吧,马上有了思路,于是便答应了他。

说干就干,我想语言就选择精于计算的 Python 来编码,首先我先要推导一个完整的理论,然后再将它们变成代码。

经和纬通常会以度作为计算单位,但在实际的计算中运用更多的是弧度的净值。 Python 可以默认度的条件;弧度将只能用于内部功能实现。我将使用一个实例,即现在有一个半径为 r,弧度的角度为 θ 长度为 rθ 的圆。好吧,我们假设地球是一个完美的球体,其实地理的运算,通常是把地球作为一个完美圆体的。

移动向北或南

设 R 是地球的半径,弧度的角 φ 相对地球表面的弧长为 M=Rφ,因此一公里的弧长 M 对应 φ = m/R 角度。那么理想情况下,向正南正北移动将不改变经度。

移动向东或西

这个计算相对复杂一些,如果是平行于赤道,除了经纬度,那么计算方式就同上。但经纬度一旦发生变化,这种距离相对的经纬度也将发生剧烈变化。例如,一个沿着北极圈行进的经度,几乎不可能像在赤道行进一样。

那么假设你是在赤道以北的北纬 φ 度。按等价纬度 φ 为周长的圆,此圆定平行于赤道,是 COSφ 倍或以上的赤道周长大小。因此,在纬度 φθ 弧度的角度描画出一个长度为 θ,M = R^COSφ的弧线。那么一公里的距离 m 向东或向西应对应 θ = M/(R COSφ) 的经度变化,向正东正西移动不会改变这个值。

这个就是这个工程与弧度角度的推导,Python 的余弦函数也会是在一个弧度上。Rikku 之所以像一个名侦探一样道出精彩的推理,是为 Rikku 曾经没少为这个遗忘已久的知识和运算绞尽脑汁所做的掩饰而已。

哦对了,经度和纬度,通常表示为度,所以 Python 的函数输入和输出需要做一些调整。

import math

earth_radius = 3960.0
degrees_to_radians = math.pi/180.0
radians_to_degrees = 180.0/math.pi

def change_in_latitude(miles):
    "Given a distance north, return the change in latitude."
    return (miles/earth_radius)*radians_to_degrees

def change_in_longitude(latitude, miles):
    "Given a latitude and a distance west, return the change in longitude."
    # Find the radius of a circle around the earth at given latitude.
    r = earth_radius*math.cos(latitude*degrees_to_radians)
    return (miles/r)*radians_to_degrees

如果你觉得本站对你有帮助,欢迎向本站赞助 :P

使用支付宝捐赠

Copyright© Python4cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系。

联系/投搞/留言: en.simple.is.better@gmail.com 向本站捐赠