GlideGeoPoint 開発者ガイド

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む11読むのに数分
  • GlideGeoPoint 開発者ガイドには、緯度と経度の値 (ジオポイント) 間の距離を計算する方法、指定されたジオポイントと半径の値内の位置を返す方法、サポートされている GlideGeoPoint API 関数によって提供される追加機能を使用する方法に関する情報が含まれています。

    を使用すると Geo point field type 、緯度と経度のペアを 1 つのフィールドに格納できます。ジオポイントは、地理的な対象ポイントを格納したり、パート 2 の対象ポイントが互いにどれだけ離れているかを調べたり、別のポイントから特定の距離内にあるすべてのポイントを検索したりする場合に役立ちます。たとえば、ジオポイント機能を使用して、顧客のすべての配送場所をすばやく特定し、店舗からの距離に基づいて配送料を調整できます。

    ジオタイプ データ タイプの主な側面は次のとおりです。
    • これは、経度と緯度の値を表す 10 進数のペアで構成されます。
    • 経度の範囲は (-180, 180) です。この範囲外の値は、この範囲内の同等の値に正規化されます。
    • 緯度の範囲は [-90, 90] です。この範囲外の値は、この範囲内の同等の値に正規化されます。
    • ジオポイント値は常に入力として受け入れられ、「longitude,latitude」のカンマ区切りのペアとして表示されます。オプションで式を括弧で囲むことができます。
    • 経度と緯度の両方の値は、小数点以下 6 桁の精度まで格納されます。

    ジオポイント データ タイプの詳細については、次のリンクを参照してください Function field

    このガイドの例では、カスタム テーブル u_geopoint にフィールド u_name と u_location が入力されていることを前提としています。u_name は 'string' 型で主要都市の名前をリストし、u_location は 'geopoint' 型で、各都市の緯度/経度ポイントをそれぞれ一覧表示します。

    GlideGeoPoint API を使用したジオポイントの作成

    GlideGeoPoint API を使用して、新しいレコードを挿入したり、新しいジオポイントを作成したりします。

    API を使用すると GlideGeoPoint - グローバル 、ジオポイント値を設定および取得できます。ただし、文字列表記または 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 () 関数を使用して、 u_geopoint テーブル (タイプ「geopoint」の u_location フィールドを含む) からすべてのレコードを取得する方法を示しています。このサンプルスクリプトを使用して、独自の特定のユースケースに合わせて調整できます。

    注:
    GlideGeoPoint API 値は常に経度、緯度の順序でリストされます。
    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(ジオポイント1, 経度2, 緯度2)
    • GlideFunction:distance_sphere(経度1, 緯度1, 経度2, 緯度2)

    これらの構文を使用する場合は、次の点に注意してください。

    • 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,latitude<radius に従う必要があります。

    • ジオ ポイントはジオポイントフィールドです
    • 経度緯度 は 10 進定数です
    • 半径 は 10 進定数 (メートル) です
    注:
    この式の小なり記号 (<) は必須であり、区切り記号としてのみ使用されます。その他の比較演算子は無効です。

    DISTANCE_SPHERE_WITHINは、要求でキロメートルまたはメートルの値を受け入れますが、常にメートル単位で出力値を返します。

    次のスクリプト例は、経度 -0.189937、緯度 51.473584 (おおよそロンドンの場所) の地点から 1,000,000 キロメートル未満のu_locationを持つレコードのみを返すエンコードされたクエリを作成する方法を示しています。実行すると、ロンドンの指定された半径内の都市を表す 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)