GlideGeoPoint 開発者ガイド
GlideGeoPoint 開発者ガイドには、緯度と経度の値 (ジオポイント) 間の距離を計算し、指定されたジオポイントと半径の値内の位置を返し、サポートされている GlideGeoPoint API 関数によって提供される追加機能を使用する方法に関する情報が含まれています。
Geo point field typeを使用すると、緯度と経度のペアを 1 つのフィールドに格納できます。ジオポイントは、地理的な対象ポイントを保存したり、パート 2 の対象ポイントが互いにどの程度離れているかを尋ねたり、別のポイントから特定の距離内にあるすべてのポイントを検索したりするときに便利です。たとえば、ジオポイント機能を使用して、顧客のすべての配送場所をすばやく特定し、店舗からの距離に基づいて配送料を調整できます。
- これは、経度と緯度の値を表す 10 進数のペアで構成されます。
- 経度の範囲は (-180, 180) です。この範囲外の値は、この範囲内の同等の値に正規化されます。
- 緯度の範囲は [-90, 90] です。この範囲外の値は、この範囲内の同等の値に正規化されます。
- ジオポイント値は常に入力として受け入れられ、「経度、緯度」のようにカンマ区切りのペアとして表示されます。必要に応じて、括弧で式を囲むことができます。
- 経度と緯度の値はどちらも、小数点以下 6 桁までの精度で格納されます。
ジオポイント データ タイプの詳細については、「 Function field」を参照してください。
このガイドの例では、カスタムテーブル u_geopoint にフィールド u_name と u_location が入力されていることを前提としており、 u_name はタイプが「文字列」で主要都市の名前がリストされ 、u_location はタイプが「ジオポイント」で、各都市の緯度/経度がそれぞれリストされます。
GlideGeoPoint API を使用してジオポイントを作成する
GlideGeoPoint API を使用して、新しいレコードを挿入し、新しいジオポイントを作成します。
GlideGeoPoint - グローバル API を使用すると、ジオポイント値を設定および取得できます。ただし、文字列表記または GlideGeoPoint オブジェクトを使用してスクリプトでジオポイントを直接設定することで、新しいレコードを挿入するための追加機能を実行できます。
- 文字列表記を使用して新しいレコードを挿入する。
- 文字列を使用して
u_locationジオポイントフィールドの値を設定します。文字列は、経度と緯度の値をカンマで区切って構成されます。次の例は、文字列表記を使用してu_geopointテーブルに新しいジオポイントを設定する方法を示しています。注:GlideGeoPoint API 値は常に経度、緯度の順にリストされます。const longitude = "-87.628018"; const latitude = "41.885778"; const geopoint = longitude + "," + latitude; const myGeoPoint = new GlideRecord("u_geopoint"); myGeoPoint.initialize(); myGeoPoint.setValue("u_name", "Chicago"); myGeoPoint.setValue("u_location", geopoint); myGeoPoint.insert(); - GlideGeoPoint オブジェクトを使用して新しいレコードを挿入する。
- GlideGeoPoint オブジェクトを使用してジオポイントフィールドの値を
u_location設定します。const longitude = -87.628018; const latitude = 41.885778; const geopoint = new GlideGeoPoint(longitude, latitude); const myGeoPoint = new GlideRecord("u_geopoint"); myGeoPoint.initialize(); myGeoPoint.setValue("u_name", "Chicago"); myGeoPoint.setValue("u_location", geopoint); myGeoPoint.insert();
GlideGeoPoint API を使用したジオポイント値の読み取り
getDisplayValue() GlideGeoPoint API 関数を使用して、特定のテーブルからすべてのジオポイント値を読み取ります。
標準の GlideGeoPoint API を使用すると、 GlideGeoPoint:getDisplayValue() 関数を使用してジオポイント値を取得できます。ただし、テーブル全体で定義されているすべてのジオポイントを読み取ることは可能です。次のサンプルスクリプトは、getDisplayValue() 関数を使用して、「geopoint」タイプのu_locationフィールドを含むu_geopointテーブルからすべてのレコードを取得する方法を示しています。このサンプルスクリプトは、独自の特定のユースケースに合わせて調整できます。
const myGeoPoint = new GlideRecord("u_geopoint");
myGeoPoint.query();
while (gr.next())
gs.info("Name: {0} Location: {1}",
myGeoPoint.getDisplayValue('u_name'),
myGeoPoint.getDisplayValue('u_location'));
出力は、 u_geopoint テーブル内のすべてのレコードを返します。ジオポイントの表示値には、経度と緯度がカンマで区切られ、括弧で囲まれます。
Name: London Location: (-0.189937, 51.473584)
Name: Puerto Rico Location: (-66.561301, 18.291136)
Name: Glasgow Location: (-4.223964, 55.867846)
Name: Chicago Location: (-87.628018, 41.885778)
Name: Tasmania Location: (146.757677, -42.173578)
Name: Bermuda Location: (-64.761595, 32.315798)
Name: Miami Location: (-80.206458, 25.767242)
Name: Sydney Location: (151.205230, -33.890115)
Name: Perth Location: (115.871253, -31.971583)
Name: Dublin Location: (-6.304994, 53.348317)
2 つのジオポイント間の距離を計算します
distance_sphere glide 関数を使用して、ジオポイント間の距離をメートル単位で返します。
ジオポイントグライド関数 distance_sphere を使用すると、2 つのジオポイント間の距離を計算できます。この関数は距離をメートル単位で返します。 distance_sphere は、テーブルの関数フィールド要素の定義で使用するか、スクリプトを介して使用できます。3 つの構文がサポートされており、すべてのパラメーターが必要です。
glidefunction:distance_sphere(geopoint1, geopoint2)glidefunction:distance_sphere(geopoint1, longitude2, latitude2)glidefunction:distance_sphere(経度 1, latitude1, 経度 2, latitude2)
これらの構文を使用する場合は、次の点に注意してください。
- geopoint1 と geopoint2 は、タイプ「geopoint」のテーブル要素です
- 経度 1、経度 2、緯度 1、緯度 2 は数値テーブル要素または定数です
- いずれの場合も、この関数の戻り値は、2 つのジオポイント間の距離をメートル単位で表す 10 進数です
次のスクリプト例では、u_geopointテーブルの u_location フィールドに格納されているすべてのジオポイントと、ポイント経度 -0.189937、緯度 51.473584 (ロンドンのおおよその位置) との間の距離を計算するdistance_sphere関数を定義しています。この関数が GlideRecord クエリに追加され、結果が生成されます。
const distToLondon =
"glidefunction:distance_sphere(u_location, '-0.189937', '51.473584')";
const myGeoPoint = new GlideRecord('u_geopoint');
gr.addFunction(distToLondon);
gr.query();
while(myGeoPoint.next())
gs.info("Name: {0} Dist to London(m): {1}",
myGeoPoint.u_name, gr.getValue(distToLondon));
出力には、ロンドンと都市間の距離が [u_location ] フィールドにメートル単位でリストされます。
Name: London Dist to London(m): 0
Name: Glasgow Dist to London(m): 555985.58456358
Name: Dublin Dist to London(m): 464000.328892816
Name: Miami Dist to London(m): 7123803.25406323
Name: Bermuda Dist to London(m): 5547607.95564083
Name: Puerto Rico Dist to London(m): 6799201.00905107
Name: Perth Dist to London(m): 14485217.5596414
Name: Sydney Dist to London(m): 17001034.4875494
Name: Tasmania Dist to London(m): 17324634.4559516
2 つのジオポイント間の距離をフィルタリングします
DISTANCE_SPHERE_WITHINクエリ条件を使用して、定義された緯度と経度のポイントの半径内にジオポイント値を持つレコードをフィルタリングします。
DISTANCE_SPHERE_WITHIN は 、構文 geopointDISTANCE_SPHERE_WITHINlongitude、緯度<半径 に従う必要があります。
ジオポイントはジオポイントフィールドです経度と緯度は 10 進定数です半径は 10 進定数 (メートル単位) です
DISTANCE_SPHERE_WITHINは要求でキロメートルまたはメートルの値を受け入れますが、常にメートルで出力値を返します。
次のサンプル スクリプトは、点から u_location が経 度 -0.189937 、緯度 51.473584 (ロンドンのほぼ位置) から 1,000,000 キロメートル未満のレコードのみを返すエンコードされたクエリを作成する方法を示しています。実行すると、ロンドンから指定された半径内の都市を表す 3 つのレコードが返されます。
const myGeoPoint = new GlideRecord("u_geopoint");
myGeoPoint.addEncodedQuery("u_locationDISTANCE_SPHERE_WITHIN-0.189937,51.473584<1000000");
myGeoPoint.query();
while(gr.next())
gs.info("Name:" + myGeoPoint.getDisplayValue("u_name")
+ " Location:" + myGeoPoint.getDisplayValue("u_location"));
出力:
Name:London Location:(-0.189937, 51.473584)
Name:Dublin Location:(-6.304994, 53.348317)
Name:Glasgow Location:(-4.223964, 55.867846)
次のスクリプト例は最初のものと同じですが、GlideRecord の代替構文を使用しています。
const myGeoPoint = new GlideRecord("u_geopoint");
myGeoPoint.addQuery("u_location", "DISTANCE_SPHERE_WITHIN", "-0.189937,51.473584<1000000");
myGeoPoint.query();
while(myGeoPoint.next())
gs.info("Name:" + myGeoPoint.getDisplayValue("u_name")
+ " Location:" + myGeoPoint.getDisplayValue("u_location"));
出力:
Name:London Location:(-0.189937, 51.473584)
Name:Dublin Location:(-6.304994, 53.348317)
Name:Glasgow Location:(-4.223964, 55.867846)