ドキュメントの検索
karat

+

K

APIリファレンス ↗

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

トランスフォームでベクトルデータを使用する

概要

Pipeline Builderアプリケーションを使用して、コードを書くことなく、地理空間データを読み込み、変換し、操作することができます。 Pipeline Builderの地理空間スイートは、以下で説明するGeospatial Tools Pythonライブラリとほぼ同等の機能を持っています。Pipeline Builderの地理空間機能について詳しく学ぶ。

Geospatial Toolsは、Foundryのベクトル地理空間データパイプラインで一般的な変換を行うための再利用可能なロジックをホスティングするPythonライブラリです。 このライブラリで提供される関数は、これらの一般的な操作をパイプラインロジックの残りの部分との統合を合理化するために、Pythonトランスフォームで使用することを目的としています。

現在、ライブラリには次のようなヘルパー関数が含まれています:

インストール

Pythonリポジトリにgeospatial-toolsSparkプロファイル GEOSPARKインポートします。インストールに関する支援が必要な場合は、Palantirの担当者に連絡してください。

隠しファイルとフォルダーを切り替え、/transforms-python/build.gradleの最下部に以下のブロックを追加します:

dependencies {
    // 以下のコードは、必要な依存関係のライブラリを追加します
    condaJars "org.apache.sedona:sedona-python-adapter-3.0_2.12:1.2.1-incubating" // SedonaのPythonアダプター
    condaJars "org.apache.sedona:sedona-sql-3.0_2.12:1.2.1-incubating" // SedonaのSQLモジュール
    condaJars "org.apache.sedona:sedona-core-3.0_2.12:1.2.1-incubating" // Sedonaのコアモジュール
    condaJars "org.datasyslab:geotools-wrapper:geotools-24.0" // Geotoolsのラッパーライブラリ
}

使い方

geospatial-tools ライブラリを使用するすべてのトランスフォームは、@geospatial() デコレーターを使用する必要があります(他のデコレーター(@transform_df()@configure() など)の上に)。これにより、Apache Sedona がユーザーの Spark 環境内で有効になり、PySpark DataFrame で空間結合を行うためのバインディングが追加されます。

from transforms.api import transform_df, configure, Input, Output
from geospatial_tools import geospatial

@geospatial()  # geospatial()デコレーターを使用。地理空間データに対する操作を可能にします
@configure(...)  # configure()デコレーターを使用。この関数の設定を行います
@transform_df(...)  # transform_df()デコレーターを使用。データフレームの変換を行います
def compute(input_df):  # compute関数を定義します。入力としてデータフレーム(input_df)を受け取ります
    ...

地理空間データのクリーニング

Foundry でのクリーンな地理空間データは以下の通りです:

  1. 表形式で、データが Spark トランスフォームで使用できるようになっています
  2. 有効な GeoJSON または geohash としてフォーマットされているため、データは Foundry のオントロジーで使用できます
  3. EPSG:4326 CRS を使用して投影され、空間結合の両方の側が同じ投影を使用し、Foundry のマップが機能を正しくレンダリングできます

geospatial-tools ライブラリは、ステップ(2)と(3)を実行するための clean_geometry()lat_long_to_geometry() を提供しています。生のデータが GeoJSON、Shapefile、GDB、KML、または KMZ の場合は、ステップ(1)を実行するために 組み込みの解析ヘルパー関数 を使用できます。

clean_geometry()

clean_geometry(geometry, input_crs, geometry_format='geojson', lat_long=False, output_format='geojson')

地理空間ジオメトリ行を有効にし、CRS を EPSG:4326 に正規化することでクリーニングします。

  • パラメーター
    • geometry (str): 入力ジオメトリ行の名前。
    • input_crs (str): 入力ジオメトリ CRS。
    • geometry_format (str, 任意): 入力ジオメトリのフォーマット。サポートされているフォーマットは geojsongeohashlatitude,longitude を含む文字列)、wktwkb です。デフォルトは geojson
    • lat_long (bool, 任意): 入力ジオメトリ座標が latitude,longitude の順序である場合は True、これは geohash 入力の場合は可能性がありますが、geojson または wkt の場合はありません。デフォルトは False
    • output_format (str, 任意): 出力ジオメトリフォーマット(geojson または geohash)。デフォルトは geojson
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import clean_geometry
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        raw_df=Input('/my/input/dataset'),
    )
    def compute(raw_df):
        clean_df = raw_df.withColumn('geometry', clean_geometry('geometry', 'EPSG:26910'))
        return clean_df
    

lat_long_to_geometry()

lat_long_to_geometry(lat, long, input_crs, output_format='geojson')

緯度と経度の行をクリーニングされたジオメトリ行に変換します。

  • パラメーター
    • lat (str): 入力緯度行の名前。
    • long (str): 入力経度行の名前。
    • input_crs (str): 入力ジオメトリ CRS。
    • output_format (str, 任意): 出力ジオメトリのフォーマット(geojson または geohash)。デフォルトは geojson
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import lat_long_to_geometry
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        raw_df=Input('/my/input/dataset'),
    )
    def compute(raw_df):
        clean_df = raw_df.withColumn('geohash', lat_long_to_geometry('latitude', 'longitude', 'EPSG:26910', output_format='geohash'))
        return clean_df.drop('latitude', 'longitude')
    

解析ヘルパー関数

geojson_to_dataframe()

geojson_to_dataframe(dataset, properties=None, glob='*.geojson', batch_size=100000)

GeoJSON ファイルをデータフレームに変換します。非常に大きなファイルを処理するためにストリーム処理を使用します。

  • パラメーター
    • dataset (transforms.api.Input): GeoJSON ファイルを含む入力データセット。
    • properties (list[str], 任意): 列を作成するためのプロパティのリスト。提供されていない場合、すべてのプロパティが JSON "properties" 行に含まれます。
    • glob (str, 任意): データセット内の GeoJSON ファイルを識別するために使用されるグロブパターン。デフォルトは *.geojson
    • batch_size (int, 任意): バッチごとに処理されるレコードの数。ドライバーがメモリ不足になっている場合、バッチサイズを減らす必要があります。デフォルトは 100000。
  • from transforms.api import transform, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.parsers import geojson_to_dataframe
    
    @geospatial()
    @transform(
        output=Output('/my/output/dataset'),
        raw=Input('/my/input/dataset'),
    )
    def compute(raw, output):
        return output.write_dataframe(
            geojson_to_dataframe(raw)
        )
    

shapefile_to_dataframe()

shapefile_to_dataframe(dataset, glob='*.shp')

シェープファイルをデータフレームに変換します。

  • パラメーター
    • dataset (transforms.api.Input): シェープファイルを含む入力データセット。
    • glob (str, 任意): データセット内の .shp ファイルを識別するために使用されるグロブパターン。また、他の関連ファイルが存在することを期待します(例:.shp、.shx、.dbf)。デフォルトは *.shp
  • from transforms.api import transform, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.parsers import shapefile_to_dataframe
    
    @geospatial()
    @transform(
        output=Output('/my/output/dataset'),
        raw=Input('/my/input/dataset'),
    )
    def compute(raw, output):
        return output.write_dataframe(
            shapefile_to_dataframe(raw)
        )
    

gdb_to_dataframe()

gdb_to_dataframe(dataset, glob='*.gdb.zip', layer=None)

GeoDatabase ファイルをデータフレームに変換します。

  • パラメーター
    • dataset (transforms.api.Input): 圧縮された GDB ファイルを含む入力データセット。
    • glob (str, 任意): データセット内の GDB ファイルを識別するために使用されるグロブパターン。デフォルトは *.gdb.zip
    • layer (str, 任意): 読む特定のレイヤー。
  • from transforms.api import transform, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.parsers import gdb_to_dataframe
    
    @geospatial()
    @transform(
        output=Output('/my/output/dataset'),
        raw=Input('/my/input/dataset'),
    )
    def compute(raw, output):
        return output.write_dataframe(
            gdb_to_dataframe(raw)
        )
    

kml_to_dataframe()

kml_to_dataframe(dataset, glob='*.kml')

KML ファイルをデータフレームに変換します。

  • パラメーター
    • dataset (transforms.api.Input): KML ファイルを含む入力データセット。
    • glob (str, 任意): データセット内の KML ファイルを識別するために使用されるグロブパターン。デフォルトは *.kml
    • drop_invalid_layers (bool, 任意): デフォルトは falsetrue に設定すると、KML ファイル内の空または解析できないレイヤーが無視されます。それ以外の場合、エラーが発生します。
  • from transforms.api import transform, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.parsers import kml_to_dataframe
    
    @geospatial()
    @transform(
        output=Output('/my/output/dataset'),
        raw=Input('/my/input/dataset'),
    )
    def compute(raw, output):
        return output.write_dataframe(
            kml_to_dataframe(raw)
        )
    

kmz_to_dataframe()

kmz_to_dataframe(dataset, glob='*.kmz')

KMZ ファイルをデータフレームに変換します。

  • パラメーター
    • dataset (transforms.api.Input): KMZ ファイルを含む入力データセット。
    • glob (str, 任意): データセット内の KMZ ファイルを識別するために使用されるグロブパターン。デフォルトは *.kmz
  • from transforms.api import transform, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.parsers import kmz_to_dataframe
    
    @geospatial()
    @transform(
        output=Output('/my/output/dataset'),
        raw=Input('/my/input/dataset'),
    )
    def compute(raw, output):
        return output.write_dataframe(
            kmz_to_dataframe(raw)
        )
    

空間関数

geohash_to_geojson()

geohash_to_geojson(geometry)

geohash(lat,long)行を GeoJSON に変換します。

  • パラメーター
    • geometry (str): geohash 行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import geohash_to_geojson
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('geometry', geohash_to_geojson('geohash'))
    

geojson_to_geohash()

geojson_to_geohash(geometry)

ポイント GeoJSON 行を geohash(lat,long)に変換します。

  • パラメーター
    • geometry (str): ポイント GeoJSON ジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import geojson_to_geohash
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('geohash', geojson_to_geohash('geometry'))
    

buffer()

buffer(geometry, meters, metric_crs='EPSG:3395')

GeoJSON を指定した距離でバッファリングします。

  • パラメーター
    • geometry (str): GeoJSON ジオメトリ行の名前。
    • meters (double): メートル単位のバッファー。
    • metric_crs (str, 任意): この投影は中間ステップで使用されます。出力は入力と同じ投影を維持します)。歪みを最小限に抑えるため、目的地域近くを中心にすべきです。デフォルトは EPSG:3395
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import buffer
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('geometry', buffer('geometry', meters=10))
    

convex_hull()

convex_hull(geometry)

GeoJSON 行の凸包を返します。

  • パラメーター
    • geometry (str): GeoJSON ジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import convex_hull
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('convex_hull', convex_hull('geometry'))
    

bounding_box()

bounding_box(geometry)

GeoJSON 行のバウンディングボックスを返します。

  • パラメーター
    • geometry (str): GeoJSON ジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import bounding_box
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('bounding_box', bounding_box('geometry'))
    

bounding_circle()

bounding_circle(geometry, segments=100)

GeoJSON 行のバウンディングサークルを返します。

  • パラメーター
    • geometry (str): GeoJSON ジオメトリ行の名前。
    • segments (int, 任意): 円を構成するラインセグメントの数。デフォルトは 100
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import bounding_circle
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('bounding_circle', bounding_circle('geometry'))
    

simplify()

simplify(geometry, tolerance, metric_crs='EPSG:3395')

GeoJSON 形状の頂点の数を減らします。

  • パラメーター
    • geometry (str): GeoJSON ジオメトリ行の名前。
    • tolerance (double): 新しい頂点が元の形状からどれだけ遠くにあるかの最大距離(メートル)。
    • metric_crs (str, 任意): この投影は中間ステップで使用されます。出力は入力と同じ投影を維持します)。歪みを最小限に抑えるため、目的地域近くを中心にすべきです。デフォルトは EPSG:3395
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import simplify
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('geometry', simplify('geometry', tolerance='10'))
    

start_point()

start_point(geometry)

GeoJSON LineString 行の最初の点を返します。

  • パラメーター
    • geometry (str): GeoJSON ジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import start_point
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('start_point', start_point('geometry'))
    

end_point()

end_point(geometry)

GeoJSON LineString 行の最後の点を返します。

  • パラメーター
    • geometry (str): GeoJSON ジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import end_point
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('end_point', end_point('geometry'))
    

centroid()

centroid(geometry)

GeoJSON 行の重心を返します。

  • パラメーター
    • geometry (str): GeoJSON ジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import centroid
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('centroid', centroid('geometry'))
    

intersection()

intersection(geometry1, geometry2)

2つのGeoJSONの交差する形状を返します。

  • パラメーター
    • geometry1 (str): 最初のGeoJSONジオメトリ行の名前。
    • geometry2 (str): 二番目のGeoJSONジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import intersection
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('intersection', intersection('geometry1', 'geometry2'))
    

difference()

difference(geometry1, geometry2)

geometry1の部分でgeometry2と交差しない部分を返します。

  • パラメーター
    • geometry1 (str): 最初のGeoJSONジオメトリ行の名前。
    • geometry2 (str): 二番目のGeoJSONジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import difference
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('difference', difference('geometry1', 'geometry2'))
    

symmetric_difference()

symmetric_difference(geometry1, geometry2)

geometry1geometry2の重ならない部分を含む形状を返します。

  • パラメーター
    • geometry1 (str): 最初のGeoJSONジオメトリ行の名前。
    • geometry2 (str): 二番目のGeoJSONジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import symmetric_difference
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('symmetric_difference', symmetric_difference('geometry1', 'geometry2'))
    

union()

union(geometry1, geometry2)

2つの形状の結合を返します。

  • パラメーター
    • geometry1 (str): 最初のGeoJSONジオメトリ行の名前。
    • geometry2 (str): 二番目のGeoJSONジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import union
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('union', union('geometry1', 'geometry2'))
    

distance()

distance(geometry1, geometry2, metric_crs='EPSG:3395')

2つのGeoJSONジオメトリ間のユークリッド距離(メートル)を返します。

  • パラメーター
    • geometry1 (str): 最初のGeoJSONジオメトリ行の名前。
    • geometry2 (str): 二番目のGeoJSONジオメトリ行の名前。
    • metric_crs (str, optional): 距離を計算するために使用されるメートル単位のCRS。 最小限の歪みのために、ターゲットエリアの近くに中心化する必要があります。 デフォルトは EPSG:3395
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import distance
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('distance', distance('geometry1', 'geometry2'))
    

length()

length(geometry, metric_crs='EPSG:3395')

GeoJSON形状の長さ/周囲(メートル)を返します。

  • パラメーター
    • geometry (str): GeoJSONジオメトリ行の名前。
    • metric_crs (str, optional): 長さを計算するために使用されるメートル単位のCRS。 最小限の歪みのために、ターゲットエリアの近くに中心化する必要があります。 デフォルトは EPSG:3395
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import length
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('perimeter', length('geometry'))
    

area()

area(geometry, metric_crs='EPSG:3395')

GeoJSONポリゴンの面積(平方メートル)を返します。

  • パラメーター
    • geometry (str): GeoJSONジオメトリ行の名前。
    • metric_crs (str, optional): 面積を計算するために使用されるメートル単位のCRS。 最小限の歪みのために、ターゲットエリアの近くに中心化する必要があります。 デフォルトは EPSG:3395
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import area
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('area', area('geometry'))
    

contains()

contains(geometry1, geometry2)

geometry1geometry2を完全に含む場合はTrueを返します。

  • パラメーター
    • geometry1 (str): プレディケートを定義するGeoJSON行。
    • geometry2 (str): geometry1に対してテストされるGeoJSON行。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import contains
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('geometry1_contains_geometry2', contains('geometry1', 'geometry2'))
    

intersects()

intersects(geometry1, geometry2)

geometry1geometry2と交差する場合はTrueを返します。

  • パラメーター
    • geometry1 (str): 最初のGeoJSONジオメトリ行の名前。
    • geometry2 (str): 二番目のGeoJSONジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import intersects
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.withColumn('geometry1_intersecting_geometry2', intersects('geometry1', 'geometry2'))
    

agg_union()

agg_union(geometry)

グループ内のすべてのジオメトリを結合して作成された形状(集約結合)を返します。

  • パラメーター
    • geometry (str): GeoJSONジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import agg_union
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.groupBy('country').agg(agg_union('geometry').alias('geometry'))
    

agg_intersection()

agg_intersection(geometry)

グループ内のすべてのジオメトリの交差部分で作成された形状(集約交差)を返します。

  • パラメーター
    • geometry (str): GeoJSONジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import agg_intersection
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.groupBy('country').agg(agg_intersection('geometry').alias('geometry'))
    

agg_bounding_box()

agg_bounding_box(geometry)

グループ内のすべてのジオメトリのバウンディングボックス(集約バウンディングボックス)を返します。

  • パラメーター
    • geometry (str): GeoJSONジオメトリ行の名前。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import agg_bounding_box
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return df.groupBy('country').agg(agg_bounding_box('geometry').alias('geometry'))
    

subdivide_explode()

subdivide_explode(df, geometry, max_vertices)

GeoJSON形状をより小さなコンポーネントに分割し、各コンポーネントの行を返します。 非常に複雑な形状を含む行で空間結合を最適化するのに便利です。

  • パラメーター
    • df (PySpark DataFrame): 入力データフレーム。
    • geometry (str): GeoJSONジオメトリ行の名前。
    • max_vertices (int): コンポーネントごとの最大頂点数。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    from geospatial_tools.functions import subdivide_explode
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df=Input('/my/input/dataset'),
    )
    def compute(df):
        return subdivide_explode(df, 'geometry', max_vertices=1000)
    

空間結合

DataFrame.spatial_join()

DataFrame.spatial_join(right_df, on, how='inner', **kwargs)

空間交差を使用して2つのデータフレームを結合します。

  • パラメーター
    • right_df (PySpark DataFrame): 結合の右側。
    • on (tuple<str, str>): (left_geometry_column_name, right_geometry_column_name)のタプル。
    • how (str, optional): 結合タイプ(通常のPySpark結合と同じ結合タイプをサポートします)。 デフォルトは inner
    • library (str, optional): 結合を行うために使用したいライブラリ、h3またはsedona。 デフォルトは h3
    • resolution (int, optional): 結合に使用するH3の解像度(注:これは結果に影響せず、最適化のみに影響します)。 library='sedona'の場合に含まれていると例外が発生します。 含まれていない場合、最適な解像度が推測されます。
    • left_partitions (int, optional): library=sedonaを使用している場合の左側のデータフレームのデフォルトの再分割スキームのオプションの上書き。 H3の場合に含まれていると例外が発生します。
    • right_partitions (int, optional): library=sedonaを使用している場合の右側のデータフレームのデフォルトの再分割スキームのオプションの上書き。 H3を使用している場合に含まれていると例外が発生します。
    • left_pk (str, optional): 結合の左側の主キー行。 設定されていない場合、PKが自動的に生成されます。
    • right_pk (str, optional): 結合の右側の主キー行。 設定されていない場合、PKが自動的に生成されます。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df1=Input('/my/input/dataset1'),
        df2=Input('/my/input/dataset2'),
    )
    def compute(df1, df2):
        return df.spatial_join(df2, ('df1_geometry', 'df2_geometry'), 'left')
    

DataFrame.distance_join()

DataFrame.distance_join(right_df, on, distance_meters, how='inner', metric_crs='EPSG:3395', **kwargs)

2つのデータフレームに距離結合を実行します。

  • パラメーター
    • right_df (PySpark DataFrame): 結合の右側。
    • on (tuple<str, str>): (left_geometry_column_name, right_geometry_column_name)のタプル。
    • distance_meters (double): メートル単位での結合距離。
    • how (str, optional): 結合タイプ(通常のPySpark結合と同じ結合タイプをサポートします)。 デフォルトは inner
    • metric_crs (str, optional): 距離を計算するために使用されるメートル単位のCRS。 最小限の歪みのために、ターゲットエリアの近くに中心化する必要があります。 デフォルトは EPSG:3395
    • left_pk (str, optional): 結合の左側の主キー行。 設定されていない場合、PKが自動的に生成されます。
    • right_pk (str, optional): 結合の右側の主キー行。 設定されていない場合、PKが自動的に生成されます。
    • library (str, optional): 結合を行うために使用したいライブラリ、h3またはsedona。 デフォルトは h3
    • resolution (int, optional): 結合に使用するH3の解像度(注:これは結果に影響せず、最適化のみに影響します)。 library='sedona'の場合に含まれていると例外が発生します。 含まれていない場合、最適な解像度が推測されます。
    • left_partitions (int, optional): library=sedonaを使用している場合の左側のデータフレームのデフォルトの再分割スキームのオプションの上書き。 H3の場合に含まれていると例外が発生します。
    • right_partitions (int, optional): library=sedonaを使用している場合の右側のデータフレームのデフォルトの再分割スキームのオプションの上書き。 H3を使用している場合に含まれていると例外が発生します。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df1=Input('/my/input/dataset1'),
        df2=Input('/my/input/dataset2'),
    )
    def compute(df1, df2):
        return df.distance_join(df2, ('df1_geometry', 'df2_geometry'), 10, 'left')
    

DataFrame.knn_join()

DataFrame.knn_join(right_df, on, k, metric_crs='EPSG:3395', **kwargs)

右側のデータフレームのk-最近傍を左結合します。

  • パラメーター
    • right_df (PySpark DataFrame): 結合の右側。
    • on (tuple<str, str>): (left_geometry_column_name, right_geometry_column_name)のタプル。
    • k (int): 右側のデータフレームからマッチするべきレコードの数、左側のデータフレームの各レコードに対して。
    • metric_crs (str, optional): 距離を計算するために使用されるメートル単位のCRS。 最小限の歪みのために、ターゲットエリアの近くに中心化する必要があります。 デフォルトは EPSG:3395
    • resolution (int, optional): 結合に使用するH3の解像度(注:これは結果に影響せず、最適化のみに影響します)。 含まれていない場合、最適な解像度が推測されます。
    • left_pk (str, optional): 結合の左側の主キー行。 設定されていない場合、PKが自動的に生成されます。
    • right_pk (str, optional): 結合の右側の主キー行。 設定されていない場合、PKが自動的に生成されます。
  • from transforms.api import transform_df, Input, Output
    from geospatial_tools import geospatial
    
    @geospatial()
    @transform_df(
        Output('/my/output/dataset'),
        df1=Input('/my/input/dataset1'),
        df2=Input('/my/input/dataset2'),
    )
    def compute(df1, df2):
        return df.knn_join(df2, ('df1_geometry', 'df2_geometry'), k=1)
    

geopandas_spatial_join()

geopandas_spatial_join(df_left, df_right, geometry_left, geometry_right, how='inner', op='intersects')

2つのGeopandasデータフレームの空間結合を計算します。 Geopandasの'sjoin'メソッドを実装します。 両方のデータフレームがGeoJSONジオメトリ行を含むことを期待しており、その名前は geometry_leftgeometry_right 引数として渡されます。

  • 大規模なデータでは、上記で文書化されている DataFrame.spatial_join 関数を使用してください。
  • パラメーター
    • df_left (pandas.DataFrame): 左側の入力データフレーム。
    • df_right (pandas.DataFrame): 右側の入力データフレーム。
    • geometry_left (str): 左側のデータフレームのジオメトリ行の名前。
    • geometry_right (str): 右側のデータフレームのジオメトリ行の名前。
    • how (str, optional): 結合のタイプ、{left, right, inner}のいずれか。 デフォルトは inner
    • op (str, optional): 結合条件、{intersects, contains, within}のいずれか。 デフォルトは intersects
  • from transforms.api import transform, Input, Output
    from geospatial_tools.spatial_joins import geopandas_spatial_join
    
    @transform(
        output=Output('/my/output/dataset'),
        input_df_left=Input('/my/input/dataset/left'),
        input_df_right=Input('/my/input/dataset/right'),
    )
    def join(ctx, output, input_df_left, input_df_right):
      df_left = input_df_left.dataframe().toPandas()
      df_right = input_df_right.dataframe().toPandas()
      geometry_left = 'geometry'
      geometry_right = 'geometry'
    
      joined = geopandas_spatial_join(
            df_left,
            df_right,
            geometry_left,
            geometry_right,
            how='inner',
            op='intersects'
        )
        joined = ctx.spark_session.createDataFrame(joined)
        output.write_dataframe(joined)
    

ヘルプと貢献

問題やフィードバックを報告するには、Palantirの担当者に連絡してください。