注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Pipeline Builderアプリケーションを使用して、コードを書くことなく、地理空間データを読み込み、変換し、操作することができます。 Pipeline Builderの地理空間スイートは、以下で説明するGeospatial Tools Pythonライブラリとほぼ同等の機能を持っています。Pipeline Builderの地理空間機能について詳しく学ぶ。
Geospatial Toolsは、Foundryのベクトル地理空間データパイプラインで一般的な変換を行うための再利用可能なロジックをホスティングするPythonライブラリです。 このライブラリで提供される関数は、これらの一般的な操作をパイプラインロジックの残りの部分との統合を合理化するために、Pythonトランスフォームで使用することを目的としています。
現在、ライブラリには次のようなヘルパー関数が含まれています:
Pythonリポジトリにgeospatial-tools
とSparkプロファイル 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 でのクリーンな地理空間データは以下の通りです:
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')
地理空間ジオメトリ行を有効にし、CRS を EPSG:4326 に正規化することでクリーニングします。
geometry
(str
): 入力ジオメトリ行の名前。input_crs
(str
): 入力ジオメトリ CRS。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
。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, 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(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(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(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(dataset, glob='*.kml')
KML ファイルをデータフレームに変換します。
dataset
(transforms.api.Input
): KML ファイルを含む入力データセット。glob
(str
, 任意): データセット内の KML ファイルを識別するために使用されるグロブパターン。デフォルトは *.kml
。drop_invalid_layers
(bool
, 任意): デフォルトは false
。true
に設定すると、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(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(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(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(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(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(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(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(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(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(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(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(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(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(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 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
): 最初の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(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(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(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(geometry1, geometry2)
geometry1
がgeometry2
を完全に含む場合は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(geometry1, geometry2)
geometry1
がgeometry2
と交差する場合は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(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(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(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(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(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(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(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(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
, 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の担当者に連絡してください。