【python学习笔记】Python对经纬度处理

2023-10-30

说明

因为地球是球面,所以地球平面间的距离也得根据球面来计算。
连个问题:
- 两经纬度点之间的距离
- 根据一个给定经纬度的点,进行附近若干距离地点查询

两点之间的距离

# 根据经纬度计算距离
def __distance(lon1, lat1, lon2, lat2):  # 经度1,纬度1,经度2,纬度2 (十进制度数)
    """
    根据经纬度计算距离
    :param lon1: 点1经度
    :param lat1: 点1纬度
    :param lon2: 点2经度
    :param lat2: 点2纬度
    :return:distance
    """
    # 将十进制度数转化为弧度
    lon1, lat1, lon2, lat2 = map(radians, [float(lon1), float(lat1), float(lon2), float(lat2)])

    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
    c = 2 * asin(sqrt(a))
    r = 6371.137  # 地球平均半径,单位为公里
    return float('%.2f' % (c * r))

Mysql-根据一个给定经纬度的点,进行附近若干距离地点查询

需求:已知当前位置,查找附近10km内的所有站点
效果应该是地图上有一个圆形的范围,但是这种思路只想到对每条记录,去进行遍历,跟数据库中的每一个点进行距离计算,当距离小于500米时,认为匹配。这样做确实能够得到结果,但是效率极其低下,因为每条记录都要去循环匹配n条数据,其消耗的时间可想而知。

看到网上有个思路:利用我们想要得到圆的外接正方形,然后拿正方形的经纬度范围去搜索数据库。

image

# 确定查询经纬度范围
def __get_area(latitude, longitude, dis):
    """
    确定查询经纬度范围
    :param latitude:中心纬度
    :param longitude:中心经度
    :param dis:半径
    :return:(minlat, maxlat, minlng, maxlng)
    """
    r = 6371.137
    dlng = 2 * math.asin(math.sin(dis / (2 * r)) / math.cos(latitude * math.pi / 180))
    dlng = dlng * 180 / math.pi

    dlat = dis / r
    dlat = dlat * 180 / math.pi

    minlat = latitude - dlat

    maxlat = latitude + dlat

    minlng = longitude - dlng

    maxlng = longitude + dlng

    return minlat, maxlat, minlng, maxlng

leason | 博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【python学习笔记】Python对经纬度处理 的相关文章

  • openpyxl 2.4.2:保存后公式生成的单元格值为空

    我使用 openpyxl 打开文件 编辑一些单元格并保存更改 这是一个例子 import openpyxl book openpyxl load workbook sheet path sheet book active for row i
  • 在 Django 中定义视图和 url。为什么调用函数时不使用括号?

    我已经在经历 Python速成课程 目前正在进行 Django Web应用程序项目 学习日志 阶段 有些东西与我已经学到的相矛盾 views py file from django shortcuts import render def i
  • 如何屏蔽 PyTorch 权重参数中的权重?

    我正在尝试在 PyTorch 中屏蔽 强制为零 特定权重值 我试图掩盖的权重是这样定义的def init class LSTM MASK nn Module def init self options inp dim super LSTM
  • 替换字符串列表中的 \x00 的最佳方法?

    我有一个来自已解析 PE 文件的值列表 其中包括 x00每个部分末尾的空字节 我希望能够删除 x00字符串中的字节而不删除所有字节 x 文件中的 s 我试过做 replace and re sub 但并没有取得太大成功 使用Python 2
  • Python 中的六边形自组织映射

    我在寻找六边形 自组织映射 http en wikipedia org wiki Self organizing map在Python上 准备好模块 如果存在的话 绘制六边形单元格的方法 将六边形单元作为数组或其他方式使用的算法 About
  • 使用 Django 的 post_save() 信号

    我有两张桌子 class Advertisement models Model created at models DateTimeField auto now add True author email models EmailField
  • 获取单个方程的脚本

    在文本文件中输入 a 2 8 b 3 9 c 4 8 d 5 9 e a b f c d g 0 6 h 1 7 i e g j f h output i j 期望的输出 输出 2 8 3 9 0 6 4 8 5 9 1 7 如果输入文件名
  • 在 Python 中使用 sec 函数的反函数

    我正在创建一个程序 用于计算从一定高度范围和设定初始速度发射射弹的最佳角度 在我需要使用的最终方程中 存在一个反 sec 函数 它导致了一些麻烦 我已经导入了数学并尝试使用 asec 无论如何 但是数学似乎无法计算反秒函数 我也明白 sec
  • 在 python-docx 中搜索和替换

    我有一个包含以下字符串的文档 模板 你好 我的名字是鲍勃 鲍勃是一个很好的名字 我想使用 python docx 打开此文档并使用 查找和替换 方法 如果存在 来更改每个字符串 Bob gt Mark 最后 我想生成一个新文档 其中包含字符
  • python中函数变量的作用域

    假设我们有两个函数 def ftpConnect ftp FTP server ftp login ftp cwd path def getFileList ftpConnect files ftp nlst print files 如果我
  • VSCode pytest 测试发现失败

    Pytest 测试发现失败 用户界面指出 Test discovery error please check the configuration settings for the tests 输出窗口显示 Test Discovery fa
  • 如何为多组精灵创建随机位置?

    我尝试使用 blit 和 draw 方法进行 for 循环 并为 PlayerSprite 和 Treegroup 使用不同的变量 for PlayerSprite in Treegroup surface blit PlayerSprit
  • Pandas:根据列名进行列的成对乘法

    我有以下数据框 gt gt gt df pd DataFrame ap1 X 1 2 3 4 as1 X 1 2 3 4 ap2 X 2 2 2 2 as2 X 3 3 3 3 gt gt gt df ap1 X as1 X ap2 X a
  • 在wxpython中使用wx.TextCtrl并在按钮单击后显示数据的简单示例 - wx新手

    我正在学习 python 并尝试使用 wxpython 进行 UI 开发 也没有 UI exp 我已经能够创建一个带有面板 按钮和文本输入框的框架 我希望能够在文本框中输入文本 并让程序在单击按钮后对输入框中的文本执行操作 我可以获得一些关
  • FastText - 由于 C++ 扩展未能分配内存,无法加载 model.bin

    我正在尝试使用 FastText Python APIhttps pypi python org pypi fasttext https pypi python org pypi fasttext虽然 据我所知 此 API 无法加载较新的
  • ValueError:无法插入 ID,已存在

    我有这个数据 ID TIME 1 2 1 4 1 2 2 3 我想按以下方式对数据进行分组ID并计算每组的平均时间和规模 ID MEAN TIME COUNT 1 2 67 3 2 3 00 1 如果我运行此代码 则会收到错误 ValueE
  • python中的sys.stdin.fileno()是什么

    如果这是非常基本的或之前已经问过的 我很抱歉 我用谷歌搜索但找不到简单且令人满意的解释 我想知道什么sys stdin fileno is 我在代码中看到了它 但不明白它的作用 这是实际的代码块 fileno sys stdin filen
  • Python 矩阵每一行的总和

    lista 1 2 3 4 5 6 7 8 9 print lista def filas lista res for elemento in lista x sum lista elemento res append x print re
  • 使用 lambda 函数更改属性值

    我可以使用 lambda 函数循环遍历类对象列表并更改属性值 对于所有对象或满足特定条件的对象 吗 class Student object def init self name age self name name self age ag
  • 如何在SqlAlchemy中执行“左外连接”

    我需要执行这个查询 select field11 field12 from Table 1 t1 left outer join Table 2 t2 ON t2 tbl1 id t1 tbl1 id where t2 tbl2 id is

随机推荐

  • docker创建镜像之Dockerfile

    使用命令 docker build 从零开始来创建一个新的镜像 Dockerfile 是一个用来构建镜像的文本文件 文本内容包含了一条条构建镜像所需的指令和说明 参考 Docker 镜像使用 菜鸟教程 创建Dockerfile文件 runo
  • BigQuery基础查询语句整理

    BigQuery 是 Google Cloud Platform 上一种可以让用户以 SQL 语句来查询大规模数据的云服务 它可以让用户以低廉的价格 快速地访问大量数据 而不需要拥有自己的基础架构 BigQuery 支持多种数据格式 如 C
  • 利用PyTorch C++ API(LibTorch)加载预训练模型及预测

    利用PyTorch C API LibTorch 加载预训练模型及预测 前言 LibTorch是基于PyTorch的包含头文件 库文件和CMake编译 配置 文件的C API CMake编译配置文件并不是必须的 但官方推荐使用 且会持续维护
  • java开发工程师面试问题大全及答案大全

    前言 Alibaba作为国内互联网行业的 老大 一直以来也是很多 数码宝贝 梦寐以求的公司 我个人是做Java开发的 阿里这些年也开发了很多屌炸天的开源项目 像什么Spring Cloud Alibaba 开源Java诊断工具Arthas
  • Ubuntu18.04 安装 samba 服务器

    步骤一 直接使用命令 sudo apt get install samba 步骤二 检查下samba安装信息 使用命令 dpkg l grep i samba 步骤三 使用命令 来启动samba服务 etc init d smbd star
  • 【江苏省赛】C - Cats 找规律+模拟

    原题 输入1 1 输出1 1 输入2 3 输出2 1 2 3 题意 1 20的数字 两个相同数字不能相邻 且他们之间的最小值要严格小于它们 求长度为n的这样的序列 思路 大的插在现有的空中间 如下 1 2 1 2 3 2 3 1 3 2 3
  • 初探ROP

    文章目录 0x01 前言 0x02 什么是ROP 0x03 为什么要ROP 0x04 基本ROP ret2shellcode 含义 从原理中解析ret2shellcode 从例子中解析ret2shellcode 发现利用点 确定利用前提 调
  • 对比和消融实验

    对比实验 Comparative Experiment 和消融实验 Ablation Experiment 是在科学研究中常用的两种实验设计方法 用于评估和验证某个因素对研究结果的影响 对比实验是通过将不同的方法 模型或算法进行比较来评估它
  • Python统计分析库statsmodels的OLS

    statsmodels库官方文档http www statsmodels org stable 里面包含很多统计模型和相应计算结果 一些Linear Regression Models例子http www statsmodels org s
  • xssgame第一关至第五关

    第一关很简单 进入第二关 先尝试 查看页面源代码 可以利用闭合 答案截图 第三关 从源代码可以看到 lt gt 被转义了 所以选了几个不需要 lt gt 这个事件性的 第四关 将单引号换成双引号 第五关 第五关频频出现多余的下划线 只要sc
  • C语言-学生学号成绩读入程序(输出了学生总分、平均分、名次以及学生信息的查询)

    任务描述 成绩排名次 某班期末考试科目为数学 MT 英语 EN 和物理 PH 有最多不超过30人参加考试 考试后要求 1 计算每个学生的总分和平均分 2 按总分成绩由高到低排出成绩的名次 3 输出名次表 表格内包括学生编号 各科分数 总分和
  • 华为OD机试 - 垃圾短信识别(Java)

    题目描述 大众对垃圾短信深恶痛绝 希望能对垃圾短信发送者进行识别 为此 很多软件增加了垃圾短信的识别机制 经分析 发现正常用户的短信通常具备交互性 而垃圾短信往往都是大量单向的短信 按照如下规则进行垃圾短信识别 本题中 发送者A符合以下条件
  • android自带网页提供,Android调用系统自带浏览器打开网页的实现方法

    在Android中可以调用自带的浏览器 或者指定一个浏览器来打开一个链接 只需要传入一个uri 可以是链接地址 启动android默认浏览器 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器 如果手机本身安装了多
  • Acwing-42. 栈的压入、弹出序列

    每一步进行的操作有两种 将下一个数压入栈中 将当前栈顶元素弹出 判断当前栈顶元素是否和下一个要输出的数是一样的 一样 gt 必然会将当前栈顶元素弹出 不一样 gt 必然会将输入序列的下一个元素加入栈中 class Solution publ
  • 实战DeviceIoControl 之五:列举已安装的存储设备

    Q 前几次我们讨论的都是设备名比较清楚的情况 有了设备名 路径 就可以直接调用CreateFile打开设备 进行它所支持的I O操作了 如果事先并不能确切知道设备名 如何去访问设备呢 A访问设备必须用设备句柄 而得到设备句柄必须知道设备路径
  • tf.add()不只是简单相加

    tf add 大多数用法都是 单个数字和单个数字的简单相加 例如 import tensorflow as tf x tf constant 2 y tf constant 1 sess tf Session print sess run
  • Python中的【if __name__=='__main__':】

    1 Java和C 的程序入口 Java的程序入口Main函数 public static void Main string args 方法体 C 的程序入口Main函数 public static void Main string args
  • 业务数据分析——同环比(待补全)

    1 解决的问题 企业对公司人员贡献 离职 入职 招聘 人力成本等的统计和发现 与之前特定时期的数据对比 直观的感受数值变化 各方面的发展情况 从而对企业结构和投入等作出调整 同比说明本期发展水平与去年同期发展水平对比的相对发展速度 环比说明
  • echarts 修改图片(画布)大小

    一 问题 echarts 官网有很多 examples 可以直接在上面修改成自己想要的样子 链接 https echarts apache org examples 但是我发现这个不能改变整个图片的大小 也就是下载之后的大小 有时候布局不是
  • 【python学习笔记】Python对经纬度处理

    说明 因为地球是球面 所以地球平面间的距离也得根据球面来计算 连个问题 两经纬度点之间的距离 根据一个给定经纬度的点 进行附近若干距离地点查询 两点之间的距离 根据经纬度计算距离 def distance lon1 lat1 lon2 la