功能函数项
插件功能函数可以用在filter子句作为过滤和筛选条件,而返回值为数值型的功能函数在sort子句中,用来做排序。
其中功能函数参数出现的文档字段需根据对应函数文档提示,创建为索引或属性.
in_polygon : 判断某个点是否在某个多边形范围内,一般用于配送范围判断
1.详细用法:
in_polygon(polygon_field, user_x_coordinate, user_y_coordinate, has_multi_polygons=”false”)
2.参数:
polygon_field: 表示商家配送范围的字段名,类型必须为DOUBLE_ARRAY, 字段值依次为配送多边形有序定点的x,y坐标(先x后y),顶点务必保证有序(顺时针、逆时针均可),如果有多个(N个)配送多边形,则第一个值表示多边形个数,第2~N+1的值表示后续每个多边形的顶点数(不是坐标数哦!!),第N+2值开始依次表示各多边形的顶点x,y坐标(N的值域为[1,50])
user_x_coordinate: 用户的x坐标, double类型
user_y_coordinate: 用户的y坐标, double类型
has_multi_polygons:表示polygon_filed是否包含多个独立的多边形需要判断。默认为false,表示只有单一的多边形。
3.返回值:
int,在多边形内返回第几个多边形匹配, 否则返回0。
4.适用场景:
场景1:判断用户是否在商家的配送范围。如商家配送范围的字段为coordinates, 用户位置坐标为 (120.307234, 39.294245),则过滤在配送范围内的商家查询可写为:
query=default:’美食’&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0
5.注意事项:
函数参数依赖字段需创建为属性
最多支持50个多边形,超过则跳过该文档的计算;
不支持有孔多边形,如环;
不支持多个分离部分的多边形;
坐标个数为0,表示没有坐标,返回0;
坐标个数为奇数个,则认为数据有误,返回0;
用户点位于多边形边上,则认为匹配成功,返回为1(或具体多边形下标)。
多边形插件计算量较大,对查询性能有影响,建议尽量控制顶点个数,具体值请根据自己实际情况进行测试得出。