「GIS教程」使用DeepSeek辅助QGIS快速制图
前几天小编使用QGIS可视化全国高速公路不同省份通行里程的时候,图画完了,感觉应该把省会城市添加上去,效果可能会好一点。但小编刚刚回公司换的这台电脑里没那么多的数据,之前的数据不在手边,怎么办呢?
简单的方式当然可以去网上搜一个省会POI的图层,但想着这么省会坐标的公开数据应该早就有了,加上现在DeepSeek风头正火,要不让DeepSeek去试试?
思路及准备
小编没有使用QGIS相关的AI插件,所以是一边开着浏览器使用DeepSeek,一边开着QGIS的控制台,我的想法比较简单,就是让DeepSeek直接生成一个点图层。
PS:使用DeepSeek之前,需要去官网:https://www.deepseek.com/ 注册一个账号,然后登录,并点击开始对话,这个过程不赘述了。
基础提示词
小编使用的是这个:
整理全国所有省会城市的坐标,并生成代码,可以直接在QGIS的Python控制台运行,并显示出来。
DeepSeek返回结果如下:
哎?!不出意外,出代码了,如下:
# 创建省会城市坐标字典(名称, 经度, 纬度)
capital_cities = {
"北京": (116.4074, 39.9042),
"天津": (117.1994, 39.0851),
"石家庄": (114.4995, 38.0409),
"太原": (112.5489, 37.8706),
"呼和浩特": (111.7510, 40.8415),
"沈阳": (123.4315, 41.8057),
"长春": (125.3236, 43.8160),
"哈尔滨": (126.5350, 45.8022),
"上海": (121.4737, 31.2304),
"南京": (118.7969, 32.0603),
"杭州": (120.1551, 30.2741),
"合肥": (117.2272, 31.8206),
"福州": (119.2965, 26.0745),
"南昌": (115.8581, 28.6829),
"济南": (117.1205, 36.6510),
"郑州": (113.6253, 34.7466),
"武汉": (114.3054, 30.5928),
"长沙": (112.9388, 28.2278),
"广州": (113.2644, 23.1291),
"南宁": (108.3663, 22.8176),
"海口": (110.1999, 20.0440),
"重庆": (106.5516, 29.5630),
"成都": (104.0665, 30.5728),
"贵阳": (106.6302, 26.6477),
"昆明": (102.8329, 24.8801),
"拉萨": (91.1406, 29.6455),
"西安": (108.9398, 34.3416),
"兰州": (103.8342, 36.0611),
"西宁": (101.7778, 36.6173),
"银川": (106.2309, 38.4872),
"乌鲁木齐": (87.6168, 43.8256),
"香港": (114.1694, 22.3193),
"澳门": (113.5439, 22.1987),
"台北": (121.5645, 25.0330)
}
# 创建点图层
layer = QgsVectorLayer("Point?crs=EPSG:4326", "Provincial Capitals", "memory")
provider = layer.dataProvider()
# 添加字段
provider.addAttributes([
QgsField("city", QVariant.String),
QgsField("longitude", QVariant.Double),
QgsField("latitude", QVariant.Double)
])
layer.updateFields()
# 添加要素
for city, (lon, lat) in capital_cities.items():
feat = QgsFeature()
feat.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(lon, lat)))
feat.setAttributes([city, lon, lat])
provider.addFeature(feat)
# 设置符号样式
symbol = QgsMarkerSymbol.createSimple({
'name': 'circle',
'color': 'red',
'size': '3.0'
})
layer.renderer().setSymbol(symbol)
# 添加标注设置
label_settings = QgsPalLayerSettings()
label_settings.fieldName = "city"
label_settings.placement = QgsPalLayerSettings.AroundPoint
label_settings.enabled = True
labeler = QgsVectorLayerSimpleLabeling(label_settings)
layer.setLabeling(labeler)
layer.setLabelsEnabled(True)
# 添加到地图
QgsProject.instance().addMapLayer(layer)
print(f"已成功加载 {len(capital_cities)} 个省会城市坐标点")
将上述代码复制到QGIS的控制台,并运行,即可看到效果。
可以看到所有省会的坐标点就显示出来了,并且标注了省会名称,NICE!
再增加一个底图
其实到这,已经满足小编的需求了,但抱着玩一玩的心态,我们上点难度。
加一个天地图的底图,提示词如下:
生成一段代码,将天地图的卫星底图加载到QGIS中显示出来,此代码要求在QGIS的Python控制台运行。
运行结果:
from qgis.PyQt.QtCore import QUrl
from qgis.core import QgsRasterLayer, QgsProject
# 天地图卫星底图的URL模板
url_template = "http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=你的天地图密钥"
# 创建一个XYZ图层
tile_layer = QgsRasterLayer("type=xyz&url=" + QUrl(url_template).toString(), "天地图卫星底图", "wms")
# 检查图层是否有效
if tile_layer.isValid():
# 将图层添加到QGIS项目中
QgsProject.instance().addMapLayer(tile_layer)
print("天地图卫星底图已成功加载!")
else:
print("图层加载失败,请检查URL和密钥是否正确。")
这里对比Gemini,相同的提示词,发现DeepSeek的结果更准确,为什么?起码DeepSeek的结果知道让我提供天地图的ApiKey。不过这个代码在小编的QGIS中无法运行,我也不知道为什么,图层加了,但显示不出来。
天地图不行,OSM呢,类似的提示词。
生成一段代码,将OpenStreetMap的卫星底图加载到QGIS中显示出来,此代码要求在QGIS的Python控制台运行。
结果:
# 导入QGIS核心库
from qgis.core import QgsRasterLayer, QgsProject
# 定义OpenStreetMap卫星底图的URL
osm_url = "https://tile.openstreetmap.org/{z}/{x}/{y}.png"
# 创建XYZ瓦片图层
osm_layer = QgsRasterLayer("type=xyz&url=" + osm_url + "&zmax=19&zmin=0", "OpenStreetMap Satellite", "wms")
# 检查图层是否有效
if osm_layer.isValid():
# 将图层添加到QGIS项目中
QgsProject.instance().addMapLayer(osm_layer)
print("OpenStreetMap卫星底图已成功加载!")
else:
print("加载OpenStreetMap卫星底图失败,请检查网络连接或URL设置。")
在QGIS中运行,完美~
再生成一个Voronoi图
既然气氛都到这了,就让它生成一个Voronoi图吧,提示词如下:
基于QGIS中特定的点图层,生成Voronoi多边形,在QGIS的Python控制台运行
这时,DeepSeek罢工了。。。
算了,Gemini补上吧。。。生成结果如下:
from qgis.core import *
from qgis.processing import *
# 获取当前工程
project = QgsProject.instance()
# 获取指定的点图层 (请替换 "your_point_layer_name" 为你的点图层名称)
point_layer = project.mapLayersByName("your_point_layer_name")[0]
# 检查图层是否存在
if point_layer is None:
print("指定的点图层不存在!")
else:
# 生成 Voronoi 多边形
params = {
'INPUT': point_layer,
'OUTPUT': 'memory:' # 输出到内存图层
}
output_layer = processing.run('qgis:voronoipolygons', params)['OUTPUT']
# 将 Voronoi 多边形图层添加到 QGIS
project.addMapLayer(output_layer)
运行结果:
后话
综合使用下来,小编发现比我最喜欢的Gemini要好用一点,深度思考的话,结果更完美可用。但DeepSeek动不动服务器忙,并且深度思考每天基本就一次,后面就用不了。无论怎么说,小编还是比较期待它的。
如果有其他更好玩的玩法,大家也可以留言。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

