我正在努力了解Cosmos DB的ST_WITHIN
函数。我从一个相当复杂的东西开始,但是不得不将其缩小到我确定为 应该可以但不起作用的地方。
考虑:
SELECT ST_WITHIN({ 'type': 'Point', 'coordinates': [ 0, 0 ] }, {'type':'Polygon','coordinates':[[[-150, -50], [-150, 50], [150, 50]]]}) FROM c
为什么这会为c
中的每个记录返回一个空对象?也就是说,对于c
中的3个项目,结果如下:
[
{},
{},
{}
]
至少,我希望它为每个对象返回false
而不是什么都不会。但是实际上在这种情况下,我希望它返回true
,因为提供的点在多边形内。
我希望我做的事情很明显是错误的,但是我不知道该怎么做。我已经尝试过启用集合上的Point
,Line
和Polygon
索引无济于事。
有人有什么建议吗?
答案 0 :(得分:1)
好的,我转载了您的问题,请参阅official document中的声明。
与不匹配类型在Azure Cosmos DB查询中的工作方式类似,如果 参数中指定的位置值格式错误或无效, 然后评估为未定义,评估文件为 从查询结果中跳过。如果查询没有返回结果,请运行 ST_ISVALIDDETAILED调试为什么空间类型无效。
然后您可以使用Each ring of a polygon must contain at least four points
方法检查ST_ISVALIDDETAILED
的原因。