lQueryDef查询Evaluate报该几何不包含M值问题。

地理数据库既包括空间,又包括属性,属性类似于SQL表,理论上支持标准SQL查询。lQueryDef接口提供了高效查询方法,适用于对属性表或要素类的属性进行筛选和检索。

问题描述

一个简单的面积求和示例如下:

IQueryDefFactory queryDefFactory = (IQueryDefFactory)workspace;
IQueryDef queryDef = queryDefFactory.CreateQueryDef();

// 设置查询表
queryDef.Tables = "TB";

// 关键:使用SQL聚合函数SUM()并重命名
queryDef.SubFields = "SUM(area) AS total_area";

// 筛选条件
queryDef.WhereClause = "BM = '0702'";

// 执行查询IRecordSet recordSet = queryDef.Evaluate();
ICursor cursor = recordSet.Cursor;
IRow row = cursor.NextRow();

但执行时,却报错:该几何不包含M值在ESRl.ArcGls.Geodatabase.lQueryDef.Evaluate()。

解决方案

通过观察字段area是存在的,通过对比更换其他有的字段不报错,最终发现area是一个文本字段(因为未打开图层,所以未检查字段类型),SUM字段不能直接使用文本字段。解决方案有两种:

(1)使用游标遍历所有area属性值,转换后再相加:这样的好处是可以处理各种异常的值;

(2)使用CAST转换函数,将area转为数值类型:

queryDef.SubFields = "SUM(CAST(area AS INTEGER)) AS total_area";

可参考官网说明:在 ArcGIS 中使用的查询表达式的 SQL 参考—ArcGIS Pro | 文档

posted @ 2025-09-19 06:35  我也是个傻瓜  阅读(8)  评论(0)    收藏  举报