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

下面是关于“python各类经纬度转换的实例代码”的详细攻略:

什么是经纬度?

经纬度是地球上的一种地理坐标系,它由经度和纬度两个值组成。经度指东西向的线,是指垂直于地球的子午线,而纬度指南北向的线,是指环绕地球的赤道。人们通常用度数来表示经纬度,经度的取值范围为-180度到180度,而纬度的取值范围为-90度到90度。

经纬度的转换

度分秒转换为小数

在实际的应用中,常常需要把度分秒的表示方式转换为小数的形式。下面是一个将度分秒转换为小数的示例代码:

def dms_to_decimal(d, m, s):
    decimal = d + float(m)/60 + float(s)/3600
    return decimal

其中,d表示度,m表示分,s表示秒。这个函数会返回一个表示为小数的经度或者纬度的值。例如:如果将东经116度30分20秒转换为小数,可以这样调用:

>>> dms_to_decimal(116, 30, 20)
116.50555555555556

WGS84坐标系与火星坐标系的转换

WGS84坐标系是GPS定位系统所采用的坐标系,而火星坐标系则是中国国内的一种常用坐标系,它通常会比WGS84坐标系提供更精确的定位结果。下面是一个将WGS84坐标系转换为火星坐标系的示例代码:

from math import pi, sin, cos, sqrt, atan2

def transform_wgs84_to_gcj02(wgsLon, wgsLat):
    a = 6378245.0
    ee = 0.00669342162296594323

    def transform(latitude, longitude):
        dLat = transformLat(longitude - 105.0, latitude - 35.0)
        dLon = transformLon(longitude - 105.0, latitude - 35.0)
        radLat = latitude / 180.0 * pi
        magic = sin(radLat)
        magic = 1 - ee * magic * magic
        sqrtMagic = sqrt(magic)
        dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi)
        dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * pi)
        return (latitude + dLat, longitude + dLon)

    def transformLat(x, y):
        ret = (-100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(abs(x))) * sin(6.0 * pi * x) + (
                    300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x))) * sin(
            2.0 * pi * x)
        ret += (0.2 * sqrt(abs(y)) * sin(pi * y) + 0.2 * y * sin(5.0 * pi * y)) * (y > 0.0)
        ret += (
                    -100.0 + 2.0 * x - 3.0 * y + 0.2 * y * y + 0.1 * x * y - 0.2 * sqrt(abs(x))) * sin(
            6.0 * pi * x) + (
                           -300.0 + x - 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x))) * sin(
                       2.0 * pi * x)
        ret += (-0.2 * sqrt(abs(y)) * sin(pi * y) + 0.2 * y * sin(5.0 * pi * y)) * (y < 0.0)
        return ret

    def transformLon(x, y):
        ret = (300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x))) * cos(2.0 * pi * y) + (
                    -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(abs(x))) * cos(
            6.0 * pi * y)
        ret += (-0.2 * sqrt(abs(x)) * cos(pi * x) + 0.2 * x * cos(5.0 * pi * x) + 0.2 * x * (x > 0.0)) * (x > 0.0)
        ret += (0.2 * sqrt(abs(x)) * cos(pi * x) + 0.2 * x * cos(5.0 * pi * x) + 0.2 * x * (x < 0.0)) * (x < 0.0)
        return ret

    return transform(wgsLat, wgsLon)

该函数的返回值是一个二元组,分别表示火星坐标系下的经度和纬度。例如:如果将东经116.384833和北纬39.908458转换为火星坐标系,可以这样调用:

>>> transform_wgs84_to_gcj02(116.384833, 39.908458)
(116.39153369509492, 39.91443525608911)

总结

本文主要介绍了经纬度的相关知识,以及如何在Python中实现经纬度的转换。其中包括了将度分秒转换为小数,以及将WGS84坐标系转换为火星坐标系的示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python各类经纬度转换的实例代码 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python读取并显示图片的三种方法(opencv、matplotlib、PIL库)

    下面我会对“Python读取并显示图片的三种方法(OpenCV、Matplotlib、PIL库)”进行详细的讲解。 前言 图像是我们日常生活中使用最多的媒介之一,而Python作为一个高级编程语言,在图像处理中被广泛应用。相比于其他语言,Python拥有庞大且易于使用的图像处理工具包,比如OpenCV、Matplotlib以及PIL库等,今天我们就来详细讲解…

    python 2023年5月18日
    00
  • 解决python3捕获cx_oracle抛出的异常错误问题

    解决 Python3 捕获 cx_Oracle 抛出的异常错误问题,主要有以下两种方式: 方式一:使用 cx_Oracle 的 warning 事件 在代码中 import cx_Oracle python import cx_Oracle 定义一个函数,用于捕获 cx_Oracle 抛出的 warning 事件信息,并输出。 python def hand…

    python 2023年5月13日
    00
  • Requests什么的通通爬不了的Python超强反爬虫方案!

    Requests什么的通通爬不了的Python超强反爬虫方案! 在网络爬虫中,反爬虫技术是非常常见的,其目的是为了防止过多的数据抓取和恶意软件对网站造成的影响。对于网站作者来讲,为了保护自己的数据,也需要具备反爬虫的能力。本文将介绍一种Python超强反爬虫方案,使用Pyppeteer与Selenium技术,以及动态User-Agent与代理IP等技术来防护…

    python 2023年5月14日
    00
  • Python实战之自动发送邮件的实现

    Python实战之自动发送邮件的实现 在Python中,我们可以使用smtplib和email库来实现自动发送邮件的功能。本文将详细讲解如何使用Python实现自动发送邮件的功能,包括创建SMTP连接、构建邮件内容、发送邮件等步骤。 创建SMTP连接 在Python中,我们可以使用smtplib库创建SMTP连接。以下是一个示例,演示如何创建SMTP连接: …

    python 2023年5月15日
    00
  • 如何处理Python3.4 使用pymssql 乱码问题

    接下来我会详细讲解如何处理Python3.4使用pymssql乱码问题的完整攻略。 问题描述 在Python3.4中使用pymssql连接Microsoft SQL Server数据库时,可能会出现中文乱码的问题。 解决方法 1. 设置字符集 通过设置连接字符集来解决中文乱码的问题。默认情况下,pymssql使用的是iso-8859-1字符集,而我们通常使用…

    python 2023年5月20日
    00
  • 趣味Python实战练习之自动更换桌面壁纸脚本附源码

    让我来详细讲解一下“趣味Python实战练习之自动更换桌面壁纸脚本附源码”的完整攻略。 1. 项目介绍 本项目是一个Python实战练习,旨在通过编写一个自动更换桌面壁纸脚本,锻炼Python编程能力。 2. 项目要求 实现一个定时自动更换桌面壁纸的脚本,支持手动更换和定时更换两种方式。脚本通过爬取指定壁纸网站的图片,将图片下载到本地,然后设置为桌面壁纸。同…

    python 2023年5月19日
    00
  • Python 3.x踩坑实战汇总

    下面是详细的攻略: Python 3.x踩坑实战汇总 Python 3.x是Python语言的最新版本,与Python 2.x相比,有很多新特和改进。但是,在实际开发中,我们也会遇到一些坑,本文将对Python 3.x踩坑实战进行汇总提供两个示例说明。 1. print函数 在Python 2.x中,print是一个语句,而在Python 3.x中,prin…

    python 2023年5月14日
    00
  • Python入门之字符串操作详解

    Python入门之字符串操作详解 本文将为大家介绍Python字符串的各种操作及使用方法。在Python中,字符串是一种常见的数据类型,我们可以通过字符串来存储和表示文本内容。字符串是不可变的,也就是一旦创建就无法修改它的内容。 字符串的定义 Python中字符串的定义方式有多种,最常见的方式是使用单引号或双引号。 str1 = ‘hello world!’…

    python 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部