资讯动态

[Python]利用高德地图api实现经纬度与地址的批量转换

发布时间:2026/10/28 1:01:27 来源:尧图企业网站定制
我们都知道可以使用高德地图api实现经纬度与地址的转换。那么当我们有很多个地址与经纬度需要批量转换的时候应该怎么办呢在这里选用高德Web服务的API其中的地址/逆地址编码可以实现经纬度与地址的转换。高德API地址地理/逆地理编码http://lbs.amap.com/api/webservice/guide/api/georegeo坐标转换http://lbs.amap.com/api/webservice/guide/api/convert1.申请key2.坐标转换坐标转换是一类简单的HTTP接口能够将用户输入的非高德坐标GPS坐标、mapbar坐标、baidu坐标转换成高德坐标。def transform(location): parameters {coordsys:gps,locations: location, key: XXXXXX} base http://restapi.amap.com/v3/assistant/coordinate/convert response requests.get(base, parameters) answer response.json() return answer[locations]2.地理/逆地理编码我这里是将经纬度转换为地址所以选用的是逆地理编码的接口。def geocode(location): parameters {location: location, key: XXXXXX} base http://restapi.amap.com/v3/geocode/regeo response requests.get(base, parameters) answer response.json() return answer[regeocode][addressComponent][district].encode(gbk,replace),answer[regeocode][formatted_address].encode(gbk,replace)3.从文件中读取需要批量获取的话一般是从文件中读取数据读取代码如下def parse(): datas [] totalListData pd.read_csv(locs.csv) totalListDict totalListData.to_dict(index) for i in range(0, len(totalListDict)): datas.append(str(totalListDict[i][centroidx]) , str(totalListDict[i][centroidy])) return datas4.完整代码对于批量获取我一开始也走了很多弯路。一开始选用javascript接口但是js接口的函数是异步返回所以可能第10行的结果跑到第15行去了一直没有很好的解决后来才选用web接口。最后将完整代码贴于此仅供参考。#!/usr/bin/env #-*- coding:utf-8 -*- 利用高德地图api实现经纬度与地址的批量转换 import requests import pandas as pd import time import sys reload(sys) sys.setdefaultencoding(utf-8) def parse(): datas [] totalListData pd.read_csv(locs.csv) totalListDict totalListData.to_dict(index) for i in range(0, len(totalListDict)): datas.append(str(totalListDict[i][centroidx]) , str(totalListDict[i][centroidy])) return datas def transform(location): parameters {coordsys:gps,locations: location, key: XXXXXX} base http://restapi.amap.com/v3/assistant/coordinate/convert response requests.get(base, parameters) answer response.json() return answer[locations] def geocode(location): parameters {location: location, key: XXXXXX} base http://restapi.amap.com/v3/geocode/regeo response requests.get(base, parameters) answer response.json() return answer[regeocode][addressComponent][district].encode(gbk,replace),answer[regeocode][formatted_address].encode(gbk,replace) if __name____main__: i 0 count 0 df pd.DataFrame(columns[location,detail]) #locations parse(item) locations parse() for location in locations: dist, detail geocode(transform(location)) df.loc[i] [dist, detail] i i 1 df.to_csv(locdetail.csv, index False)注意事项在测试的时候一个key差不多可以下载2000-3000条数据一个账号可以申请4个key。这是我自己的使用情况。所以测试的时候不用测试过多直接开始正式爬数据才是正道。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑