ECQL语法说明

ECQL(Extended Common Query Language,扩展通用查询语言)是对OGC标准查询语言CQL的扩展,相较于CQL更加强大、灵活、语法更接近于SQL,主要应用于地理空间数据的过滤和查询,您可以通过直观的方式组合 SQL 风格的属性过滤(如 POPULATION > 100000)与丰富的空间关系判断(如 INTERSECTS、WITHIN),从而精准筛选出目标数据。下面列举了ECQL的一些常用语法。

特殊说明:在SuperMap GIS环境中,ECQL查询功能的支持程度与数据引擎类型密切相关,仅在使用JDBC-PostGIS连接时支持ECQL过滤查询。从SuperMap 2025 R2版本开始,在使用JDBC-OracleSpatial连接时也增加了对ECQL查询的支持,需要注意的是,在使用JDBC-OracleSpatial连接时,ECQL中的时间谓词(如BEFORE、AFTER、DURING)以及RELATE()、BEYOND()空间函数不支持。

属性查询

分类 函数/运算符 语法示例
逻辑关系判断 AND, OR, NOT pop_2014 < 10000 AND popUrban_2014 > 5000;
NOT DLMC = '水田';
比较运算符​ =, <>, >, >=, <, <= PERSONS > 15000000;
STATE_NAME = 'California';
范围查询​​ BETWEEN ... AND ... PERSONS BETWEEN 1000000 AND 3000000;
模糊匹配​​ LIKE/ ILIKE STATE_NAME LIKE 'N%';
cityName ILIKE 'new%';
集合判断​​ IN (...) STATE_NAME IN ('New York', 'California');
​​空值判断​​ IS NULL/ IS NOT NULL Name IS NULL;
centroid(the_geom) IS NULL;

空间查询

函数名 语法示例 功能描述
INTERSECTS INTERSECTS(geom, POLYGON(116.4 39.9,116.4 40.3,117.4 40.3,117.4 39.9,116.4 39.9));
INTERSECTS(geom, SRID=4326, POLYGON(...));
判断两个空间对象是否相交。
DISJOINT​ DISJOINT(geom, POLYGON(...));
DISJOINT(geom, SRID=4326, POLYGON(...));
判断两个空间对象是否相离。
CONTAINS​ CONTAINS(geom1, geom2) 判断geom1是否完全包含geom2。
WITHIN​ WITHIN(geom1, geom2) 判断geom1是否完全在geom2内部。
TOUCHES​ TOUCHES(geom1, geom2) 判断两个空间对象的边界是否接触。
CROSSES​ CROSSES(geom1, geom2) 判断两个空间对象是否相交(如线横穿多边形)。
OVERLAPS​ OVERLAPS(geom1, geom2) 判断两个空间对象是否重叠。
EQUALS​ EQUALS(geom1, geom2) 判断两个空间对象是否在拓扑上相等。
DWITHIN​ DWITHIN(geom, POINT(116.4 39.9), 10, kilometers) //查找在距离点 10 kilometers内的空间对象。 查找在指定距离范围内的几何体。
BEYOND BEYOND(geom, POINT(116.4 39.9), 10, kilometers) // 查找在距离点 10 kilometers外的空间对象。 查找在指定距离范围外的几何体。
BBOX BBOX(geom, minX, minY, maxX, maxY);
BBOX(geom, 103.4,39.9,104.5,40.6,'EPSG:4326');
查询与给定边界框相交的几何体。
RELATE​ RELATE(geom1, geom2, 'T****FF') 使用DE-9IM模型判断自定义的空间关系。

时间查询

函数名称 语法示例 功能描述
BEFORE lastEarthQuake BEFORE 2006-11-30T01:30:00Z 判断时间点是否在指定时刻之前。
AFTER lastEarthQuake AFTER 2006-11-30T01:30:00Z 判断时间点是否在指定时刻之后。
TEQUALS ATTR1 TEQUALS 2006-11-30T01:30:00Z 判断时间点是否等于指定时刻。
DURING lastEarthQuake DURING 1700-01-01T00:00:00/2011-01-01T00:00:00 判断时间点或时间段是否包含在另一个时间段之内。