QGIS如何获取用户的当前位置?
发布时间: 2025-08-31
所属分类: QGIS学习笔记
最近小编在使用各种互联网地图的时候发现,基本都可以打开地图软件后自动定位到用户的位置,而作为专业的GIS软件,QGIS这类工具中好像并没有内置此类功能,于是小编决定想办法实现这个小功能。
实现原理
关于设备的定位,小编在之前的文章中分享过,简单的总结一下,技术路线有两类:
- 使用 GPS 设备,获取经纬度信息
- 使用IP定位
小编测试了几次在QGIS中调用一直没有成功,本文先介绍使用IP地址获取位置的方法,关于IP定位可以参考小编之前的文章:
QGIS Python API 实现
有了技术路线,后面的过程就是写代码了。主要分三步:
- 获取用户IP地址
- 获取IP地址对应的位置信息
- 将位置信息添加到地图上,并缩放
代码如下:
from qgis.PyQt.QtWidgets import QMessageBox
from qgis.core import QgsProject, QgsVectorLayer, QgsFeature, QgsGeometry, QgsPointXY, QgsCoordinateReferenceSystem
import requests
def locate_by_ip():
try:
# 获取当前IP地址
ip_response = requests.get('https://api.ipify.org?format=json', timeout=5)
ip_address = ip_response.json()['ip']
# 通过IP获取地理位置信息
geo_response = requests.get(f'http://ip-api.com/json/{ip_address}')
geo_data = geo_response.json()
if geo_data['status'] == 'success':
lat = geo_data['lat']
lon = geo_data['lon']
city = geo_data['city']
country = geo_data['country']
# 创建临时图层显示位置
layer_name = f"IP_Location_{ip_address}"
layer = QgsVectorLayer("Point?crs=EPSG:4326", layer_name, "memory")
provider = layer.dataProvider()
# 创建点要素
feature = QgsFeature()
feature.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(lon, lat)))
provider.addFeature(feature)
# 添加到地图
QgsProject.instance().addMapLayer(layer)
# 创建标记并定位视图
canvas = iface.mapCanvas()
canvas.setCenter(QgsPointXY(lon, lat))
canvas.zoomScale(100000) # 适当缩放级别
# 显示信息
QMessageBox.information(iface.mainWindow(), "位置定位",
f"IP地址: {ip_address}\n"
f"位置: {city}, {country}\n"
f"经纬度: {lat:.4f}, {lon:.4f}")
else:
QMessageBox.warning(iface.mainWindow(), "错误", "无法获取位置信息")
except Exception as e:
QMessageBox.critical(iface.mainWindow(), "错误", f"发生错误: {str(e)}")
# 执行函数
locate_by_ip()
打开Python Console,并新建一个文件,并交将上万的文件复制到文件中。
运行该文件,即可实现获取当前位置的功能,效果如图:
总结
是不是感觉有点奇怪,是的,定位到USA去了,这是因为小编没有找到国内可以免费使用的IP定位的API,后续小编优化一下,本期只介绍实现简单的实现方法。后续通过GPS的定位方案,小编会继续更新。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读

最新GIS干货

私享圈子