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 | 判断时间点或时间段是否包含在另一个时间段之内。 |