DocumentDB SQL - 空间函数
DocumentDB 还支持用于地理空间查询的开放地理空间联盟 (OGC) 内置函数。 以下是内置支持的空间函数的列表。
S.No. | 函数与描述 |
---|---|
1 | ST_DISTANCE (point_expr, point_expr) 返回两个 GeoJSON 点表达式之间的距离。 |
2 | ST_WITHIN(point_expr,polygon_expr) 返回一个布尔表达式,指示第一个参数中指定的 GeoJSON 点是否位于第二个参数中的 GeoJSON 多边形内。 |
3 | ST_ISVALID 返回一个布尔值,指示指定的 GeoJSON 点或多边形表达式是否有效。 |
4 | ST_ISVALIDDETAILED 如果指定的 GeoJSON 点或面表达式有效,则返回包含布尔值的 JSON 值;如果无效,则另外返回字符串值形式的原因。 |
在本例中,我们将使用以下两个大学文档,其中包含坐标形式的位置。
以下是Case 大学文档。
{ "id": "case-university", "name": "CASE: Center For Advanced Studies In Engineering", "city": "Islamabad", "location": { "type": "Point", "coordinates": [ 33.7194136, -73.0964862 ] } }
以下是Nust大学文档。
{ "id": "nust", "name": "National University of Sciences and Technology", "city": "Islamabad", "location": { "type": "Point", "coordinates": [ 33.6455715, 72.9903447 ] } }
让我们看一下 ST_DISTANCE 的另一个示例。
以下查询返回指定位置 30 公里范围内的大学文档的 ID 和名称。
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_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.html