Python+QGIS将地名批量标注于高德地图

01 引言:

今天记录分享一下一组地名数据如何批量标注在高德地图上。本想借助folium库来实现,奈何folium只支持点击图标显示地名。故退而求其次地选择了QGIS。

02 原始数据:


可以看到是表格形式的文本信息,可以根据上一篇推文的代码批量获取经纬度信息。

03 代码如下:

借助gepandas将文本数据转为shp矢量数据,可参考这篇推文。

# -*- encoding: utf-8 -*-
'''
@File    :   get_loc2gaode.py
@Time    :   2022/07/21 14:26:17
@Author  :   HMX
@Version :   1.0
@Contact :   kzdhb8023@163.com
'''
# here put the import lib
import requests
import pandas as pd
import math
import geopandas as gpd
​
def adr2loc(address):url = 'https://restapi.amap.com/v3/geocode/geo?address='+address+'&key=xxxxxxxxxxxxxxxxxxxxxxxxx'response = requests.get(url).json()geocodes = response['geocodes']for geocode in geocodes:location = geocode['location']return location
​
​
def GCJ2WGS(lon,lat):a = 6378245.0 # 克拉索夫斯基椭球参数长半轴aee = 0.00669342162296594323 #克拉索夫斯基椭球参数第一偏心率平方PI = 3.14159265358979324 # 圆周率# 以下为转换公式 x = lon - 105.0y = lat - 35.0# 经度dLon = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * math.sqrt(abs(x));dLon += (20.0 * math.sin(6.0 * x * PI) + 20.0 * math.sin(2.0 * x * PI)) * 2.0 / 3.0;dLon += (20.0 * math.sin(x * PI) + 40.0 * math.sin(x / 3.0 * PI)) * 2.0 / 3.0;dLon += (150.0 * math.sin(x / 12.0 * PI) + 300.0 * math.sin(x / 30.0 * PI)) * 2.0 / 3.0;#纬度dLat = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * math.sqrt(abs(x));dLat += (20.0 * math.sin(6.0 * x * PI) + 20.0 * math.sin(2.0 * x * PI)) * 2.0 / 3.0;dLat += (20.0 * math.sin(y * PI) + 40.0 * math.sin(y / 3.0 * PI)) * 2.0 / 3.0;dLat += (160.0 * math.sin(y / 12.0 * PI) + 320 * math.sin(y * PI / 30.0)) * 2.0 / 3.0;radLat = lat / 180.0 * PImagic = math.sin(radLat)magic = 1 - ee * magic * magicsqrtMagic = math.sqrt(magic)dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * PI);dLon = (dLon * 180.0) / (a / sqrtMagic * math.cos(radLat) * PI);wgsLon = lon - dLonwgsLat = lat - dLatreturn round(wgsLon,6),round(wgsLat,6)
​
# 读取文本地址获取lon lat
fn = r'C:\Users\EDZ\Documents\WeChat Files\wxid_vocjc1jfrz0322\FileStorage\File\2022-07\新建 Microsoft Excel 工作表.xlsx'
df2 = pd.read_excel(fn,header = None)
df2.columns = ['no','names','name']
flist = df2.names.values
flist2 = df2.name.values
lons,lats = [],[]
name,names = [],[]
for j in range(len(flist)):loc = adr2loc('江苏省南京市'+flist[j]).split(',')names.append(flist[j])name.append(flist2[j])lons.append(loc[0])lats.append(loc[1])
df = pd.DataFrame({'lon':lons,'lat':lats,'name':name,'names':names})
​
# 转换坐标系
df.lon = df.lon.astype('float')
df.lat = df.lat.astype('float')
df['nlon'] = 0
df['nlat'] = 0
for i in range(len(df)):df.iloc[i,4],df.iloc[i,5] = GCJ2WGS(df.iloc[i,0],df.iloc[i,1])
​
# 输出数据
df.to_csv(r'.\out.txt',index = False)
gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.nlon, df.nlat),crs = "EPSG:4326")
​
# 输出shp
gdf.to_file(r'.\out.shp',encoding='utf8')
print('ok')

注:代码中坐标系转换函数来源于网络。

04 QGIS添加高德底图:


http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x=%7Bx%7D&y=%7By%7D&z=%7Bz%7D

05 可视化如下:

添加好高德底图后,将刚刚输出的shp文件添加到QGIS,并设置标注需要的字段即可完成,最终效果如下图所示。

​如果对你有帮助的话,请‘点赞’、‘收藏’,‘关注’,你们的支持是我更新的动力。
欢迎关注公众号【森气笔记】。

【Python+QGIS将地名批量标注于高德地图】相关推荐

  1. 地图定义一个中间不动标注_高德地图吊打百度个性地图更新版,成为最佳分析图利器...

    转自:绿变变 本文已获得授权 说到区位分析图,如何获取地图一直以来是大家都在讨论的问题,不单单要获取地图,还需要那种可以单独调出建筑图层,交通路网图层,绿地图层,以及各项地图中的元素,毕竟我们做前期分 ...

  2. php 高德地图创建标注,使用高德地图API生成带标的专属地图

    1. 准备工作 1.1 申请地图APIKEY 首先,你得注册一个高德账号或者你得有个某宝账号. 访问 http://lbs.amap.com/dev/ 在我的应用中创建一个新应用. 点击"添 ...

  3. Python根据地理位置,得到省市区(高德地图api)

    ᵕ̈ ᑋᵉᑊᑊᵒ 第一次写博客,主要想记录一下自己学习的过程,希望可以互相探讨哈! 这个文章是我在工作中碰到的问题,主要诉求是根据一些具体的地理位置,得出其所在的省市区.我的解决方法附在下面,但还是不 ...

  4. 基于python和amap(高德地图)web api的爬虫,用于搜索某POI点

    目的: 通过Python实现的爬虫技术,及高德地图提供的web api,来获取地图上的POI点及其相关信息 方法: 1.通过Python的urllib模块来处理网络请求和响应,向高德地图发送请求,并接 ...

  5. Python爬虫|高德地图地铁数据爬取与制图

    目录 一.高德地图数据爬取 1.爬取思路 2.python核心代码 二.Arcmap制图 一.高德地图数据爬取 1.爬取思路 首先,谷歌浏览器打开高德地图官网,点击上方菜单栏地铁进入地铁线路网站如下, ...

  6. iOS定位服务与地图应用开发:高德地图开发

    2019独角兽企业重金招聘Python工程师标准>>> 由于博客迁移至www.coderyi.com,文章请看http://www.coderyi.com/archives/419 ...

  7. 实战教程!利用Python获取数据,并在地图上批量标注

    我们想要在地图上批量标注某一类的大量点位,该怎么操作呢?没有它的坐标数据,就没有办法批量标注.今天给大家介绍下,来自图新地球用户王泽的原创教程--利用Python获取数据,并在地图上批量标注的方法! ...

  8. python+javascript+baiduMapAPI实现地图批量标注地点

    效果如图 ​​​​ 现将存储在excel表中的详细地址导入,然后通过百度地图API查询各个地点的坐标经纬度,并将数据保存到csv文件中备用 ''' 调用百度地图API,批量输入地址查询坐标经纬度 '' ...

  9. python路径规划仿真实验_【python实战】批量获得路径规划——高德地图API

    1.需求 在上篇中,已经批量获得了经纬度信息,现在需要根据经纬度来进行路径规划,想知道两点之间的距离和路程.花费等信息. 这时候就需要用到高德地图API中的路径规划功能了. 2.过程 1. 构造经纬度 ...

  10. Python通过高德地图API批量计算两地路线距离

    公司需求批量计算两地之间行车距离,故此记录一下,数据接口采用高德地图开发者api,需要注册,注册后免费版的数据量已够满足大多数使用. import pandas as pd import reques ...

最新文章

  1. 用户控件的定制和使用
  2. 1355. 母亲的牛奶【一般 / DFS爆搜】
  3. linux otl oracle,linux otl 连接数据库
  4. php 方法里用外部变量的值,PHP实现函数内修改外部变量值的方法示例
  5. 未来的计算机作文 800字,未来科技作文800字
  6. 【译】Tim Rose 的kibana插件教程-自定义App插件
  7. Leetcode074. 合并区间
  8. 2020-12-26
  9. java一个进程可以村多少个线程_一台 Java 服务器可以跑多少个线程?
  10. python深度学习进阶之行为检测详细学习路线(主要实现人员的行为类别、空间定位、时间定位)
  11. linux硬盘温度,linux查看硬盘温度和使用情况
  12. #17-【二分】gdgzoi::比赛.Contest2281.Problem D (包裹快递)(zly#1)
  13. 如何让计算机恢复显示电量,win10系统右下角电池图标不见了看不到剩余电量的还原步骤...
  14. 纯蓝ICON_学习教程
  15. 开源星空照片_如何拍摄星空的好照片
  16. Mac OS无法进入系统/数据备份/重装系统方法步骤
  17. FMC板卡标准(一)介绍及FMC兼容
  18. LeetCode871.Minimum Number of Refueling Stops
  19. 从零开始——Dev-C++调试方法
  20. cocos creater 查线上bug之-解密反编译jsc

热门文章

  1. Thymeleaf即时生效
  2. 网络、域名、DNS、A记录以及MX记录的基本概念
  3. 从计算机内部提取型号和mac,Mac计算机型号这么多 我该选哪一个?
  4. Discarding previously cached master state
  5. 地理信息系统(GIS)应用场景步骤
  6. php打印机,用PHP打印到打印机
  7. Greenplum小把戏 - 简单函数实现URL解码(URL Decode)- 同样适用于Deepgreen和PostgreSQL...
  8. 联想进入bios修复计算机,联想笔记本安装win10后开启界面一直是自动修复,进不了BIOS重装系统...
  9. java jks 转pfx_JKS、BKS、PFX证书格式之间转换
  10. 微信收钱的盒子服务器老是断开,微信文件已过期或被清理的终极解决办法