下面是关于“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技术站