############# #暂时不需要csv 表格即可运行 # ######### #地址.xlsx Sheet1 中 第一列 列名就是 地址 然后把地址罗列上就好了 import numpy as np import folium from folium import plugins import webbrowser # -*- coding:utf-8 -*- # author:ck_233 time:2020/3/16 import time import requests import pandas as pd from pandas import DataFrame developer_key = '6M2BZ-5SOWU-ZF6VH-22KK6-OCT65-62BJU' # 这里为你申请的开发者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' } print(data) 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() # print(answer) if(answer['status'] == 0): data = answer['result']['address'] else: data = 'error' print(data) return data # 入参excel文件名,表名 def readExcel(filename, sheetname): data = pd.read_excel(filename, sheetname) # print(data) # 通过地址获取经纬度,并修改 san_map = folium.Map( location=[36.648607, 117.04667], zoom_start=16, # 高德街道图 tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}', # tiles='http://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', # 高德卫星图 attr='default') for index in range(0,len(data)): # 开发者并发有限制,根据情况来设置 time.sleep(0.2) print(data.loc[index, '地址']) address = data.loc[index, '地址'] lng_lat = address_to_coordinate(address) data.loc[index, '经度'] = lng_lat['lng'] data.loc[index, '纬度'] = lng_lat['lat'] # folium.PolyLine(tri, color='#3388ff').add_to(san_map) marker_cluster = plugins.MarkerCluster().add_to(san_map) folium.Marker([ lng_lat['lat'],lng_lat['lng']], color='red').add_to(marker_cluster) print(lng_lat['lng']) #folium.Marker([Lat[1], Lon[1]], color='red').add_to(marker_cluster) san_map.save('test.html') # print(data) # 保存修改 DataFrame(data).to_excel(filename, sheet_name=sheetname, index=False, header=True) if __name__ == '__main__': #address_to_coordinate("武汉市青山区和平大道809号") #coordinate_to_address("30.617353,114.360809") readExcel('地址.xlsx', 'Sheet1') webbrowser.open('test.html') ''' def PlotLineOnMap(): # 给出的坐标系为GCJ-02,如果需要测试google地图,需要进行坐标转换 Lat = [36.648607, 36.658436,36.66844] Lon = [117.04667,117.126518,117.040105] #tri = np.array(list(zip(Lat, Lon))) san_map = folium.Map( location=[36.648607, 117.04667], zoom_start=16, # 高德街道图 tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}', # tiles='http://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', # 高德卫星图 attr='default') #folium.PolyLine(tri, color='#3388ff').add_to(san_map) marker_cluster = plugins.MarkerCluster().add_to(san_map) folium.Marker([Lat[0], Lon[0]], color='red').add_to(marker_cluster) folium.Marker([Lat[1], Lon[1]], color='red').add_to(marker_cluster) san_map.save('test.html') def main(): PlotLineOnMap() if __name__ == '__main__': main() webbrowser.open('test.html') '''