zoukankan      html  css  js  c++  java
  • Python基于Baidu地图API,将中文地址转化为BD-09坐标

    1、AK申请

    首先在Baidu地图开发者平台http://lbsyun.baidu.com/apiconsole/key创建一个自己的应用。本次我们主要运用的服务是“地理编码”,即将结构化地址数据转换为对应坐标点(经纬度),默认转化出的坐标格式是BD-09。

    2、访问接口格式

    http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation //GET请求

    3、模编程块介绍

    3.1 访问自己拼成的url接口,获得返回json格式的数据

    注意:这边url不可用str类型拼接,不然生成的url是无效的,无法访问

     1 def getGPS(addr):
     2     data1 = {
     3         "address":addr
     4     }
     5     data2 = {
     6         'output':'json',
     7         'ak':ak
     8     }
     9     query_string1 = urllib.parse.urlencode(data1)
    10     query_string2 = urllib.parse.urlencode(data2)
    11     getUrl = url + '?' + query_string1 + '&' + query_string2
    12     result = (json.loads(requests.get(getUrl).text)["result"])["location"]    # {'lng': 112.5624746369245, 'lat': 37.89936726508969}
    13 
    14     lng = result["lng"]
    15     lat = result["lat"]
    16     return(lng ,lat)

    3.2 读写excel数据

    这边用到openpyxl和xlrd库,分别用来写和读操作

    我的表格格式,最后两列为生成的坐标经纬度

     1 def ReadWriteExcel():
     2     workbook = openpyxl.load_workbook(file)
     3     worksheet = workbook.worksheets[1]
     4     for i in range(1,len(cols1)):
     5         location = sheet1.row_values(i)[1:5]
     6         str_location = "山西省"+location[2]+location[3]+location[1]
     7         lng,lat = getGPS(str_location)
     8 
     9         worksheet.cell(i+1, 9, lng)
    10         worksheet.cell(i+1, 10, lat)
    11 
    12     workbook.save(filename="distance.xlsx")

    4、上完整代码

     1 # encoding:utf-8
     2 import openpyxl
     3 import requests
     4 import urllib.parse
     5 import json
     6 import xlrd
     7 
     8 file = 'distance.xlsx'
     9 
    10 url = 'http://api.map.baidu.com/geocoding/v3/'
    11 
    12 ak = "XXXXXXXX"
    13 
    14 wb = xlrd.open_workbook(filename=file)  # 打开文件
    15 sheet1 = wb.sheet_by_index(1)  # 通过索引获取表格
    16 cols1 = sheet1.col_values(1)  # 获取列内容  len(cols1)
    17 
    18 
    19 def getGPS(addr):
    20     data1 = {
    21         "address":addr
    22     }
    23     data2 = {
    24         'output':'json',
    25         'ak':ak
    26     }
    27     query_string1 = urllib.parse.urlencode(data1)
    28     query_string2 = urllib.parse.urlencode(data2)
    29     getUrl = url + '?' + query_string1 + '&' + query_string2
    30     result = (json.loads(requests.get(getUrl).text)["result"])["location"]    # {'lng': XX.XXXXXXXXXXX, 'lat': XX.XXXXXXXXXXXXXX}
    31 
    32     lng = result["lng"]
    33     lat = result["lat"]
    34     return(lng ,lat)
    35 
    36 def ReadWriteExcel():
    37     workbook = openpyxl.load_workbook(file)
    38     worksheet = workbook.worksheets[1]
    39     for i in range(1,len(cols1)):
    40         location = sheet1.row_values(i)[1:5]
    41         str_location = "XX省"+location[2]+location[3]+location[1]
    42         lng,lat = getGPS(str_location)
    43 
    44         worksheet.cell(i+1, 9, lng)
    45         worksheet.cell(i+1, 10, lat)
    46 
    47     workbook.save(filename="distance.xlsx")
    48 
    49 
    50 ReadWriteExcel()

    (其中需要根据不同的表格格式进行修改)

  • 相关阅读:
    windows 全局安装 composer【转】
    CentOS7使用firewalld打开关闭防火墙与端口
    转 Page Object模式
    转 用SQL语句,删除掉重复项只保留一条
    转 什么是Mbps、Kbps、bps、kb、mb及其换算和区别
    转 使用Python的logging.config.fileConfig配置日志
    转 zookeeper,dubbo和Nginx的区别
    转 lsof命令详解
    Fatal Error -26000: Not enough memory (12320 bytes) for “new buffer in LrwSrvNetTaskIt 问题解决及lr脚本心得
    Action.c(28): Error -27796: Failed to connect to server "xxxx": [10060] Connection timed out
  • 原文地址:https://www.cnblogs.com/ksp-/p/11561782.html
Copyright © 2011-2022 走看看