python经纬度转换为平面坐标_Python代码实现 经纬度坐标转换为距离及角度【附代码】...

今天爱分享给大家带来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

距离与角度均无问题。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python 经纬度转换平面坐标需要借助第三方库,比较常用的是 pyproj 和 geopy。 pyproj 提供了工具来处理各种投影方式的坐标系转换,可以将经纬度转换平面坐标。其中最常用的投影方式是 UTM 投影,可以将地球划分若干个区域,每个区域采用不同的投影方式。使用 pyproj 将经纬度转换为 UTM 坐标,即可得到平面坐标。 geopy 是一个用于地理编码和反地址编码的 Python 库,其中包含多种投影方式的坐标系转换。使用 geopy,可以轻松地将经纬度转换平面坐标,同时支持多种坐标系和单位。 使用这些库,可以快速实现 Python 经纬度转换平面坐标的功能,方便地处理地理空间数据。 ### 回答2: Python是一种动态、面向对象、解释性语言,广泛应用于数据处理、科学计算和计算机编程等领域。在地理信息系统(GIS)的应用中,经纬度是一种常用的地理数据表示方式。但是,经纬度坐标系由于地球是一个球体而非一个平面,因此需要将其通过数学转换平面坐标系,才能进行地图展示、地理分析等操作。 Python提供了许多库和工具,可以实现经纬度转换平面坐标的功能。其中,比较常用的有两种方式: 一、使用Proj库 Proj库是一个地图投影库,可以将地球上的经纬度坐标转换平面坐标。使用前需要安装proj和pyproj库。 使用方法如下: ```python import pyproj # 实例化一个Proj对象 proj = pyproj.Proj(proj='utm', zone=49, ellps='WGS84') # 指定经纬度 longitude = 127.96 latitude = 45.32 # 使用Proj对象进行经纬度平面坐标 result = proj(longitude, latitude) # 输出结果 print(result) ``` 其中,proj参数指定投影方式,zone参数指定投影带,ellps参数指定参考椭球体。 二、使用GeographicLib库 GeographicLib库是一个开源的地理计算库,提供了很多地理计算的函数,包括经纬度转换平面坐标。 使用方法如下: ```python from geographiclib.geodesic import Geodesic # 指定两个坐标点 lon1, lat1 = 127.96, 45.32 lon2, lat2 = 128.04, 45.44 # 使用Geodesic库计算两点间距离角度等参数 g = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2) distance = g['s12'] # 计算两点距离对应的平面坐标 x, y = Geodesic.WGS84.Forward(lat1, lon1, g['azi1'], distance)[:2] # 输出结果 print(x, y) ``` 其中,Inverse函数用于计算两点间的距离、方位角等参数,Forward函数用于将经纬度坐标转换平面坐标。 综上所述,Python有多种库可以实现经纬度转换平面坐标的功能。在实际应用中,可以根据具体的要求和数据形态选择合适的方法。 ### 回答3: Python是一种功能强大的编程语言,可以在各种应用程序中广泛使用。在地理信息系统(GIS)应用程序中,常常需要将经纬度坐标转换平面坐标,以进行空间分析和可视化。 Python中有许多库可以实现经纬度坐标转换平面坐标的操作,包括PyProj、GeoPy和GDAL等等。在这,我们以使用PyProj库来进行说明。 PyProj库是一个开源的Python库,可以用来进行地理空间数据的投影转换。在使用前需要先安装库,在命令行中输入pip install pyproj即可安装。下面通过一个具体的例子来展示如何使用该库进行经纬度转换。 需要将经纬度坐标(113.321,23.134)转换平面坐标。首先我们需要选择一个合适的投影,商业应用中常用的有高斯-克吕格投影(Gauss-Kruger projection)和通用横轴墨卡托投影(Universal Transverse Mercator,UTM)等。这以UTM投影为例。 在PyProj中,UTM投影通常使用通过EPSG代码来指定。需要导入pyproj库,使用一个转换器(Transformer)来将经纬度坐标转换平面坐标代码如下: ```Python import pyproj # 设置UTM投影下的EPSG编码 utm_epsg = 32651 # 创建转换器:从WGS84经纬度坐标到UTM平面坐标 wgs84_to_utm = pyproj.Transformer.from_crs(4326, utm_epsg, always_xy=True) # 输入经纬度坐标 longitude, latitude = 113.321, 23.134 # 使用转换器进行转换 easting, northing = wgs84_to_utm.transform(longitude, latitude) # 输出平面坐标 print(easting, northing) ``` 输出结果为(831550.4546757987, 2552638.1182371756),表示经纬度坐标在UTM投影下对应的平面坐标为(831550.45,2552638.12)。 总之,使用Python进行经纬度坐标转换平面坐标的操作并不复杂,只需要选择合适的投影和库,按照一定的步骤操作即可完。同时,需要注意的是投影转换会引入一定程度的误差,因此在精度要求较高的业务场景中需要谨慎地进行选择和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值