gpt4 book ai didi

代码分析Python地图坐标转换

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章代码分析Python地图坐标转换由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

最近做项目正好需要坐标的转换 。

  • 各地图API坐标系统比较与转换;
  • WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,
  • 谷歌地图采用的是WGS84地理坐标系(中国范围除外);
  • GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
  • 谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系; BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系;
  • 搜狗坐标系、图吧坐标系等,估计也是在GCJ02基础上加密而成的.

然后在csv中将其转化.

最后再在百度地图API上进行检验成功 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=10923
#代码原地址
import csv
import string
import time
import math
 
#系数常量
a = 6378245.0
ee = 0.00669342162296594323
x_pi = 3.14159265358979324 * 3000.0 / 180.0 ;
 
#转换经度
def transformLat(lat,lon):
  ret = - 100.0 + 2.0 * lat + 3.0 * lon + 0.2 * lon * lon + 0.1 * lat * lon + 0.2 * math.sqrt( abs (lat))
  ret + = ( 20.0 * math.sin( 6.0 * lat * math.pi) + 20.0 * math.sin( 2.0 * lat * math.pi)) * 2.0 / 3.0
  ret + = ( 20.0 * math.sin(lon * math.pi) + 40.0 * math.sin(lon / 3.0 * math.pi)) * 2.0 / 3.0
  ret + = ( 160.0 * math.sin(lon / 12.0 * math.pi) + 320 * math.sin(lon * math.pi / 30.0 )) * 2.0 / 3.0
  return ret
 
#转换纬度
def transformLon(lat,lon):
  ret = 300.0 + lat + 2.0 * lon + 0.1 * lat * lat + 0.1 * lat * lon + 0.1 * math.sqrt( abs (lat))
  ret + = ( 20.0 * math.sin( 6.0 * lat * math.pi) + 20.0 * math.sin( 2.0 * lat * math.pi)) * 2.0 / 3.0
  ret + = ( 20.0 * math.sin(lat * math.pi) + 40.0 * math.sin(lat / 3.0 * math.pi)) * 2.0 / 3.0
  ret + = ( 150.0 * math.sin(lat / 12.0 * math.pi) + 300.0 * math.sin(lat / 30.0 * math.pi)) * 2.0 / 3.0
  return ret
 
#Wgs transform to gcj
def wgs2gcj(lat,lon):
  dLat = transformLat(lon - 105.0 , lat - 35.0 )
  dLon = transformLon(lon - 105.0 , lat - 35.0 )
  radLat = lat / 180.0 * math.pi
  magic = math.sin(radLat)
  magic = 1 - ee * magic * magic
  sqrtMagic = math.sqrt(magic)
  dLat = (dLat * 180.0 ) / ((a * ( 1 - ee)) / (magic * sqrtMagic) * math.pi)
  dLon = (dLon * 180.0 ) / (a / sqrtMagic * math.cos(radLat) * math.pi)
  mgLat = lat + dLat
  mgLon = lon + dLon
  loc = [mgLat,mgLon]
  return loc
 
#gcj transform to bd2
def gcj2bd(lat,lon):
  x = lon
  y = lat
  z = math.sqrt(x * x + y * y) + 0.00002 * math.sin(y * x_pi)
  theta = math.atan2(y, x) + 0.000003 * math.cos(x * x_pi)
  bd_lon = z * math.cos(theta) + 0.0065
  bd_lat = z * math.sin(theta) + 0.006
  bdpoint = [bd_lon,bd_lat]
  return bdpoint
 
#wgs transform to bd
def wgs2bd(lat,lon):
  wgs_to_gcj = wgs2gcj(lat,lon)
  gcj_to_bd = gcj2bd(wgs_to_gcj[ 0 ], wgs_to_gcj[ 1 ])
  return gcj_to_bd;
 
for i in range ( 3 , 4 ):
  n = str ( '2017.040' + str (i) + '.csv' )
  m = str ( '2017040' + str (i) + '.csv' )
  csvfile = open (m, 'w' ,encoding = 'UTF-8' ,newline = '')
  nodes = csv.writer(csvfile)
  nodes.writerow([ 'md5' , 'content' , 'phone' , 'conntime' , 'recitime' , 'lng' , 'lat' ])
  l = []
  with open (n,newline = ' ',encoding=' UTF - 8 ') as f:
   reader = csv.DictReader(f)
   for row in reader:
    if row[ 'md5' ] = = 'md5' :
     continue
    else :
     y = float (row[ 'lng' ])
     x = float (row[ 'lat' ])
     loc = wgs2bd(x,y)
     l.append([row[ 'md5' ],row[ 'content' ],row[ 'phone' ],row[ 'conntime' ],row[ 'recitime' ],loc[ 0 ],loc[ 1 ]])
  nodes.writerows(l)
  csvfile.close()
 
  print ( "转换成功" )

  。

最后此篇关于代码分析Python地图坐标转换的文章就讲到这里了,如果你想了解更多关于代码分析Python地图坐标转换的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com