次の方法で共有


geo_polygon_densify()

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft Sentinel

中間点を追加して、ポリゴンまたはマルチポリゴンの平面エッジを測地線に変換します。

構文

geo_polygon_densify(polygon, tolerance, [ preserve_crossing ])

構文規則について詳しく知る。

パラメーター

件名 タイプ Required 説明
polygon dynamic ✔️ GeoJSON 形式の多角形またはマルチポリゴン
tolerance int、long、または real 元の平面エッジと変換された測地エッジ チェーンの間の最大距離をメートル単位で定義します。 サポートされる値の範囲は [0.1, 10000] です。 指定しない場合、既定値は 10 です。
preserve_crossing bool true場合は、タイムリディアン上のエッジ交差を保持します。 指定されない場合は、既定値の false が使用されます。

Polygonの定義

dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})

dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})

  • LinearRingShellは必要であり、座標のcounterclockwise順序付き配列[[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]として定義されます。 シェルは 1 つしか使用できません。
  • LinearRingHoleはオプションであり、座標のclockwise順序付き配列[[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]として定義されます。 任意の数の内部リングとホールを使用できます。
  • LinearRing頂点は、少なくとも3つの座標と異なる必要があります。 最初の座標は、最後の座標と等しくなければなりません。 少なくとも 4 つのエントリが必要です。
  • 座標 [経度,緯度] が有効である必要があります。 経度は[-180, + 180]の範囲の実数である必要があり、緯度は[-90, + 90]の範囲の実数である必要があります。
  • LinearRingShell球の多くても半分を囲みます。 LinearRingは球を2つのリージョンに分割します。 2つのリージョン*のうち、小さい方が選択されます。
  • LinearRingエッジ*の長さは180度未満でなければなりません。 2 つの頂点間の最短のエッジが選択されます。

制約

  • 高密度化されたポリゴン内の点の最大数は10485760に制限されます。
  • 動的形式でのポリゴンの格納にはサイズの制限があります。
  • 有効なポリゴンを高密度化すると、ポリゴンを無効にする可能性があります。 アルゴリズムは、点を不均一に追加し、そのため、エッジが互いに絡み合うようになります。

目的

  • geoJSON 形式 は 2 つの点間のエッジを直線のデカルト線として定義し、 geo_polygon_densify() では geodesic を使用します。
  • 測地線または平面エッジを使用する決定は、データセットによって行われる場合があり、特に長辺に関連します。

返品

GeoJSON 形式および動的データ型の高密度されたポリゴン。 多角形または許容値のいずれかが無効な場合、クエリによって null 結果が生成されます。

Note

地理空間座標は、WGS-84 座標参照系によって表されるものとして解釈されます。

次の例では、マンハッタンセントラルパークのポリゴンが高密度化されます。 エッジは短く、平面エッジと、それに対応する測地線の間の距離は、許容範囲で指定された距離よりも短いです。 そのため、結果は変わりません。

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]})))

出力

densified_polygon
{"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]}

次の例では、ポリゴンの2つのエッジを高密度化します。 高密度化されたエッジの長さは約110km以下です

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]})))

出力

densified_polygon
{"type":"Polygon","coordinates":[[[10,10],[10.25,10],[10.5,10],[10.75,10],[11,10],[11,11],[10.75,11],[10.5,11],[10.25,11],[10,11],[10,10]]]}

次の例では、座標入力が無効なため、null 値の結果が返されます。

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,900],[11,10],[11,11],[10,11],[10,10]]]}))

出力

densified_polygon

次の例では、tolerance の入力が無効であるため、null 値の結果が返されます。

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]}), 0)

出力

densified_polygon