DocumentDB SQL - 空间函数



DocumentDB 还支持用于地理空间查询的开放地理空间联盟 (OGC) 内置函数。以下是支持的内置空间函数列表。

序号 函数及描述
1

ST_DISTANCE (point_expr, point_expr)

返回两个 GeoJSON 点表达式之间的距离。

2

ST_WITHIN (point_expr, polygon_expr)

返回一个布尔表达式,指示第一个参数中指定的 GeoJSON 点是否在第二个参数中的 GeoJSON 多边形内。

3

ST_ISVALID

返回一个布尔值,指示指定的 GeoJSON 点或多边形表达式是否有效。

4

ST_ISVALIDDETAILED

返回一个 JSON 值,其中包含一个布尔值(指示指定的 GeoJSON 点或多边形表达式是否有效),如果无效,则另外包含原因作为字符串值。

在这个例子中,我们将使用包含坐标形式位置的两个大学文档。

以下是 **凯斯西储大学文档**。

Case University Document
{  
   "id": "case-university", 
   "name": "CASE: Center For Advanced Studies In Engineering", 
   "city": "Islamabad",
	
   "location": { 
      "type": "Point", 
      "coordinates": [ 
         33.7194136, 
         -73.0964862 
      ] 
   } 
}

以下是 **努斯特大学文档**。

Nust University Document
{ 
   "id": "nust", 
   "name": "National University of Sciences and Technology", 
   "city": "Islamabad", 
	
   "location": { 
      "type": "Point", 
      "coordinates": [ 
         33.6455715, 
         72.9903447 
      ] 
   } 
}

让我们来看另一个 ST_DISTANCE 的例子。

St Distance Example

以下是返回大学文档的 ID 和名称的查询,这些文档位于指定位置 30 公里以内。

SELECT u.id, u.name  
FROM Universities u 
WHERE ST_DISTANCE(u.location, {'type': 'Point', 'coordinates':[33.7, -73.0]}) < 30000

执行上述查询后,将产生以下输出。

[ 
   { 
      "id": "case-university", 
      "name": "CASE: Center For Advanced Studies In Engineering" 
   } 
]

让我们来看另一个例子。

St Distances Example

以下是包含 ST_ISVALID 和 ST_ISVALIDDETAILED 的查询。

SELECT  
   ST_ISVALID({ "type": "Point", "coordinates": [32.9, -132.8] }) AS Point1,
   
   ST_ISVALIDDETAILED({ "type": "Point", "coordinates": [31.9, -132.8] }) AS Point2

执行上述查询后,将产生以下输出。

[ 
   {
      "Point1": false, 
      "Point2": { 
         "valid": false, 
         "reason": "Latitude values must be between -90 and 90 degrees." 
      } 
   }
]

上述输出显示 ST_ISVALIDDETAILED 也返回该点无效的原因,而 ST_ISVALID 只返回布尔值。

documentdb_sql_builtin_function.htm
广告