如何通过python利用百度sdk得到地理位置的经纬坐标

本文介绍了一种使用Python从百度地图API获取地理坐标的方法,并将数据存储到MySQL数据库的过程。通过读取CSV文件中的地点信息,利用urllib和json模块发送请求到百度地图API,解析返回的JSON数据获取经纬度,然后使用pymysql模块将这些数据插入到数据库中。此过程还涉及到了地址编码、异常处理以及数据类型转换等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import json
from urllib.request import urlopen, quote
import pandas as pd
import pymysql 
import numpy as np   
pymysql.converters.encoders[np.float64] = pymysql.converters.escape_float
pymysql.converters.conversions = pymysql.converters.encoders.copy()
pymysql.converters.conversions.update(pymysql.converters.decoders)
# 使用 cursor() 方法创建一个游标对象 cursor


connect=pymysql.connect(
      host="127.0.0.1",
      database="your database name",
      passwd="your passward",
      user="root",
      port=3306,
      charset='utf8mb4'
     )  
cursor = connect.cursor()  

def getlnglat(address):
    url = 'http://api.map.baidu.com/geocoder/v2/'
    output = 'json'
   # 浏览器端密钥
    ak = 'your ak'
    address = quote(address) # 由于本文地址变量为中文,为防止乱码,先用quote进行编码
    uri = url + '?' + 'address=' + address  + '&output=' + output + '&ak=' + ak 
    req = urlopen(uri)
    res = req.read().decode() 
    temp = json.loads(res)
    lat = temp['result']['location']['lat']
    lng = temp['result']['location']['lng']
    if temp['result']['level'] == '城市':
        return 
    else:
        
        return lat, lng


filename = 'F:/wtj/paqie.csv'

data = pd.read_csv(filename,encoding = 'gbk')

for i, row in enumerate(data['X坐标'][:]):
    if row == 0:
        try:
            address = data['地点'][i]
            
            seq = ('武汉',address)
            addr = ''.join(seq)
            data['X坐标'][i] = getlnglat(address)[1]
            data['Y坐标'][i] = getlnglat(address)[0]
            
        except:
            pass
    tt = data['时间'][i]
    sex = data['性别'][i]
    place = data['地点'][i]
    xx = data['X坐标'][i]
    yy = data['Y坐标'][i]
    try:
        cursor.execute("INSERT INTO paqie(`ttime`,`sex`,`address`,`X_address`,`Y_address`)VALUES (%s,%s,%s,%s,%s)",\
                                               (tt,int(sex),place,xx,yy))
    except:
        print('fail')
    print(i)

百度ak的申请链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值