GlideGeoPoint 開発者ガイド

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

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

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

    geopoint データ型の詳細については、「 Function field」を参照してください。

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

    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テーブルからすべてのレコードを取得する方法を示しています。このサンプルスクリプトを使用して、特定のユースケースに合わせて調整できます。

    注:
    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(geopoint1, longitude2, latitude2)
    • 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 に従う必要があります。

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

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

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