本文是通过调用百度开放平台的API实现的经纬度查询。因此在使用前需要你去注册一个应用。

文章目录

  • 一、API 调用说明
  • 源码
    • 1. 数据准备
  • 二、根据地名计算经纬度的代码
  • 二、通过经纬度计算两地之间的距离

一、API 调用说明

  1. 打开链接

    百度地图开放平台

  2. 创建应用

  3. 获取AK

  4. 替换程序中的AK,运行就能得到返回的JSON字符串

源码

源码被我拆成了三个小节,分别是 数据准备计算经纬度计算两地距离,其他中间的处理代码则可能需要读者手动完善。

# 导入相关的包
import requests #HTTP请求
import time
import re
import json # 用于解析Json
import pandas as pd # 用于处理数据(数据分析相关的同学必须会的包)

1. 数据准备

CSV文件中有一列是city,使用pandas直接读取即可:

df = pd.DataFrame()
df = pd.read_csv(r'./city.csv',encoding="gbk")
df['city']

得到的数据如下所示,总共有一百条,是我国2020年百强县的名单:

0      昆山市
1      江阴市
2     张家港市
3      晋江市
4      常熟市...
95     福安市
96     射阳县
97     邹平县
98     海城市
99     青州市
Name: city, Length: 100, dtype: object
user_geohash num city
0 94ek6ke 1028 昆山市
1 94ek6lj 980 江阴市
2 94ek6lw 919 张家港市
3 94ek6kn 908 晋江市
4 94ek6l5 517 常熟市
... ... ... ...
95 9q0ltaw 243 福安市
96 99s4avh 242 射阳县
97 9519pwt 240 邹平县
98 94jrlp3 240 海城市
99 946hodd 240 青州市

100 rows × 3 columns


因为使用的是API,因此得到是上述的Json字符串。

二、根据地名计算经纬度的代码

/**/
def calc_ll(x):# 获取自己的AK替换Post_url中 中文括号 的内容即可Post_url = "http://api.map.baidu.com/geocoding/v3/?address=" + x + "&output=json&ak=(百度API开放平台获取的AK)&callback=showLocation"Post_data = {'address': x}Text = se.post(Post_url, data=Post_data).text.replace("'", '"').replace('/ ', '/')[27:-1] # 提取为Json格式,去掉‘showLocation&&showLocation()’这些额外的字符jsonValue = json.loads(Text) # 转化为Json对象# print(jsonValue) # 打印Json值if('result' in jsonValue):print(jsonValue['result']['location']['lng'])return [jsonValue['result']['location']['lng'],jsonValue['result']['location']['lat']]else:return ' '# 通过这行的代码去调用的获取经纬度的 API 接口
address = df['city'].apply(calc_ll) # 这里的address是可以直接导入pandas的,详细的可以查看apply的返回值
se = requests.session()

执行calc_ll后返回的值如下所示:

showLocation&&showLocation({"status":0,"result":{"location":{"lng":120.98745249794995,"lat":31.390863425081866},"precise":0,"confidence":20,"comprehension":100,"level":"区县"}})

上述百强县执行代码后的结果:

{'status': 0, 'result': {'location': {'lng': 120.98745249794995, 'lat': 31.390863425081864}, 'precise': 0, 'confidence': 20, 'comprehension': 100, 'level': '区县'}}
120.98745249794995......
{'status': 0, 'result': {'location': {'lng': 120.26444564891948, 'lat': 33.78101359213001}, 'precise': 0, 'confidence': 20, 'comprehension': 100, 'level': '区县'}}
120.26444564891948
{'status': 0, 'result': {'location': {'lng': 117.74947848721935, 'lat': 36.8700322166973}, 'precise': 0, 'confidence': 20, 'comprehension': 100, 'level': '区县'}}
117.74947848721935
{'status': 0, 'result': {'location': {'lng': 109.12452136754654, 'lat': 21.481065838235963}, 'precise': 0, 'confidence': 20, 'comprehension': 100, 'level': '区县'}}
109.12452136754654
{'status': 0, 'result': {'location': {'lng': 118.48653672086745, 'lat': 36.690416508705376}, 'precise': 0, 'confidence': 20, 'comprehension': 100, 'level': '区县'}}
118.48653672086745

查看address的值:

address
0     [120.98745249794995, 31.390863425081864]
1     [120.29156800752115, 31.926044909769043]
2      [120.56155363871446, 31.88114053634028]
3     [118.55843052000408, 24.787824575144548]
4      [120.75949588665195, 31.65953827674108]...
95    [119.65440636047963, 27.094323508059915]
96     [120.26444564891948, 33.78101359213001]
97      [117.74947848721935, 36.8700322166973]
98    [109.12452136754654, 21.481065838235963]
99    [118.48653672086745, 36.690416508705376]
Name: city, Length: 100, dtype: object
df['pos'] = df1 # 保存到df文件中
user_geohash num city pos
0 94ek6ke 1028 昆山市 [120.98745249794995, 31.390863425081864]
1 94ek6lj 980 江阴市 [120.29156800752115, 31.926044909769043]
2 94ek6lw 919 张家港市 [120.56155363871446, 31.88114053634028]
3 94ek6kn 908 晋江市 [118.55843052000408, 24.787824575144548]
4 94ek6l5 517 常熟市 [120.75949588665195, 31.65953827674108]
... ... ... ... ...
95 9q0ltaw 243 福安市 [119.65440636047963, 27.094323508059915]
96 99s4avh 242 射阳县 [120.26444564891948, 33.78101359213001]
97 9519pwt 240 邹平县 [117.74947848721935, 36.8700322166973]
98 94jrlp3 240 海城市 [109.12452136754654, 21.481065838235963]
99 946hodd 240 青州市 [118.48653672086745, 36.690416508705376]

100 rows × 4 columns

二、通过经纬度计算两地之间的距离

在得到相关地名的经纬度之后,进一步就可以根据经纬度计算两点之间的距离,输入的是度数(°)


根据经纬度计算实际距离的代码:

import math
Earth_Radius=6378.137
def sin_square(a):result=math.sin(a)return result*result
def rad(ang):return math.pi*ang/180.0
#a,b参数是数组
def distance_calculate(a,b):lata,lnga=a[0],a[1]latb,lngb=b[0],b[1]radlata,radlnga=rad(lata),rad(lnga)radlatb, radlngb = rad(latb), rad(lngb)#纬度差minus_a=radlata-radlatb#经度差minus_b=radlnga-radlngbreturn 2*math.asin( math.sqrt(sin_square(minus_a/2) + math.cos(radlata)*math.cos(radlatb)*sin_square(minus_b/2)))*Earth_Radius#坐标测试
#google
print(1000*distance_calculate((30.26848247,119.9499548338),(30.2688658749,119.9628533571)))
#baidu
print(1000*distance_calculate((30.274671,119.969392),(30.274261,119.956631)))

【Python】根据地名获取经纬度相关推荐

  1. Python根据地名获取经纬度

    以下是通过访问高德地图接口获取指定地名的经纬度信息代码: import requests import re import json'''获取地址坐标''' def get_get_location_ ...

  2. C#调用百度地图API,根据地名获取经纬度geocoding

    前言 公司的一个内部网站维护,需要根据地名填写经纬度,最终同echarts生成地图. 之前数据比较少,直接经纬度查询查的,https://jingweidu.bmcx.com/ 现在数据越来越多,手动 ...

  3. python根据地址获取经纬度,通过经纬度获取地址并反写入excel

    import time import requests import pandas as pd from pandas import DataFrame import xlrddeveloper_ke ...

  4. Python 根据地址获取经纬度及求距离

    方法一: 使用Geopy包 : https://github.com/geopy/geopy   (仅能精确到城镇,具体街道无结果返回) from geopy.geocoders import Nom ...

  5. laravel8 使用高德地图查询经纬度(输入地名获取经纬度)

    高德地图开放平台:https://lbs.amap.com/ 注:需要注册成为开发者,注册成功后就可以使用此开放平台 注册成功后,登录开发放平台,进入后台 需要创建一个新的应用 创建应用成功后,需要添 ...

  6. 记录一次nodejs 从高得地图根据地名获取经纬度

    自己取搞一个开发者token var fs = require("fs"); const http = require('http');const getPath = (name) ...

  7. php调用百度接口获取经纬度,利用百度API(js),通过地址获取经纬度的注意事项...

    网上给的很多答案都是这种: http://api.map.baidu.com/geocoder?address=地址&output=输出格式类型&key=用户密钥&city=城 ...

  8. java获取经纬度和地址等工具类

    此工具类是, 模拟请求去调用百度地图api,来根据输入的地址获取相关信息.或者根据经纬度确定地址等. 注意看下面代码的注解,注解写的很清楚. 注意:需要自行申请百度key,在代码相应位置替换,参考官方 ...

  9. Python爬虫——获取经纬度

    Python爬虫--获取经纬度 1.调用需要库 安装库: Windows + R 输入cmd 后 执行下面这两行 pip install requests pip install re import ...

最新文章

  1. 深入掌握JMS(一):JMS基础
  2. Xcode中快速定位、快速查找、快速查看文档、快速解决不再打印等技巧
  3. c++ map 析构函数_说说C++的虚析构函数
  4. 常见分布式理论(CAP、BASE)和一致性协议(Gosssip协议、Raft一致性算法)
  5. 使用Emit反射建立运行时实体模型
  6. shell后台执行命令-crontab
  7. 添加tomcat7插件设置jdk编译版本
  8. Could not find qmake configuration file解决
  9. 能用机器完成的,千万别堆工作量|持续集成中的性能自动化测试
  10. 设计师灵感交流社区|给你的作品一个舞台
  11. javaweb基础(36)_jdbc进行批处理
  12. Apache整合Tomcat(转)
  13. python文件的路径_python3 文件及文件夹路径相关
  14. 系统服务器iis如何启动不了,无法启动win7系统下IIS服务器怎么办
  15. 电商指标之用户留存率
  16. Java银行账户管理系统实验总结
  17. 操作系统实践 job3
  18. 微信公众平台开发——微信授权登录(OAuth2.0)
  19. 再见python你好go语言_再见,Python!你好,Go语言
  20. Weakly-Supervised Salient Object Detection via Scribble Annotations

热门文章

  1. Real-Time Rendering 笔记
  2. Decentralized Federated Learning: A Segmented Gossip Approach
  3. ELK:LogStash写入ES索引建立差8个时区问题
  4. unity学习中经常要碰到的几种数据结构
  5. Typora付费,恢复到老版本
  6. 基于OpenCV_C++人脸检测打码技术
  7. Fatal Python error: Aborted
  8. 低成本的ddos防御方案
  9. RockChip px3se 使用wpa_spplicant连接wifi上网
  10. YARN框架学习思维导图