功能函數項
外掛程式功能函數可以用在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(或具體多邊形下標)。
多邊形外掛程式計算量較大,對查詢效能有影響,建議盡量控制頂點個數,具體值請根據自己實際情況進行測試得出。