ArcGIS arcpy代码工具——根据属性结构表创建shape图层

系列文章目录

ArcGIS arcpy代码工具——关于工具使用的软件环境说明
ArcGIS arcpy代码工具——批量对MXD文件的页面布局设置修改
ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片
ArcGIS arcpy代码工具——将要素属性表字段及要素截图插入word模板
ArcGIS arcpy代码工具——定制属性表字段输出表格
ArcGIS arcpy代码工具——批量栅格转点文件导出属性表
ArcGIS arcpy代码工具——关于标识码的那些事(查找最大标识码、唯一性检查、重排序、空值赋值)
ArcGIS arcpy代码工具——批量要素裁剪栅格影像


文章目录

  • 系列文章目录
  • 功能说明
  • 1 准备工作
    • ==知识点:== 关于常见字段类型
  • 2 代码分段
    • (1) 设置工作空间
    • (2) 新建图层
      • 特别提醒:arcgis新建的图层要求至少有一个字段,系统会自动生成 ID 字段。
    • (3) 读取属性结构表
    • (4) 解析属性结构表
    • (5) 创建字段
      • 1. TEXT 文本型字段
      • 2. SHORT 短整型、LONG 长整型字段
      • 3. FLOAT 浮点型、DOUBLE 双精度型字段
      • 4. 其他类型字段
    • (6) 重命名图层
    • (7) 删除多余字段
  • 3 完整代码
  • 4 后记
    • 在arcgis软件中运行代码


功能说明

作为一个GISer,根据给定的图层属性结构表,创建shape图层是经常遇到的工作。一个图层里有各种字段类型、字段精度,小数位数要求,动辄甚至1个图层有30个字段,如果在GIS软件一个一个字段进行新建,那是非常繁琐和容易出错的。

本文旨在通过arcpy编程,读取本地属性结构表,自动创建shape图层。

本代码目标为:

  • 1 准备属性结构表
  • 2 编写代码,读取结构表
  • 3 创建shape图层

我使用的arcgis软件版本为 10.8.2 版本

温馨提示:如果觉得文章不错,请多多点赞添加关注,您的支持就是我的动力。

1 准备工作

首先第一步工作,就是准备txt格式(或者CSV格式,只要是逗号 分隔开就好)的属性结构表,一般新建图层的工作都是按照某个数据库标准执行,能找到电子版标准文件摘取最好,没有电子版就对照的标准录入,可以先录入到 Excel表格中,最后另存为CSV格式即可。

下面是我用于演示的属性结构表:
1
我保存的是 CSV格式,用逗号分隔,平时编辑的时候使用Excel打开方便分列查看。属性结构表中列出了常见的几种字段类型。

知识点: 关于常见字段类型

在 ArcGIS 中,图层的字段主要有以下几种类型:

  1. 文本型(String):用于存储字符数据,例如名称、地址、描述等。它可以包含字母、数字、符号等各种字符,长度可根据需要设置。

  2. 数值型:整型(Integer):用于存储整数,如人口数量、建筑物数量等。根据存储范围不同,又有不同的精度类型,如 16 位整数、32 位整数等。实践中,如果标准中字段类型为INT(int)并且字段长度>4时,arcgis中均视为 LONG长整形。long 包含 short 的 关系。

    • 关于 整形(int)字段,细分为 short 类型(短整型) 和 long 类型(长整型),区别如下:
    • short 类型:一般采用 16 位(2 字节)来存储数据。其取值范围是 -32,768 到 32,767,即 最大精度 4 位数,因为> 32767的五位数就是long长整形,精度 5 应该为 long。它仅适用于存储数值不大的整数。
    • long 类型:通常用 32 位(4 字节)存储数据。取值范围为 -2,147,483,648 到 2,147,483,647,即 最大精度 10 位数。适用于需要存储较大整数的场景。
    • 新建字段时,可以根据要求的字段长度选择 short 或者 long,长度超过 5 均为 long。不同类型涉及到存储空间大小不同,如果对存储空间要求不是那么在意都可以设为long(其实1条记录多一倍,上万条记录也不少,具体视数据量而定)。
  3. 数值型:浮点型(Float):用于存储 带有小数部分 的数字,适用于表示测量值、比例等,如海拔高度、面积、温度等。同样有不同的精度类型,如单精度(32 位)和双精度(64 位)。只有浮点型字段才能设置小数位数。

  4. 日期型(Date):用于存储日期和时间信息,格式通常为年 / 月 / 日 时:分: 秒。可以进行日期的计算、排序和筛选等操作。

  5. 二进制型(Binary):用于存储二进制数据,如图像、文档、音频或视频文件等。不过,直接在 ArcGIS 中处理二进制字段可能较为复杂,通常需要结合其他工具或编程语言来操作。

  6. 几何型(Geometry):用于存储地理要素的几何信息,如点、线、面等。这是 ArcGIS 中非常重要的一种字段类型,它定义了要素在地图上的位置和形状。

  7. OID 型(Object ID):是一种特殊的整型字段,用于唯一标识图层中的每个要素。它在数据库中充当主键,不能被编辑,由系统自动生成和维护。

  8. 除 “OID” 和 “Shape” 字段之外,“要素类”和“表”还必须至少具有一个字段,默认会自动生成一个 名称 为 ID 的字段。一般情况下新建了其他字段后,ID字段就多余了,可删除之,否则提示多余字段。

2 代码分段

下面开始编写代码,把步骤分解一步一步来。

思路:设置工作空间——新建图层——读取属性结构表——解析结构表(字段类型、字段长度等)——根据不同字段类型创建字段

(1) 设置工作空间

工作空间,也就是 图层生成的文件夹,给代码定位在这里工作。

如果新建的是 shape图层文件,则工作空间设置为文件夹;

//设置工作空间   文件夹
arcpy.env.workspace = r"D:\mulu\tc"

如果新建的是地理数据库中的图层,则工作空间设置为mdb或者gdb的地理数据库。

//设置工作空间   地理数据库
arcpy.env.workspace = r"D:\mulu\tc\test.mdb"

注意: 这两种方式,新建图层的字段,结果是有区别的。后面细说。

(2) 新建图层

shape的要素类型主要有 点、线、面型,首先定义类型,再定义坐标系统。

我准备新建的图层为XZQ,是面型。投影坐标系 CGCS2000 40 度分带。

// 定义新Shapefile的名称和要素类型
output_shapefile = "XZQ" + ".shp"  # 可以是 带后缀名的shapefile 也可以是不带后缀名的数据库图层
geometry_type = "POLYGON"          # 面型
# geometry_type = "POLYLINE"       # 线型
# geometry_type = "POINT"          # 点型// 创建新的Shapefile
arcpy.CreateFeatureclass_management(arcpy.env.workspace, output_shapefile, geometry_type)// 设置投影坐标系统  为 CGCS2000 40 度分带
cgcs2000_40 = arcpy.SpatialReference(4528)  # CGCS2000 / 高斯投影 3-degree Gauss-Kruger zone 40
arcpy.DefineProjection_management(output_shapefile, cgcs2000_40)

坐标系统分为地理坐标系和投影坐标系, 注意标准的要求。

  1. 常用的地理坐标系和WKID:
    地理坐标 4214 GCS_Beijing_1954;
    地理坐标 4326 GCS_WGS_1984;
    地理坐标 4490 GCS_China_Geodetic_Coordinate_System_2000;
    地理坐标 4555 GCS_New_Beijing;
    地理坐标 4610 GCS_Xian_1980.

  2. 常用的投影坐标系和WKID:
    投影坐标 2364 Xian_1980 3度分带 40度带;
    投影坐标 4528 CGCS2000 3度分带 40度带;
    投影坐标 4529 CGCS2000 3度分带 41度带。

特别提醒:arcgis新建的图层要求至少有一个字段,系统会自动生成 ID 字段。

id

(3) 读取属性结构表

读取属性结构表,先判定一下文件是否存在。首行为字段标题行,需要跳过。

// 读取CSV文件中的字段信息
csv_file = r"D:\MULU\tc\aa.csv"
if not os.path.exists(csv_file):print("文件不存在: {}.".format(csv_file))
else:with open(csv_file, 'r') as SXB:reader = csv.reader(SXB)next(reader)  # 跳过标题行

(4) 解析属性结构表

在解析过程中,首先判定的应该是字段类型是否符合arcgis的要求。

给定一个符合要求的字段类型集合进行判定。

//  支持的字段类型
valid_field_types = ["TEXT", "FLOAT", "DOUBLE", "SHORT", "LONG", "DATE", "BLOB", "RASTER", "GUID"]

我编制的属性结构表,结构为:字段别名、字段名称、字段类型、字段长度、小数位数。

按照这个顺序解析字段,存储值。

//  解析属性表,按 列 读取for row in reader:fieldalias      = row[0]          # 字段别名fieldname       = row[1]          # 字段名称fieldtype       = row[2].upper()  # 字段类型,强制转换为大写fieldprecision  = row[3]          # 字段长度,字段精度

从支持的字段类型集合中可以看到,并没有 int 整形,故如果属性结构表中有 int需要按照字段精度修改为 SHORT 或 LONG。

实践中,如果 int 的精度 ≤4,arcgis生成的是 SHORT 短整型字段。
2
实践中,因为大于 32767的五位数就是LONG长整形,如果字段精度是 ≥ 5 则会生成 LONG 长整形字段。LONG 包含 SHORT 的 关系

3

//  根据精度判定 int ,修改为 short  或者 long# 如果字段类型为 'INT',替换为 'LONG'或者 shortif fieldtype in ["INT", "INTEGER"]:if fieldprecision and fieldprecision.isdigit() and int(fieldprecision) <= 4:fieldtype = "SHORT"else:fieldtype = "LONG"

关于小数位数,只有 FLOAT 浮点型, DOUBLE 双精度型,才有小数位数,故 fieldscale 并不是每个字段类型都有值。

//  小数位数fieldscale = int(row[4]) if len(row) > 4 and row[4].isdigit() else None  # 小数位数

最后,判定一下,字段类型 是否有效,如果存在无效字段,则跳过该字段,继续下一个字段。

//检查字段类型是否有效if fieldtype not in valid_field_types:print("字段类型无效: {},跳过字段: {}".format(fieldtype, fieldname))continue

(5) 创建字段

在 ArcGIS 中,创建 字段 时,可以通过 arcpy.AddField_management 方法的,各类型的字段创建参数有所差异。

下面分字段类型看一下代码:正常情况需要对 字段长度等验证为非空,但是在编制属性结构表阶段就保证了数据的完整性,故代码中不再验证。

1. TEXT 文本型字段

要求字段长度 field_length 为 >0的数字。

// 添加字段到新的Shapefileif fieldtype.upper() == "TEXT":# 对于文本型字段,设置 field_lengtharcpy.AddField_management(output_shapefile,fieldname,fieldtype,field_length=int(fieldprecision),field_alias=fieldalias)

2. SHORT 短整型、LONG 长整型字段

要求字段精度(等效于字段长度) field_precision 为 >0的数字。

            elif fieldtype in ["LONG", "SHORT"]:# 对于整型字段,设置 field_precisionarcpy.AddField_management(output_shapefile,fieldname,fieldtype,field_precision=int(fieldprecision),field_alias=fieldalias)

3. FLOAT 浮点型、DOUBLE 双精度型字段

要求字段精度(等效于字段长度) field_precision 为 >0的数字。
增加有 小数位数 field_scale 属性为 ≥ 0 的数字。

            elif fieldtype in ["FLOAT", "DOUBLE"]:# 对于浮点类型字段,设置 field_precision 和 field_scalearcpy.AddField_management(output_shapefile,fieldname,fieldtype,field_precision=int(fieldprecision),field_scale=fieldscale,field_alias=fieldalias)

4. 其他类型字段

其他类型字段,如 DATE ,无需字段精度 、小数位数 属性,arcgis固定的字段格式。

            else:# 对于其他类型的字段,不传递 field_precision 和 field_scalearcpy.AddField_management(output_shapefile,fieldname,fieldtype,field_alias=fieldalias)

特别说明:

  1. 关于字段别名 field_alias,在 shape层中 创建字段时,即使设置了 字段别名属性,如 field_alias =“行政区” ,但是在创建字段完成后,字段别名的属性值会丢失,字段别名 等于默认值 字段名称 XZQ。
  2. 但是 ,在 地理数据库 中新建层中创建字段,如 field_alias =“行政区” ,字段别名会 成功保留属性值 “行政区”。
  3. 如果将 地理数据库 中的 带 字段别名值的 图层,导出到 shape层文件,你会发现原来的字段别名值 丢失了,又变成了 默认值 字段名称 XZQ。
  4. 关于浮点型 双精度 的 字段精度 和小数位数,只有在 shape层 中才有意义,在 地理数据库 中无意义,但存储的值仍符合字段类型要求。
    10
  5. 如果 你 将 设置好字段属性的 shape层文件,导入到 地理数据库中,你会发现,浮点型 双精度的精度和 小数位数同样失效了。跟上图一样 变为 0,但不影响该字段的数据存储。这个时候,即使你再 导出为 shape图层文件,字段精度和 小数位数依然无法恢复了。
  6. 把 shape层 导入 mdb等地理数据库中进行编辑和管理,再导出为shape层文件作为最终成果提交的格式,这种操作非常 常见,但是再通过质检软件检查的时候,容易提示 字段类型不符。修正很简单,在 shape层上重新创建标准字段 把原来的值赋值回来就可以了。

(6) 重命名图层

各种标准或者某个成果提交要求中,对shape层的命名规则 ,如 “6位行政区代码”数字+ “XZQ”诸如此类,在arcgis的图层命名规则中不允许数字或特殊符号作为图层名称首字符。

在创建新图层的时候,不能够一步到位的直接命名图层,需要在最后阶段对shape层进行重命名 ,给图层名称增加 前缀。

// 重命名图层,在名称前缀增加“(111111)”
Add_prefix = "(111111)"
if Add_prefix:new_shapefile_name = str(Add_prefix) + output_shapefilearcpy.Rename_management(output_shapefile, new_shapefile_name)
else:new_shapefile_name = output_shapefile

如果没有重命名 这一步,把 Add_prefix 赋值为空即可。

Add_prefix = ""
......

(7) 删除多余字段

前面也说了,在新建shape图层文件的时候,自动添加 了一个字段 ID,因为图层已经添加了其他字段,这个 ID字段已经没有用处了。需要删除。

// 删除 new_shapefile_name 图层中的 id 字段
arcpy.DeleteField_management(new_shapefile_name, "id")

3 完整代码

下面列出完整代码,代码经测试成功运行,实现按照属性结构表创建图层的功能。

# coding=utf-8
import arcpy
import csv
import os# 在 ArcGIS 中,创建 Shapefile 时,可以通过 arcpy.AddField_management 方法的
# 字段别名 ,只能在 地类数据库中设置,如果是新建shape层会失败
# field_precision 和 field_scale 参数设置双精度字段的位数和小数位数。# 设置工作空间
arcpy.env.workspace = r"D:\mulu\tc"# 定义新Shapefile的名称和要素类型
output_shapefile = "XZQ" + ".shp"  # 可以是 带后缀名的shapefile 也可以是不带后缀名的数据库图层
geometry_type = "POLYGON"
# geometry_type = "POLYLINE"
# geometry_type = "POINT"# 创建新的Shapefile
arcpy.CreateFeatureclass_management(arcpy.env.workspace, output_shapefile, geometry_type)# 设置坐标系统为 CGCS2000 40 度分带
# cgcs2000_40 = arcpy.SpatialReference(4490)  # CGCS2000 / 大地坐标系 2000
cgcs2000_40 = arcpy.SpatialReference(4528)  # CGCS2000 / 高斯投影 3-degree Gauss-Kruger zone 40
arcpy.DefineProjection_management(output_shapefile, cgcs2000_40)# 支持的字段类型
valid_field_types = ["TEXT", "FLOAT", "DOUBLE", "SHORT", "LONG", "DATE", "BLOB", "RASTER", "GUID"]# 读取CSV文件中的字段信息
csv_file = r"D:\MULU\tc\aa.csv"
if not os.path.exists(csv_file):print("文件不存在: {}.".format(csv_file))
else:with open(csv_file, 'r') as SXB:reader = csv.reader(SXB)next(reader)  # 跳过标题行for row in reader:fieldalias = row[0]  # 字段别名fieldname = row[1]  # 字段名称fieldtype = row[2].upper()  # 字段类型,强制转换为大写fieldprecision = row[3]  # 字段长度,字段精度# 如果字段类型为 'INT',替换为 'LONG'或者 shortif fieldtype in ["INT", "INTEGER"]:if fieldprecision and fieldprecision.isdigit() and int(fieldprecision) <= 4:fieldtype = "SHORT"else:fieldtype = "LONG"fieldscale = int(row[4]) if len(row) > 4 and row[4].isdigit() else None  # 小数位数# 检查字段类型是否有效if fieldtype not in valid_field_types:print("字段类型无效: {},跳过字段: {}".format(fieldtype, fieldname))continue# 添加字段到新的Shapefileif fieldtype.upper() == "TEXT":# 对于文本型字段,设置 field_lengtharcpy.AddField_management(output_shapefile,fieldname,fieldtype,field_length=int(fieldprecision),field_alias=fieldalias)elif fieldtype in ["LONG", "SHORT"]:# 对于整型字段,设置 field_precisionarcpy.AddField_management(output_shapefile,fieldname,fieldtype,field_precision=int(fieldprecision),field_alias=fieldalias)elif fieldtype in ["FLOAT", "DOUBLE"]:# 对于浮点类型字段,设置 field_precision 和 field_scalearcpy.AddField_management(output_shapefile,fieldname,fieldtype,field_precision=int(fieldprecision),field_scale=fieldscale,field_alias=fieldalias)else:# 对于其他类型的字段,不传递 field_precision 和 field_scalearcpy.AddField_management(output_shapefile,fieldname,fieldtype,field_alias=fieldalias)print("新图层已创建并添加字段。")# 重命名图层,在名称前缀增加“(111111)”
Add_prefix = ""
if Add_prefix:new_shapefile_name = str(Add_prefix) + output_shapefilearcpy.Rename_management(output_shapefile, new_shapefile_name)
else:new_shapefile_name = output_shapefile# 删除 new_shapefile_name 图层中的 id 字段
arcpy.DeleteField_management(new_shapefile_name, "id")

看一下运行的效果如何,
16

4 后记

日常工作中,创建图层的工作非常多,使用代码编程创建,不仅效率高,而且错误更少。推荐朋友们使用.

有朋友就为难了,电脑没有 python环境和编辑软件怎么办?这么好的功能我也想用。没问题,满足。

如果你的电脑安装了 arcgis软件 ,那么你 的电脑中同时也安装了 python2.7版环境,arcgis软件中有个 Python窗口,可以运行python代码。

在arcgis软件中运行代码

操作方法如下:

  1. 新建1个空白的txt文本文档;
  2. 把完整代码全选,复制粘贴到 空白的 txt文本文档中;
  3. 编辑代码,把所有的 注释内容 #… 都删除干净,反复检查没有遗漏 # 为止;
  4. 首行 “# coding=utf-8“ 也删除不要。
  5. 把代码中的参数行 ,修改为你自己的 数据,注意 符号均为英文状态的符号
    • 储存目录 arcpy.env.workspace
    • 图层名称 output_shapefile
    • 图层类型 geometry_type
    • 坐标系代码 cgcs2000_40
    • 属性代码表 csv_file
    • 重命名前缀 Add_prefix
  6. 再次检查代码,确认上述参数都已经修改为自己的值。
  7. 打开arcgis软件的 Python窗口,全选复制代码粘贴到 Python窗口中
  8. 检查代码状态,每一样前面都有 三个点 。。。,颜色均为黑色状态,不能有浅灰色的代码行
  9. 回车键 Enter 2次,开始运行
  10. 观察运行状态,注意查看Python窗口中的提示信息,是否有错误提示
  11. 运行结束,检查图层属性。

下面看一下完整的运行过程。祝你成功!SYQ
j
我还编写了arcgis的工具插件,采用窗口化来创建图层,更加的简便,有需要的可以去下载,插件地址如下:根据属性结构表新建shape图层

2323
如果觉得文章不错,请多多点赞添加关注,您的支持就是我的动力。
2323

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器视觉开发-打开摄像头

以下是使用Python和OpenCV打开摄像头的最简单实现&#xff1a; import cv2# 打开默认摄像头&#xff08;通常是0&#xff09; cap cv2.VideoCapture(0)# 检查摄像头是否成功打开 if not cap.isOpened():print("无法打开摄像头")exit()print("摄像头已打开 - 按…

(Go Gin)Gin学习笔记(三)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法

1. 数据解析和绑定 bind或bindXXX函数&#xff08;后文中我们统一都叫bind函数&#xff09;的作用就是将请求体中的参数值绑定到对应的结构体上&#xff0c;以方便后续业务逻辑的处理 1.1 JSON数据解析和绑定 客户端传参&#xff0c;后端接收并解析到结构体 package mainim…

Kubernetes(k8s)学习笔记(四)--入门基本操作

本文通过kubernetes部署tomcat集群&#xff0c;来学习和掌握kubernetes的一些入门基本操作 前提条件 1.各个节点处于Ready状态&#xff1b; 2.配置好docker镜像库(否则会出现ImagePullBackOff等一些问题)&#xff1b; 3.网络配置正常(否则即使应用发布没问题&#xff0c;浏…

【大模型面试每日一题】Day 7:为什么大模型训练选择 Adam 而非 SGD?Adam 的关键改进是什么?

【大模型面试每日一题】Day 7&#xff1a;为什么大模型训练选择 Adam 而非 SGD&#xff1f;Adam 的关键改进是什么&#xff1f; &#x1f4cc; 题目重现 &#x1f31f;&#x1f31f; 面试官&#xff1a;为什么大模型训练选择 Adam 而非 SGD&#xff1f;Adam 的关键改进是什么…

轻量级在线Excel预览工具

轻量级在线Excel预览工具 简介 在日常工作中&#xff0c;我们经常需要快速查看Excel文件的内容&#xff0c;但不一定总是需要打开完整的Excel软件。为了解决这个问题&#xff0c;我开发了一个轻量级的在线Excel预览工具&#xff0c;让您可以通过浏览器快速查看Excel文件内容。…

[Vue]props解耦传参

在 Vue 中&#xff0c;通过 props 传递路由参数&#xff08;即 props 解耦&#xff09;是一种将组件与路由参数解耦的推荐方式。这种方法能显著提升组件的独立性、复用性和可维护性。以下是详细解释&#xff1a; 一、什么是 props 解耦&#xff1f; props 解耦是指&#xff1a…

Trae 使用心得:从新手到上手

Trae 使用心得&#xff1a;从新手到上手 最近&#xff0c;我开始试用 Trae&#xff0c;一款新兴的 AI 开发工具。在使用过程中&#xff0c;我发现它与我之前用过的 Cursor 有些不同&#xff0c;也带来了一些新的体验。 初体验&#xff1a;操作的便利性 一开始&#xff0c;我…

游戏引擎学习第256天:XBox 控制器卡顿和修复 GL Blit 伽玛问题

回顾并为今天定下基调 今天的主要任务是让我们的性能分析工具正常工作&#xff0c;因为昨天已经完成了结构性工作。现在&#xff0c;剩下的工作大部分应该是调试和美化。性能分析工具现在应该已经基本可用了。昨天我们在这个方面取得了很大的进展。 接下来&#xff0c;我们将…

PVD中断检测掉电

文章目录 概述配置掉电擦写注意 概述 STM32 PVD功能具体可以检测到上电、掉电瞬间&#xff0c;其处理方式有中断响应及事件响应。掉电设置为上升沿触发&#xff0c;上电为下降沿触发 配置 1.开启PVD中断并设置其优先级 2.配置响应中断或事件的阈值电压 3.配置响应模式 生成…

快速掌握--cursor

Cursor - The AI Code Editor 官网下载安装 详细教程&#xff1a;cursor 下载安装使用&#xff08;保姆教程&#xff09;_cursor下载-CSDN博客 不知道为啥&#xff0c;第一次给我用的是繁体回答 然后改了一下询问方式 codebase就是告诉ai可以从整个项目中找答案&#xff0…

1993年地级市民国铁路开通数据(地级市工具变量)

1993年地级市民国铁路开通数据&#xff08;地级市工具变量&#xff09; 1、时间&#xff1a;1933年 2、指标&#xff1a;是否开通铁路 3、来源&#xff1a;《Z国铁道便览》 4、方法说明&#xff1a;参考田坤&#xff08;2023&#xff09;参考章元&#xff08;2008&#xff…

AI优化SEO关键词实践路径

内容概要 随着人工智能技术深度渗透数字营销领域&#xff0c;SEO关键词优化正经历从人工经验驱动向算法智能决策的跃迁。本文聚焦AI技术在SEO关键词全生命周期管理中的应用框架&#xff0c;系统阐述智能算法如何通过海量数据挖掘潜在搜索需求、解析用户意图的语义关联性&#…

论微服务架构及其应用

试题四 论微服务架构及其应用 微服务提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间互相协调、互相配合&#xff0c;为用户提供最终价值。每个服务运行在其独立的进程中&#xff0c;服务与服务间采用轻量级的通信机制互相沟通。在微服务架构中&#xff0c;每个服务…

基于SpringBoot+Vue实现的电影推荐平台功能三

一、前言介绍&#xff1a; 1.1 项目摘要 2023年全球流媒体用户突破15亿&#xff0c;用户面临海量内容选择困难&#xff0c;传统推荐方式存在信息过载、推荐精准度低等问题。传统推荐系统存在响应延迟高&#xff08;平均>2s&#xff09;。随着互联网的快速发展&#xff0c;…

ARM 算数指令

加法 ADD 减法 SUB 取负 NEG 比较 CMP 乘法 MUL 移位 LSL、LSR、ASL、ASR、ROL、ROR加法和减法 绝大多数微处理器都实现了带进位的加法指令&#xff0c;能够将两个操作数和条件码寄存器中的进位位加到一起。这条指令会使字长大于计算机固有字长的链接运算更加方便。 说明了如何…

JAVA---集合ArrayList

集合 1. 自动扩容 &#xff0c;集合长度可变 2. 只可以存引用数据类型&#xff0c;如果要存基本数据类型&#xff0c;需要将其转换成对应的包装类 ArrayList 定义在 java.util 下的&#xff0c;实现了 List 接口。ArrayList 内部以动态数组的形式存储元素&#xff0c;这意…

Scrapy框架之【settings.py文件】详解

settings.py 文件的主要作用是对 Scrapy 项目的全局设置进行集中管理。借助修改这个文件中的配置项&#xff0c;你可以对爬虫的行为、性能、数据处理等方面进行灵活调整&#xff0c;而无需修改爬虫代码。 ①默认英文注释settings.py # Scrapy settings for douban project # …

Java变量学习笔记

Java变量 -为什么需要变量&#xff1f; 一个程序就是一个世界 变量是程序的基本组成单位 不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位&#xff0c;比如: //变量有三个基本要素(类型名称值) class Test{public static void main(String [largs){int a1;…

数据结构*队列

队列 什么是队列 是一种线性的数据结构&#xff0c;和栈不同&#xff0c;队列遵循“先进先出”的原则。如下图所示&#xff1a; 在集合框架中我们可以看到LinkedList类继承了Queue类&#xff08;队列&#xff09;。 普通队列&#xff08;Queue&#xff09; Queue中的方法 …

Nginx — 防盗链配置

防盗链简述 防盗链是一种保护网络资源所有者权益的技术手段&#xff0c;旨在防止未经授权的用户或网站通过直接链接的方式盗用资源&#xff0c;以下是关于防盗链的简述&#xff1a; 原理 基于请求头验证&#xff1a;服务器通过检查请求头中的特定字段&#xff0c;如Referer字…