麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

「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动不动服务器忙,并且深度思考每天基本就一次,后面就用不了。无论怎么说,小编还是比较期待它的。

如果有其他更好玩的玩法,大家也可以留言。

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子
没有下文

留言板(小编看到第一时间回复)