zoukankan      html  css  js  c++  java
  • 使用经纬度直接计算距离与方位角

    距离

    import math
    def cal_dis(lat1, lon1,lat2, lon2):
        latitude1 = (math.pi/180)*lat1
        latitude2 = (math.pi/180)*lat2
        longitude1 = (math.pi/180)*lon1
        longitude2= (math.pi/180)*lon2
        #因此AB两点的球面距离为:{arccos[sinb*siny+cosb*cosy*cos(a-x)]}*R
        #地球半径
        R = 6378.137
        d = math.acos(math.sin(latitude1)*math.sin(latitude2)+ math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1))*R
        return d
    
    
    if __name__ == '__main__':
        print cal_dis(23.0,101.1,23.06,113.34)

    或者使用

    from geopy.distance import geodesic
    
    geodesic((30.28708,120.12802999999997), (28.7427,115.86572000000001)).m

    经纬度是角度,而三角函数的输入是弧度。

    方位角

    def calc_azimuth(lat1, lon1, lat2, lon2):
        lat1_rad = lat1 * math.pi / 180
        lon1_rad = lon1 * math.pi / 180
        lat2_rad = lat2 * math.pi / 180
        lon2_rad = lon2 * math.pi / 180
    
        y = math.sin(lon2_rad - lon1_rad) * math.cos(lat2_rad)
        x = math.cos(lat1_rad) * math.sin(lat2_rad) - 
            math.sin(lat1_rad) * math.cos(lat2_rad) * math.cos(lon2_rad - lon1_rad)
    
        brng = math.atan2(y, x) * 180 / math.pi
    
        return float((brng + 360.0) % 360.0)
  • 相关阅读:
    [HNOI2006]超级英雄
    [CTSC1999]家园
    火星探险问题
    [HNOI2008]GT考试
    [USACO14DEC]后卫马克Guard Mark
    [NOI2018]归程
    [USACO15DEC]最大流Max Flow
    [NOIPlus]斗地主
    [LUOGU] P3128 [USACO15DEC]最大流Max Flow
    [BZOJ] 1878: [SDOI2009]HH的项链
  • 原文地址:https://www.cnblogs.com/Lxk0825/p/15358776.html
Copyright © 2011-2022 走看看