GIS属性表怎么按属性选择?查询语句怎么写?

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

很多初学者在做数据筛选时都会遇到同一个问题:GIS属性表怎么按属性选择?查询语句怎么写? 其实核心并不复杂:先看字段类型,再按软件支持的 SQL 语法写条件,最后检查选择结果是否符合预期。

本文以常见的 QGIS、ArcGIS Pro 和通用 GIS 属性表为例,讲清楚按属性选择的基本方法、查询语句写法、常见错误和检查清单。适合 GIS 学生、制图人员、空间数据处理人员在日常工作中快速套用。

引言:GIS属性表按属性选择到底在做什么

GIS属性表按属性选择,本质上是根据图层属性表中的字段值筛选要素。例如,从行政区图层中选择“省份 = 四川省”的面要素,从道路图层中选择“道路等级 = 国道”的线要素,或者从监测点图层中选择“PM2.5 大于 75”的点要素。

按属性选择通常用于以下场景:

  • 从一个大图层中筛选某一类要素。
  • 批量导出符合条件的数据。
  • 对选中的要素进行字段计算、裁剪、缓冲区或统计分析。
  • 检查属性值是否填写错误,例如空值、异常值、重复编码。

很多查询失败并不是软件问题,而是字段类型、引号、字段名写法或中文字符处理不正确导致的。

GIS属性表按属性选择 查询语句怎么写示意图
GIS 属性表按属性选择的基本流程:先确认字段类型,再编写查询语句,最后检查地图和属性表中的选择结果。

背景:为什么GIS查询语句经常写不对

在 GIS 软件中,属性表查询语句通常接近 SQL 表达式,但不同软件、不同数据源会有一些差异。Shapefile、GeoPackage、File Geodatabase、PostGIS 图层在字段名、字符串、日期和空值表达上可能略有不同。

最常见的问题有五类:

  • 字段类型看错:把文本字段当数值字段写,或者把数值字段加了引号。
  • 字符串没加引号:中文、名称、编码等文本值通常需要单引号。
  • 字段名写错:字段名包含中文、空格或特殊字符时,软件可能需要自动引用。
  • 空值判断写错:空值不是等于空字符串,通常要用 IS NULL。
  • 模糊查询语法不清楚:LIKE 和通配符用法没有掌握。

所以,学习 GIS 属性表怎么按属性选择,不建议死记某一条语句,而要理解字段类型和判断条件之间的关系。

原理:按属性选择查询语句的基本结构

一个属性查询语句通常由三部分组成:

字段名 运算符 查询值

例如:

name = '成都市'

其中,name 是字段名,= 是运算符,'成都市' 是查询值。

1. 文本字段查询

文本字段,也叫字符串字段,常用于存储名称、类别、编码等内容。文本值一般需要加单引号。

city = '成都市'
type = '住宅用地'

如果字段值是中文,也同样使用单引号。不要写成:

city = 成都市

这种写法通常会报错,因为软件会把“成都市”当成字段名或非法表达式。

2. 数值字段查询

数值字段包括整数、浮点数、面积、人口、长度、等级代码等。数值查询通常不需要加引号。

area > 10000
population >= 500000
level = 2

如果把数值写成 '2',有些软件会自动转换,有些数据源可能会导致查询异常。为了稳定,数值字段建议不加引号。

3. 多条件查询

多个条件可以使用 ANDOR 连接。

city = '成都市' AND area > 10000
type = '国道' OR type = '省道'

AND 表示同时满足,OR 表示满足其中一个即可。如果条件复杂,建议使用括号控制优先级。

(type = '国道' OR type = '省道') AND length > 1000

4. 模糊查询

模糊查询常用于名称中包含某个关键词的情况。一般使用 LIKE

name LIKE '%学校%'

这条语句表示选择名称中包含“学校”的要素。常见写法如下:

查询目标 查询语句示例
以“成”开头 name LIKE '成%'
以“市”结尾 name LIKE '%市'
包含“道路” name LIKE '%道路%'

5. 空值查询

空值不是普通文本,不能简单写成 field = ''。真正的空值通常要使用 IS NULL

name IS NULL

查询非空值则写成:

name IS NOT NULL

需要注意,空值和空字符串不是一回事。空字符串表示字段里有一个长度为 0 的文本,而空值表示没有值。

步骤:GIS属性表怎么按属性选择

步骤1:打开图层属性表

在 QGIS 或 ArcGIS Pro 中,先在图层列表中选中目标图层,然后打开属性表。不要在错误图层上写查询语句,这是初学者最容易忽略的问题。

  • QGIS:右键图层,选择“打开属性表”。
  • ArcGIS Pro:右键图层,选择“属性表”。

步骤2:确认字段名和字段类型

写查询语句前,先确认要查询的字段。例如字段是 nametypearea 还是 code。同时要看字段类型是文本、整数、小数还是日期。

这一步决定了查询值是否需要加引号:

  • 文本字段:查询值通常加单引号,例如 name = '成都市'
  • 数值字段:查询值通常不加引号,例如 area > 10000
  • 空值判断:使用 IS NULLIS NOT NULL

步骤3:打开按属性选择工具

不同软件入口略有不同,但逻辑基本一致。

软件 常见入口 说明
QGIS 属性表中的“按表达式选择要素” 可使用表达式构建器,适合快速选择和复杂条件。
ArcGIS Pro Map 选项卡中的 Select By Attributes 可通过图形界面构建 SQL 条件。
ArcMap Selection 菜单中的 Select By Attributes 旧项目中仍然常见,语法与数据源有关。

步骤4:编写查询语句

以下是 GIS 属性表查询语句的常用模板,可以直接替换字段名和字段值。

需求 查询语句
选择名称等于成都市 name = '成都市'
选择面积大于 10000 area > 10000
选择类型不是住宅用地 type <> '住宅用地'
选择道路等级为国道或省道 type = '国道' OR type = '省道'
选择名称包含学校 name LIKE '%学校%'
选择字段为空 name IS NULL

步骤5:执行选择并检查结果

执行查询后,不要马上导出或分析。建议先做三项检查:

  • 地图上是否高亮显示了预期位置的要素。
  • 属性表中选中记录数量是否合理。
  • 随机查看几条选中记录,确认字段值确实满足查询条件。

如果结果为空,优先检查字段值是否存在空格、全角半角差异、中文标点差异和字段类型错误。

步骤6:导出选中要素

确认选择结果正确后,可以将选中要素导出为新图层。

  • QGIS:右键图层,选择“导出”,再选择“另存为”,勾选“仅保存选中的要素”。
  • ArcGIS Pro:右键图层,选择“Data”,再选择“Export Features”,输入要素可设置为当前选择结果。

导出后建议重新打开新图层属性表,确认记录数量与选择数量一致。

常见坑:GIS属性表查询语句容易出错的地方

1. 文本字段忘记加引号

错误写法:

name = 成都市

推荐写法:

name = '成都市'

只要字段值是名称、类别、编码等文本内容,通常都要加单引号。

2. 字段值看起来一样,其实有空格

有些数据从 Excel、CSV 或外部系统导入后,字段值前后可能带空格。例如看起来是“成都市”,实际可能是“ 成都市”或“成都市 ”。这会导致 name = '成都市' 查不到结果。

遇到这种情况,可以先用模糊查询排查:

name LIKE '%成都市%'

如果模糊查询能选中,而精确查询选不中,通常说明字段值存在隐藏空格或异常字符。

3. 把空值和空字符串混为一谈

查询空值要用:

field IS NULL

查询空字符串才可能使用:

field = ''

实际数据清洗时,两种情况可能同时存在,需要分别检查。

4. AND 和 OR 没有加括号

复杂条件中,括号非常重要。下面这类语句容易产生误解:

type = '国道' OR type = '省道' AND length > 1000

更清晰的写法是:

(type = '国道' OR type = '省道') AND length > 1000

这样表示先筛选国道或省道,再要求长度大于 1000。

5. 字段名和显示别名混淆

ArcGIS Pro 和部分数据库图层可能显示字段别名,但查询语句通常需要使用真实字段名。字段别名看起来更友好,但不一定能直接用于查询。

如果语句报字段不存在,检查图层字段设计,确认真实字段名。

方法比较:QGIS、ArcGIS Pro和通用SQL写法有什么区别

不同 GIS 软件的按属性选择工具界面不同,但查询思路一致:字段、运算符、值。主要差异在字段引用方式、函数名称和表达式构建器。

项目 QGIS ArcGIS Pro 通用SQL思路
适合人群 开源 GIS 用户、学生、数据处理人员 企业 GIS、测绘制图、自然资源项目用户 数据库和脚本处理用户
查询入口 按表达式选择要素 Select By Attributes WHERE 条件
文本查询 "name" = '成都市' name = '成都市' WHERE name = '成都市'
数值查询 "area" > 10000 area > 10000 WHERE area > 10000
优势 表达式函数丰富,适合数据检查 与地理数据库和制图流程结合紧密 适合批量处理和自动化
注意点 字段常用双引号引用 语法受数据源影响 需要了解数据库字段类型

如果你只是在桌面软件中选择要素,使用软件自带的表达式构建器最稳妥。它可以自动插入字段名和部分运算符,减少手写错误。

检查清单:写GIS属性表查询语句前先核对这些

在执行 GIS 属性表按属性选择之前,可以按下面清单逐项检查:

  • 是否选中了正确的图层。
  • 字段名是否是真实字段名,而不是字段别名。
  • 字段类型是文本、数值、日期还是其他类型。
  • 文本值是否使用单引号。
  • 数值条件是否没有误加引号。
  • 中文字段值是否存在前后空格或全角半角差异。
  • 空值查询是否使用 IS NULL
  • 多个条件是否正确使用 ANDOR 和括号。
  • 执行后是否检查了选中数量和地图高亮结果。
  • 导出结果后是否再次核对记录数。

实用建议:如果查询语句一直报错,先用一个最简单的条件测试,例如 type = '国道'。确认能运行后,再逐步增加其他条件。

FAQ:GIS属性表按属性选择常见问题

1. GIS属性表怎么按属性选择某一类地物?

先打开属性表,找到分类字段,例如 typelanduse,然后使用等值查询。例如选择住宅用地:

landuse = '住宅用地'

执行后检查地图中的高亮要素是否与预期一致。

2. 查询语句怎么写才能选择多个类别?

可以使用 OR 连接多个条件:

type = '国道' OR type = '省道'

如果还要限制长度,可以加括号:

(type = '国道' OR type = '省道') AND length > 1000

3. 为什么我写了字段等于某个中文值,但选择结果为空?

常见原因包括字段值前后有空格、字段值不完全一致、字段类型不是文本、中文标点不同,或者选错了图层。可以先用模糊查询排查:

name LIKE '%关键词%'

如果模糊查询能查到,说明原字段值可能不是完全等于你输入的文本。

4. GIS属性表查询空值应该怎么写?

查询空值通常写:

field IS NULL

查询非空值写:

field IS NOT NULL

不要把空值简单理解为 field = '',两者含义不同。

5. QGIS查询语句和ArcGIS Pro查询语句一样吗?

基本逻辑一样,但细节可能不同。QGIS 表达式里字段常用双引号引用,例如:

"name" = '成都市'

ArcGIS Pro 中常见写法为:

name = '成都市'

具体语法还会受数据源影响。建议优先使用软件的字段列表和表达式构建器自动插入字段名。

6. 按属性选择后可以只导出选中的要素吗?

可以。QGIS 中导出时勾选“仅保存选中的要素”;ArcGIS Pro 中使用导出要素工具时,当前选择集通常会参与导出。导出后要核对新图层记录数,避免误导出全部数据。

结论:先判断字段类型,再写查询条件

理解 GIS属性表怎么按属性选择 的关键,不在于背很多复杂语句,而是掌握三个判断:字段是什么类型、要用什么运算符、查询值应该怎么写。

实际工作中,最常用的查询语句就是等值查询、范围查询、模糊查询、多条件查询和空值查询。只要按“字段名 + 运算符 + 查询值”的结构来写,并在执行后检查选中结果,大多数 GIS 属性表查询问题都可以快速定位和解决。

建议初学者先从简单条件开始,确认结果正确后再叠加复杂条件。这样不仅能减少语法错误,也能避免因为选择结果不准确而影响后续空间分析和制图成果。