注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
geospatial-tools ライブラリの開発は積極的には行われなくなりました。代わりに、Pipeline Builder を使用して地理空間データを読み込み、加工し、活用してください。このページで説明する地理空間データ型を操作する機能は、Pipeline Builder の地理空間機能に置き換えられました。Pipeline Builder の地理空間機能について詳しくはこちら。
Geospatial Tools は、Foundry のベクター地理空間データパイプラインで一般的な変換を行うための再利用可能なロジックを備えた Python ライブラリです。このライブラリで提供される関数は、Python トランスフォームで使用することを想定しており、これらの一般的な操作をパイプラインのほかのロジックに統合しやすくします。
この機能は、Pipeline Builder の地理空間機能に置き換えられました。geospatial-tools ライブラリは保守されなくなり、期待どおりに動作しない可能性があるため、geospatial-tools ライブラリの代わりに Pipeline Builder を使用してください。
このページのドキュメントは、geospatial-tools ライブラリが正式に非推奨となるまで、参照用として引き続き利用可能です。
現在、このライブラリには次の用途のヘルパー関数が含まれています。
geospatial-tools ライブラリの開発は積極的には行われなくなりました。代わりに Pipeline Builder を使用してください。
geospatial-tools と Spark プロファイル GEOSPARK を Python リポジトリにインポートします。インストールにサポートが必要な場合は、Palantir の担当者にお問い合わせください。
非表示のファイルとフォルダーの表示を切り替え、/transforms-python/build.gradle の末尾に次のブロックを追加します。
dependencies {
condaJars "org.apache.sedona:sedona-spark-shaded-3.5_2.13:1.7.1"
condaJars "org.datasyslab:geotools-wrapper:1.7.0-28.5"
}
geospatial-tools ライブラリを使用するすべてのトランスフォームでは、@geospatial() デコレーターを使用する必要があります(@transform_df() や @configure() など、ほかのすべてのデコレーターより上に配置します)。これにより、Spark 環境内で Apache Sedona が有効になり、PySpark DataFrame で空間結合を行うためのバインディングが追加されます。
Copied!1 2 3 4 5 6 7 8from transforms.api import transform_df, configure, Input, Output from geospatial_tools import geospatial @geospatial() @configure(...) @transform_df(...) def compute(input_df): ...
Foundry でクレンジングされた地理空間データは、次の条件を満たします。
座標参照系とデータを揃える方法については、座標参照系と投影法を参照してください。
geospatial-tools ライブラリは、手順(2)と(3)を実行するための clean_geometry() と lat_long_to_geometry() を提供しています。生データが GeoJSON、Shapefile、GDB、KML、または KMZ の場合は、組み込みのパース用ヘルパー関数を使用して手順(1)を実行できます。
clean_geometry(geometry, input_crs, geometry_format='geojson', lat_long=False, output_format='geojson')
地理空間ジオメトリ列を有効な状態にし、座標参照系を EPSG:4326 に正規化することで、列をクレンジングします。
geometry(str):入力ジオメトリ列の名前。input_crs(str):入力ジオメトリの座標参照系。geometry_format(str、任意):入力ジオメトリの形式。サポートされる形式は、geojson、geohash(latitude,longitude を含む文字列)、wkt、および wkb です。デフォルトは geojson です。lat_long(bool、任意):入力ジオメトリの座標が latitude,longitude の順に並んでいる場合は True。この順序は geohash 入力ではよく見られますが、geojson や wkt では一般的ではありません。デフォルトは False です。output_format(str、任意):出力ジオメトリの形式(geojson または geohash)。デフォルトは geojson です。Copied!1 2 3 4 5 6 7 8 9 10 11 12from 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, input_crs, output_format='geojson')
緯度列と経度列を、クレンジング済みのジオメトリ列に変換します。
lat(str):入力緯度列の名前。long(str):入力経度列の名前。input_crs(str):入力ジオメトリの座標参照系。output_format(str、任意):出力ジオメトリの形式(geojson または geohash)。デフォルトは geojson です。Copied!1 2 3 4 5 6 7 8 9 10 11 12from 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(dataset, properties=None, glob='*.geojson', batch_size=100000)
GeoJSON ファイルをデータフレームに変換します。ストリーム処理を使用することで、ドライバーのメモリー不足を起こさずに非常に大きなファイルを処理します。
dataset(transforms.api.Input):GeoJSON ファイルを含む入力データセット。properties(list[str]、任意):列を作成するプロパティのリスト。値を指定しない場合は、すべてのプロパティが JSON の「properties」列に含まれます。glob(str、任意):データセット内の GeoJSON ファイルを識別するために使用する glob パターン。デフォルトは *.geojson です。batch_size(int、任意):バッチごとに処理するレコード数。ドライバーのメモリーが不足する場合は、バッチサイズを小さくしてください。デフォルトは100000です。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13from 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(dataset, glob='*.shp')
Shapefile をデータフレームに変換します。
dataset(transforms.api.Input):Shapefile を含む入力データセット。glob(str、任意):データセット内の .shp ファイルを識別するために使用する glob パターン。.shp、.shx、.dbf など、関連するほかのファイルも存在することを前提としています。デフォルトは *.shp です。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13from 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(dataset, glob='*.gdb.zip', layer=None)
GeoDatabase ファイルをデータフレームに変換します。
dataset(transforms.api.Input):ZIP 圧縮された GDB ファイルを含む入力データセット。glob(str、任意):データセット内の GDB ファイルを識別するために使用する glob パターン。デフォルトは *.gdb.zip です。layer(str、任意):読み込む特定のレイヤー。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13from 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(dataset, glob='*.kml')
KML ファイルをデータフレームに変換します。
dataset(transforms.api.Input):KML ファイルを含む入力データセット。glob(str、任意):データセット内の KML ファイルを識別するために使用する glob パターン。デフォルトは *.kml です。drop_invalid_layers(bool、任意):デフォルトは false です。true に設定すると、KML ファイル内の空のレイヤーまたはパースできないレイヤーが、通知なしで削除されます。それ以外の場合は、エラーが発生します。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13from 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(dataset, glob='*.kmz')
KMZ ファイルをデータフレームに変換します。
dataset(transforms.api.Input):KMZ ファイルを含む入力データセット。glob(str、任意):データセット内の KMZ ファイルを識別するために使用する glob パターン。デフォルトは *.kmz です。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13from 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(geometry)
geohash(lat,long)列を GeoJSON に変換します。
geometry (str):geohash 列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry)
点の GeoJSON 列を geohash(lat,long)に変換します。
geometry (str):点の GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry, meters, metric_crs='EPSG:3395')
指定した距離で GeoJSON のバッファーを作成します。
geometry (str):GeoJSON ジオメトリ列の名前。meters (double):バッファーの距離(メートル)。metric_crs (str、任意):変換とバッファーの作成に使用するメートル単位の座標参照系(CRS)(注:この投影法は中間ステップで使用されます。出力は入力と同じ投影法を維持します)。歪みを最小限に抑えるため、中心が対象領域の近くにあるものを使用してください。デフォルトは EPSG:3395 です。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry)
GeoJSON 列の凸包を返します。
geometry (str):GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry)
GeoJSON 列の境界ボックスを返します。
geometry (str):GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry, segments=100)
GeoJSON 列の境界円を返します。
geometry (str):GeoJSON ジオメトリ列の名前。segments (int、任意):円を構成する線分の数。デフォルトは 100 です。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry, tolerance, metric_crs='EPSG:3395')
GeoJSON 図形の頂点数を減らします。
geometry (str):GeoJSON ジオメトリ列の名前。tolerance (double):新しい頂点が元の図形から離れることのできる最大距離(メートル)。metric_crs (str、任意):許容誤差の計算に使用するメートル単位の座標参照系(注:この投影法は中間ステップで使用されます。出力は入力と同じ投影法を維持します)。歪みを最小限に抑えるため、中心が対象領域の近くにあるものを使用してください。デフォルトは EPSG:3395 です。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry)
GeoJSON LineString 列の最初の点を返します。
geometry (str):GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry)
GeoJSON LineString 列の最後の点を返します。
geometry (str):GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry)
GeoJSON 列の重心を返します。
geometry (str):GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry1, geometry2)
2つの GeoJSON の積集合となる図形を返します。
geometry1 (str):1つ目の GeoJSON ジオメトリ列の名前。geometry2 (str):2つ目の GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry1, geometry2)
geometry1 のうち、geometry2 と重ならない部分を返します。
geometry1 (str):1つ目の GeoJSON ジオメトリ列の名前。geometry2 (str):2つ目の GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry1, geometry2)
geometry1 と geometry2 の重ならない部分を含む図形を返します。
geometry1 (str):1つ目の GeoJSON ジオメトリ列の名前。geometry2 (str):2つ目の GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry1, geometry2)
2つの図形の和集合を返します。
geometry1 (str):1つ目の GeoJSON ジオメトリ列の名前。geometry2 (str):2つ目の GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry1, geometry2, metric_crs='EPSG:3395')
2つの GeoJSON ジオメトリ間のユークリッド距離をメートル単位で返します。
geometry1 (str):1つ目の GeoJSON ジオメトリ列の名前。geometry2 (str):2つ目の GeoJSON ジオメトリ列の名前。metric_crs (str、任意):距離の計算に使用するメートル単位の座標参照系。歪みを最小限に抑えるため、中心が対象領域の近くにあるものを使用してください。デフォルトは EPSG:3395 です。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry, metric_crs='EPSG:3395')
GeoJSON 図形の長さまたは周長をメートル単位で返します。
geometry (str):GeoJSON ジオメトリ列の名前。metric_crs (str、任意):長さの計算に使用するメートル単位の座標参照系。歪みを最小限に抑えるため、中心が対象領域の近くにあるものを使用してください。デフォルトは EPSG:3395 です。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry, metric_crs='EPSG:3395')
GeoJSON ポリゴンの面積を平方メートル単位で返します。
geometry (str):GeoJSON ジオメトリ列の名前。metric_crs (str、任意):面積の計算に使用するメートル単位の座標参照系。歪みを最小限に抑えるため、中心が対象領域の近くにあるものを使用してください。デフォルトは EPSG:3395 です。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry1, geometry2)
geometry1 が geometry2 を完全に含む場合に True を返します。
geometry1 (str):述語を定義する GeoJSON 列。geometry2 (str):geometry1 に対して判定する GeoJSON 列。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry1, geometry2)
geometry1 が geometry2 と交差する場合に True を返します。
geometry1 (str):1つ目の GeoJSON ジオメトリ列の名前。geometry2 (str):2つ目の GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry)
グループ内のすべてのジオメトリの和集合から作成した図形(集計和集合)を返します。
geometry (str):GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry)
グループ内のすべてのジオメトリの積集合から作成した図形(集計積集合)を返します。
geometry (str):GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(geometry)
グループ内のすべてのジオメトリの境界ボックス(集計境界ボックス)を返します。
geometry (str):GeoJSON ジオメトリ列の名前。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(df, geometry, max_vertices)
GeoJSON 図形をより小さな構成要素に分割し、構成要素ごとに1行を返します。非常に複雑な図形を含む列での空間結合の最適化に役立ちます。
df (PySpark DataFrame):入力データフレーム。geometry (str):GeoJSON ジオメトリ列の名前。max_vertices (int):構成要素あたりの最大頂点数。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(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、任意):結合の種類です(通常の PySpark の結合と同じ種類の結合をサポートします)。デフォルトは inner です。library (str、任意):結合に使用するライブラリに応じて、h3 または sedona を指定します。デフォルトは h3 です。resolution (int、任意):結合に使用する H3 の解像度です(注:結果には影響せず、最適化にのみ影響します)。library='sedona' の場合に指定すると、例外が発生します。指定しない場合は、最適と推定される解像度が使用されます。left_partitions (int、任意):library=sedona を使用する場合に、左側のデータフレームのデフォルトの再パーティショニング方式を任意でオーバーライドします。H3 を使用する場合に指定すると、例外が発生します。right_partitions (int、任意):library=sedona を使用する場合に、右側のデータフレームのデフォルトの再パーティショニング方式を任意でオーバーライドします。H3 を使用する場合に指定すると、例外が発生します。left_pk (str、任意):結合の左側の主キー列です。設定しない場合は、主キーが自動的に生成されます。right_pk (str、任意):結合の右側の主キー列です。設定しない場合は、主キーが自動的に生成されます。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(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、任意):結合の種類です(通常の PySpark の結合と同じ種類の結合をサポートします)。デフォルトは inner です。metric_crs (str、任意):距離の計算に使用する、メートル単位の座標参照系(CRS)です。歪みを最小限に抑えるため、対象エリアの近くを中心にする必要があります。デフォルトは EPSG:3395 です。left_pk (str、任意):結合の左側の主キー列です。設定しない場合は、主キーが自動的に生成されます。right_pk (str、任意):結合の右側の主キー列です。設定しない場合は、主キーが自動的に生成されます。library (str、任意):結合に使用するライブラリに応じて、h3 または sedona を指定します。デフォルトは h3 です。resolution (int、任意):結合に使用する H3 の解像度です(注:結果には影響せず、最適化にのみ影響します)。library='sedona' の場合に指定すると、例外が発生します。指定しない場合は、最適と推定される解像度が使用されます。left_partitions (int、任意):library=sedona を使用する場合に、左側のデータフレームのデフォルトの再パーティショニング方式を任意でオーバーライドします。H3 を使用する場合に指定すると、例外が発生します。right_partitions (int、任意):library=sedona を使用する場合に、右側のデータフレームのデフォルトの再パーティショニング方式を任意でオーバーライドします。H3 を使用する場合に指定すると、例外が発生します。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(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、任意):距離の計算に使用する、メートル単位の座標参照系です。歪みを最小限に抑えるため、対象エリアの近くを中心にする必要があります。デフォルトは EPSG:3395 です。resolution (int、任意):結合に使用する H3 の解像度です(注:結果には影響せず、最適化にのみ影響します)。指定しない場合は、最適と推定される解像度が使用されます。left_pk (str、任意):結合の左側の主キー列です。設定しない場合は、主キーが自動的に生成されます。right_pk (str、任意):結合の右側の主キー列です。設定しない場合は、主キーが自動的に生成されます。Copied!1 2 3 4 5 6 7 8 9 10 11from 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(df_left, df_right, geometry_left, geometry_right, how='inner', op='intersects')
2つの Geopandas データフレームの空間結合を計算します。Geopandas の「sjoin」メソッドを実装しています。両方のデータフレームに GeoJSON ジオメトリ列が含まれていることを前提とし、その列名を geometry_left および geometry_right 引数として渡します。
DataFrame.spatial_join 関数を使用します。df_left (pandas.DataFrame ↗):左側の入力データフレームです。df_right (pandas.DataFrame ↗):右側の入力データフレームです。geometry_left (str):左側のデータフレームのジオメトリ列の名前です。geometry_right (str):右側のデータフレームのジオメトリ列の名前です。how (str、任意):結合の種類です。{left, right, inner} のいずれかを指定します。デフォルトは inner です。op (str、任意):結合条件です。{intersects, contains, within} のいずれかを指定します。デフォルトは intersects です。Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24from 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 の担当者にお問い合わせください。