专栏名称: 小猿猴GISer
GIS遥感交流学习
目录
相关文章推荐
51好读  ›  专栏  ›  小猿猴GISer

DeepSeek在GIS实战方面的小测试,结果……

小猿猴GISer  · 公众号  ·  · 2025-02-04 11:30

正文

DeepSeek R1 是国内研发的开源 AI 模型,据称各项参数指标均已达到了目前领先的 OpenAI 的 ChatGPT 模型,更重要的是,这是开源模型!

  • https://chat.deepseek.com/

更多角度花样吹 DeepSeek 我这里就不展示了,大家应该看够了。

现不管是大公司、研究牲还是打工猿,都已经在研究、本地部署,甚至魔改升级中了 。

至于到底有多牛逼,实践出真知,小荟这就用以前在 ChatGPT 上实现的两个问题,来“考一考”DeepSeek。

下面就是 DeepSeek 在 GIS 方面的2个简单应用、测试,大家看个乐!

DeepSeek最神的一点

(DeepSeek 官网注册就可直接使用)

在测试之前,有一点需要说明一下,小荟觉得 DeepSeek R1 最厉害的一点是,它会展示 推理过程

比如橙色线上部分灰色,是推理过程文本,很长;下面的是正式回答。

不要小看 推理过程 这个功能,对于用户非常非常有用。

对于复杂任务,通过仔细查看推理过程文本,可以梳理推理流畅、检查出任务纰漏,以便我们在纠正的时候能指哪打哪。

对于自学者,详细的推理过程文本,可以深化、完善相关工具、概念的理解。

下面正式进入 DeepSeek 在 ArcGIS 方面的应用测试。

测试1-属性表处理

这个小问题来自之前小荟提到的属性表问题。

有这样一个使用场景:

ArcGIS 软件,矢量数据中有一个字段叫 DLTB_Layer,其字段值由 不定长度 的数字和中文组成,如何 把数字和中文分离

这个问题很简单, ChatGPT 很容易的就解决了,并给出了正确的代码块 ,下面看看 DeepSeek R1 的测试结果。

测试1-出了小问题

DeepSeek R1 应该是没问题的,只是第一次提问出来的结果 有些小问题

从推理过程文本得知,DeepSeek R1 为了简洁和易用性, 没有使用 re 正则模块,而是 列表推导式 来判断数字和非数字。

但是这样出来的结果,会有 str 和 Unicode 的编码错误,当然这是 Python2 的锅!

DeepSeek R1 推理结果截图 给的结果有问题

测试1-详细版提问

为了避免编码问题,第二次提问需要加上一些限定(或者直接指明使用 re 正则模块)。

下面是详细版提问:

在ArcMap中如何把字段中的数字和非数字提取出来,利用代码块功能?非数字部分有中文,且ArcMap中内置的是 Python2 哦

这一次DeepSeek R1给出了推理过程文本,还详细解释了 Python2 中 str 和 Unicode 的遗毒问题。

当然还有正确的答案。

好的,用户之前在问如何在ArcMap中使用代码块功能提取字段中的数字和非数字部分,我之前已经给过一个使用Python的解决方案。现在用户再次提问,补充了新的条件:非数字部分包含中文,并且ArcMap内置的是Python 2。我需要仔细分析这些新条件对原有解决方案的影响,并给出相应的调整。

首先,用户提到非数字部分有中文。这意味着在提取非数字字符时,需要正确处理中文字符。在Python 2中,字符串处理和Unicode可能会有一些问题,尤其是在处理非ASCII字符时。原来的代码使用str(input_str)进行转换,但Python 2中默认的str类型是字节字符串,如果原始字段包含Unicode字符(如中文),直接转换成str可能会导致编码错误或乱码……

——DeepSeek R1 推理过程文本

DeepSeek R1 给的正确代码,行数变多了,不如使用 re 正则模块简洁。

毕竟中间加入了编码,至于这个代码块怎么用, 见之前的 ChatGPT 文章

正确的结果

顺利通过!

测试2-生成工具箱代码

第二个测试,让 AI 生成 ArcGIS 自定义工具箱代码。

这个测试稍微复杂一点, 小荟之前也使用 ChatGPT 测试过 ,很顺利的给出了代码以及制作 ArcGIS Pro 自定义工具箱的方法和步骤。

(为什么不是 ArcMap 工具箱?看下面就知道了)

DeepSeek 中进行以下提问:

存在一个矢量图层,里面有很多字段,我希望可以选择多个不同字段,每个字段做一次IDW反距离权重插值,输出图层的名称应当是字段名称,等值线的间距需要自动设置,设置的大小应当是栅格数据的(最大值减去最小值)*3%,最后将此功能封装成 ArcGISPro 自定义工具箱

(该提问中,特意隐去了插值 栅格转换为等值线 的直接说明)

在长长的推理过程后,DeepSeek R1 得到的代码如下:


import arcpy
import os
from arcpy.sa import *

def sanitize_field_name(name):
    invalid_chars = [' ', '-', '(', ')', '&', '$', '#', '@', '!', '~', '`', '^']
    for char in invalid_chars:
        name = name.replace(char, '_')
    if name[0].isdigit():
        name = f"Field_{name}"
    return name

def get_raster_property(raster, property_name):
    result = arcpy.management.GetRasterProperties(raster, property_name)
    return float(result.getOutput(0))

def main():
    arcpy.CheckOutExtension("Spatial")
    
    input_features = arcpy.GetParameterAsText(0)
    fields = arcpy.GetParameterAsText(1).split(';')
    output_workspace = arcpy.GetParameterAsText(2)
    power = arcpy.GetParameter(3) or 2
    cell_size = arcpy.GetParameter(4) or None




    
    
    arcpy.env.overwriteOutput = True
    
    for field in fields:
        try:
            safe_name = sanitize_field_name(field)
            temp_raster = os.path.join(arcpy.env.scratchGDB, f"IDW_{safe_name}")
            
            # 执行IDW插值
            arcpy.AddMessage(f"Processing field: {field}")
            out_idw = Idw(input_features, field, cell_size, power)
            out_idw.save(temp_raster)
            
            # 计算等值线间距
            max_val = get_raster_property(temp_raster, "MAXIMUM")
            min_val = get_raster_property(temp_raster, "MINIMUM")
            interval = (max_val - min_val) * 0.03
            
            if interval <= 0:
                arcpy.AddWarning(f"Skipping {field}: 最大最小值相同。")
                continue
            
            # 生成等值线
            out_contour = os.path.join(output_workspace, f"{safe_name}_Contour")
            Contour(temp_raster, out_contour, interval, 0)
            arcpy.AddMessage(f"生成等值线: {out_contour}")
            
            # 删除临时栅格
            arcpy.management.Delete(temp_raster)
        
        except Exception as e:
            arcpy.AddError(f"处理字段 {field} 时出错: {str(e)}")
    
    arcpy.CheckInExtension("Spatial")

if __name__ == '__main__':
    main






请到「今天看啥」查看全文