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

本文介绍如何使用Python通过QQ地图API实现地址经纬度的双向转换,提供byLatLngFindAddress和byAddressFindLatLng函数,支持Excel表格中批量查找和更新地理位置信息。
摘要由CSDN通过智能技术生成
import time
import requests
import pandas as pd
from pandas import DataFrame
import xlrd

developer_key = ""  # 这里为你申请的开发者key


# 通过地址获取经纬度
def address_to_coordinate(address):
    base = "http://apis.map.qq.com/ws/geocoder/v1/?address={}&key={}".format(address, developer_key)  # 地址解析,地址转坐标
    response = requests.get(base)
    answer = response.json()
    if (answer['status'] == 0):
        data = {
            'lng': answer['result']['location']["lng"],  # 经度
            'lat': answer['result']['location']["lat"]  # 纬度
        }
    else:
        data = {
            'lng': 'error',
            'lat': 'error'
        }
    return data


# 通过经纬度获取地址
def coordinate_to_address(lat_lng):  # 注意入参格式:纬度,经度
    base = "https://apis.map.qq.com/ws/geocoder/v1/?location={}&get_poi={}&key={}".format(lat_lng, 1,
                                                                                          developer_key)  # 坐标转地址
    response = requests.get(base)
    answer = response.json()
    if (answer['status'] == 0):
        data = answer['result']['address']
    else:
        data = 'error'
    return data


# 入参excel文件名,表名 根据维度,精度查找位置
def byLatLngFindAddress(filename, sheetname):
    data = pd.read_excel(filename, sheetname)
    # 通过地址获取经纬度,并修改
    for index in range(0, len(data["经度"])):
        # 开发者并发有限制,根据情况来设置
        time.sleep(0.2)
        lat_lng = str(data["纬度"][index])+","+str(data["经度"][index])
        #请求接口并返回地址
        address = coordinate_to_address(lat_lng)
        data.loc[index, '地址'] = address
    # 保存修改
    DataFrame(data).to_excel(filename, sheet_name=sheetname, index=False, header=True)

# 入参excel文件名,表名 根据位置查找维度,精度
def byAddressFindLatLng(filename, sheetname):
    data = pd.read_excel(filename, sheetname)
    # 通过地址获取经纬度,并修改
    for index in range(0, len(data["地址"])):
        # 开发者并发有限制,根据情况来设置
        time.sleep(0.2)
        #请求接口并返回地址
        dataDict = address_to_coordinate(data["地址"][index])
        data.loc[index, '经度'] = dataDict["lat"]
        data.loc[index, '维度'] = dataDict["lng"]
    # 保存修改
    DataFrame(data).to_excel(filename, sheet_name=sheetname, index=False, header=True)
if __name__ == '__main__':
    #byLatLngFindAddress('D:/经纬度.xlsx', 'Sheet1')
    #byAddressFindLatLng('D:/经纬度.xlsx', 'Sheet1')

Python通过访问互联网上的IP地址数据库或使用专门的API来获取经度和纬度。其中,IP地址是通过解析数据包获取的。在Python中,可使用多种库和模块来实现IP地址解析、经纬度获取等相关功能,例如: 1. requests和json库 使用requests库可以直接发送HTTP请求获取响应内容,而json库则可以解析JSON格式的响应数据。具体示例代码如下: import requests import json # 定义API接口和IP地址 api_url = "http://ip-api.com/json/" ip_address = "8.8.8.8" # 发送HTTP请求并解析响应数据 api_response = requests.get(api_url + ip_address).json() latitude = api_response["lat"] longitude = api_response["lon"] print("经度:", latitude) print("纬度:", longitude) 2. geopy库 geopy是一款常用于地理编码、地理距离计算等应用的Python库。它内置了多种地理位置API服务接口,可根据IP地址地址、地名等参数获取位置信息。具体使用方法如下: from geopy import geocoders from geopy.exc import GeocoderTimedOut # 定义IP地址和地理编码服务接口 ip_address = "8.8.8.8" geo_locator = geocoders.GoogleV3() # 根据IP地址获取位置信息 try: location = geo_locator.geocode(ip_address, timeout=10) latitude = location.latitude longitude = location.longitude print("经度:", latitude) print("纬度:", longitude) except GeocoderTimedOut: print("请求超时,请重试!") 以上两种方法都可以实现通过IP地址获取经纬度的功能,具体选择哪种方法可以根据实际需求和使用条件决定。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值