Python经纬度坐标转换为距离及角度的实现

最近项目上有这样的需求,需要依据设备的经纬度坐标计算距离及角度。经验证后效果较好,并分享。

1 经纬度转换距离代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Seven'

import math

# 计算距离
def getDistance(latA, lonA, latB, lonB):
  ra = 6378140 # 赤道半径
  rb = 6356755 # 极半径
  flatten = (ra - rb) / ra # Partial rate of the earth
  # change angle to radians
  radLatA = math.radians(latA)
  radLonA = math.radians(lonA)
  radLatB = math.radians(latB)
  radLonB = math.radians(lonB)

  pA = math.atan(rb / ra * math.tan(radLatA))
  pB = math.atan(rb / ra * math.tan(radLatB))
  x = math.acos(math.sin(pA) * math.sin(pB) + math.cos(pA) * math.cos(pB) * math.cos(radLonA - radLonB))
  c1 = (math.sin(x) - x) * (math.sin(pA) + math.sin(pB)) ** 2 / math.cos(x / 2) ** 2
  c2 = (math.sin(x) + x) * (math.sin(pA) - math.sin(pB)) ** 2 / math.sin(x / 2) ** 2
  dr = flatten / 8 * (c1 - c2)
  distance = ra * (x + dr)
  distance = round(distance / 1000, 4)
  return f'{distance}km'

2 经纬度转化角度代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Seven'

import math

# 计算角度
def getDegree(latA, lonA, latB, lonB):
  radLatA = math.radians(latA)
  radLonA = math.radians(lonA)
  radLatB = math.radians(latB)
  radLonB = math.radians(lonB)
  dLon = radLonB - radLonA
  y = math.sin(dLon) * math.cos(radLatB)
  x = math.cos(radLatA) * math.sin(radLatB) - math.sin(radLatA) * math.cos(radLatB) * math.cos(dLon)
  brng = math.degrees(math.atan2(y, x))
  brng = round((brng + 360) % 360, 4)
  brng = int(brng)
  if (brng == 0.0) or ((brng == 360.0)):
    return '正北方向'
  elif brng == 90.0:
    return '正东方向'
  elif brng == 180.0:
    return '正南方向'
  elif brng == 270.0:
    return '正西方向'
  elif 0 < brng < 90:
    return f'北偏东{brng}'
  elif 90 < brng < 180:
    return f'东偏南{brng - 90}'
  elif 180 < brng < 270:
    return f'西偏南{270 - brng}'
  elif 270 < brng < 360:
    return f'北偏西{brng - 270}'
  else:
    pass

3 验证

选取深圳野生动物园(22.599578, 113.973129)为起点,深圳坪山站(22.6986848, 114.3311032)为终点,结合百度地图、谷歌地图等进行效果验证。

程序运行结果如下:

百度测距为38.3km

Google地图手动测距为39.31km

距离与角度均无问题。

到此这篇关于Python经纬度坐标转换为距离及角度的实现的文章就介绍到这了,更多相关Python经纬度坐标转换为距离及角度内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于python实现地址和经纬度转换

    中文领域: 指的是提取境内地址的经纬度,的主要调用的是百度API.中间经历了一些波折,刚开始直接使用网上代码debug半天都不行,才发现要随时跟进官方改动,使用别人的API一定要看说明书啊! 首先需要从百度地图平台上注册一个AK(在这之前要注册百度的开发者身份,免费),进入其地理编码网址: http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding 页面: 由于我们是要从地址转换经纬度,因此看地理编码就可以了

  • python 地图经纬度转换、纠偏的实例代码

    python 地图经纬度转换.纠偏的代码如下所示: # -*- coding: utf-8 -*- import json import urllib import math x_pi = 3.14159265358979324 * 3000.0 / 180.0 pi = 3.1415926535897932384626 # π a = 6378245.0 # 长半轴 ee = 0.00669342162296594323 # 偏心率平方 class Geocoding: def __init_

  • python各类经纬度转换的实例代码

    python各类经纬度转换,具体代码如下所示: import math import urllib import json x_pi = 3.14159265358979324 * 3000.0 / 180.0 pi = 3.1415926535897932384626 # π a = 6378245.0 # 长半轴 ee = 0.00669342162296594323 # 扁率 class Geocoding: def __init__(self, api_key): self.api_ke

  • Python 利用高德地图api实现经纬度与地址的批量转换

    我们都知道,可以使用高德地图api实现经纬度与地址的转换.那么,当我们有很多个地址与经纬度,需要批量转换的时候,应该怎么办呢? 在这里,选用高德Web服务的API,其中的地址/逆地址编码,可以实现经纬度与地址的转换. 高德API地址: 地理/逆地理编码:http://lbs.amap.com/api/webservice/guide/api/georegeo 坐标转换:http://lbs.amap.com/api/webservice/guide/api/convert 1.申请key 2.坐

  • Python经纬度坐标转换为距离及角度的实现

    最近项目上有这样的需求,需要依据设备的经纬度坐标计算距离及角度.经验证后效果较好,并分享. 1 经纬度转换距离代码 #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'Seven' import math # 计算距离 def getDistance(latA, lonA, latB, lonB): ra = 6378140 # 赤道半径 rb = 6356755 # 极半径 flatten = (ra - rb) / ra #

  • python 经纬度求两点距离、三点面积操作

    给出地球上两点的经纬度,计算两点之间的球面距离.给出地球上三点的经纬度,求形成的三角形面积. 对于这样的需求,可以通过使用半正失公式来计算得到我们想要的距离,面积值. 先给出半正失公式(haversine formula): 先看第一个式,等号的右边,输入参数有φ.λ,等号的右边有d.r,其中φ表示纬度,λ表示经度,d是我们要的两点的距离, r是地球半径,d/r表示两点在圆上的弧度θ. 通过整理两个式子可得: 也就是说,只要根据上面最后这行式子,带入相应的经纬度值,以及地球半径,就可以得到我们想

  • Java通过经纬度坐标获取两个点之间的直线距离的示例

    前言 现在很多App都需要附带着附近人列表功能,所以我在这里实现2个点之间的距离计算 经纬度的获取需要第三方来支持,高德地图.百度地图.... 附近人功能具体的实现逻辑: 1.获取每个人的经纬度坐标,存库记录 2.通过SQL获取指定距离范围内的用户列表(文章的 "二.MySQL中通过经纬度,获取范围内的用户") 3.通过获取到的用户列表,计算自己与用户之间度距离(文章的 "一.JAVA代码实现计算AB两点的直线距离") 一.JAVA代码实现计算AB两点的直线距离 我

  • PHP计算百度地图两个GPS坐标之间距离的方法

    本文实例讲述了PHP计算百度地图两个GPS坐标之间距离的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: /**  * 计算两个坐标之间的距离(米)  * @param float $fP1Lat 起点(纬度)  * @param float $fP1Lon 起点(经度)  * @param float $fP2Lat 终点(纬度)  * @param float $fP2Lon 终点(经度)  * @return int  */ function distanceBetw

  • Python计算点到直线距离、直线间交点夹角

    前言 项目中会有点到直线距离计算.两条直线交点坐标计算.两条直线夹角计算的需求. 一.点到直线距离计算 由于项目中得到点的坐标最容易,因此采用向量法进行所有的数学计算最清晰明了.点到直线距离就采用向量法推导. import numpy as np array_longi = np.array([x2-x1, y2-y1]) array_trans = np.array([x2-line_start_x, y2-line_start_y]) # 用向量计算点到直线的举例 array_temp =

  • 基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标

    前言 近来由于工作需要,需要提取某些城市的经纬度坐标,稍微搜索了一下,发现百度地图和高德地图都提供了相关的函数和例子.那么剩余的工作也就比较简单了,保存坐标,然后转换为WGS坐标,这样才能和现有的GPS数据以及地图匹配. 主要问题和解决方法 本地保存文件跨浏览器支持 由于安全的原因,JavaScript本地保存文件的方式通常都只有IE支持的ActiveXObject/Open方法,每次都要提示不安全和允许运行,非常麻烦.好在其他浏览器目前都支持<a>标签实现文件下载的方法.经测试最新的Goog

  • 详解js根据百度地图提供经纬度计算两点距离

    正常在使用百度地图时,我们可以通过BMap的实例对象提供的方法计算距离: var map = new BMap.Map('map_canvas'); map.getDistance(point1 ,point2); //point1.point2 是Point对象 如果在不使用百度地图,但是已知百度地图的经纬度情况下也是可以计算出与上面相同的值的 三方库 此库提供计算两点距离的方法 引用此库使用 返回(米) BMapLib.GeoUtils.getDistance(point1 ,point2)

  • redis轻松处理经纬度坐标点数据的实现方法

    目录 1. GEOADD 2. GEOPOS 3. GEODIST 4. GEORADIUS 5. GEORADIUSBYMEMBER Redis 3.2 之后,支持地理坐标数据的管理.将给定的坐标元素(纬度.经度.名字)添加到指定的键里面. 这些数据就会以有序集合的形式被储, 可以通过GEORADIUS 计算两个坐标点的距离,或者使用GEORADIUS 和 GEORADIUSBYMEMBER查询某个坐标半径内的数据.下面对其中常用的命令进行一个简单的介绍. 1. GEOADD 将坐标信息添加到

  • Qt编写地图之实现经纬度坐标纠偏

    目录 一.前言 二.功能特点 三.体验地址 四.效果图 五.相关代码 一.前言 地图应用中都涉及到一个问题就是坐标纠偏的问题,这个问题的是因为根据地方规则保密性要求不允许地图厂商使用标准的GPS坐标,而是要用国家定义的偏移标准,或者在此基础上再做算法运算,所以这就出现了三种常规的坐标标准:GPS坐标(WGS-84,国际标准,谷歌地球软件,硬件GPS模块等).中国坐标偏移标准(GCJ-02,谷歌地图.腾讯地图.高德地图等).百度坐标偏移标准(BD-09,仅仅百度地图采用).由于不允许其他坐标转换成

  • 地址到经纬度坐标转化的JAVA代码

    任务:有1000多条门店信息(放在excel中,包括地址,店名,电话等,但是没有经纬度坐标),老大让我用地址通过百度地图拾取坐标系统找到相应的坐标,然后加上坐标后更新到公司的数据库. 失败的方案:1.使用按键精灵,按键精灵是一个模仿键盘鼠标操作的软件,用来写动作脚本的,由于时间紧,没怎么研究,因为整套动作太复杂了按键精灵尝试了下不行就放弃了. 2.表单填充工具(就是把exel表格批量提交到网页),什么风越.乌溜漆(特别是这乌溜漆,还要钱,坑货)都尝试了下,结果都不满意.因为我要把excel中的内

随机推荐