ポリゴンの単純化 (Simplify Polygon) (カートグラフィ)

サマリー

基本的な形状を維持しながら、相対的に不要な頂点を取り除くことによってポリゴン フィーチャを単純化します。

[ポリゴンの単純化 (Simplify Polygon)] ツールのアルゴリズム オプションの例
ここでは、比較のために、単純化アルゴリズムの結果の例を示しています。

使用法

  • このツールでは、次のように、それぞれの目的に応じた異なる単純化アルゴリズムを使用します。 このアルゴリズムの詳細については、「ラインの単純化 (Simplify Line) とポリゴンの単純化 (Simplify Polygon) の詳細」をご参照ください。

    • [重要なポイントを保持 (Douglas-Peucker)] アルゴリズム (Python の algorithm = "POINT_REMOVE") - 相対的に不要な頂点を識別して削除し、より小さな縮尺で表示できるようにデータを単純化します。 これは、このツールの単純化アルゴリズムのうちで最も高速です。 このアルゴリズムは、多くの場合、データ圧縮または大まかな単純化のために使用されます。 結果として生成されるポリゴンのアウトラインの鋭角は、許容値が大きくなるにつれ大幅に鋭くなります。 このアルゴリズムは、David Douglas と Thomas Peucker 共著「Algorithms for the reduction of the number of points required to represent a digitized line or its caricature」(『The Canadian Cartographer』10(2)、112-122 (1973)) による Douglas-Peucker アルゴリズムをベースとしています。
    • [重要な屈曲を保持 (Wang-Müller)] アルゴリズム (Python の algorithm = "BEND_SIMPLIFY") - 相対的に意味のない屈曲を識別して削除し、より小さな縮尺で表示できるようにデータを単純化します。 これは、一般に、[重要なポイントを保持 (Douglas-Peucker)] アルゴリズムと比べて、入力ジオメトリに対してより正確な結果を生成しますが、処理により多くの時間がかかることがあります。 このアルゴリムは、Zeshen Wang と Jean-Claude Müller 共著「Line Generalization Based on Analysis of Shape Characteristics」(『Cartography and Geographic Information Systems』25(1)、3–15 (1998)) で定義されたアルゴリズムをベースとしています。
    • [加重エリアの保持 (Zhou-Jones)] アルゴリズム (Python の algorithm = "WEIGHTED_AREA") - 最初に各頂点の有効エリアである三角形を識別する仕組みになっています。 次に、各エリアの平坦度、歪度、凸性を比較するために、これらの三角形が一連のメトリクスによって重み付けされます。 加重エリアを参考にしてそれらに対応する頂点を削除することで、可能な限り特徴を維持しながら、ポリゴンのアウトラインを単純化します。 このアルゴリズムは、Sheng Zhou と Christopher B. Jones 共著 「Shape-Aware Line Generalisation with Weighted Effective Area」(Fisher, Peter F. (Ed.) 『Developments in Spatial Handling 11th International Symposium on Spatial Handling』369–80 (2005)) で定義されたアルゴリズムをベースとしています。
    • [有効エリアを保持 (Visvalingam-Whyatt)] アルゴリズム (Python の algorithm = "EFFECTIVE_AREA") - 頂点を削除することで、可能な限り特徴を維持しながら、ポリゴンのアウトラインを単純化するために、各頂点の有効エリアである三角形を識別します。 このアルゴリズムは、M. Visvalingam と J. D. Whyatt 共著 「Line Generalisation by Repeated Elimination of the Smallest Area」(『Cartographic Information Systems Research Group (CISRG) Discussion Paper 10』The University of Hull (1992)) で定義されたアルゴリズムをベースとしています。

  • [単純化の許容値] パラメーターの値は、単純化の度合いを決定します。 許容値が大きくなるほど、生成されるジオメトリが粗大化します。 許容値が小さくなるほど、入力をより正確に表すジオメトリが生成されます。 MinSimpTol フィールドと MaxSimpTol フィールドが、使用された許容値を格納するために出力に追加されます。

    • [重要なポイントを保持 (Douglas-Peucker)] アルゴリズムの場合、許容値は、各頂点と新規作成されたラインとの間の最大許容垂直距離を示します。
    • [重要な屈曲を保持 (Wang-Müller)] アルゴリズムの場合、許容値は、有意な屈曲に近似する円の半径を示します。
    • [加重エリアを保持 (Zhou-Jones)] アルゴリズムの場合、許容値の二乗は、3 つの隣接する頂点によって定義される有意な三角形の面積を示します。 三角形が正三角形から逸脱するほど、与えられる重み付けが大きくなり、削除される可能性が低くなります。
    • [有効エリアを保持 (Visvalingam-Whyatt)] アルゴリズムの場合、許容値の二乗は、3 つの隣接する頂点によって定義される有意な三角形の面積を示します。

  • [最小エリア] パラメーター値よりも小さいポリゴンはすべて、出力フィーチャクラスから削除されます。 共通のエッジを共有する一連の隣接ポリゴンの場合、最小エリアは、そのすべてのポリゴンの合計面積に適用されます。 [長さゼロのラインをポイントとして保持] パラメーターを使用すると、削除されたポリゴンのレコードをポイント フィーチャとして保持できます。

  • マルチパート ポリゴンは、個別のパートとして単純化することができます。

  • [長さゼロのラインをポイントとして保持] パラメーター (Python の collapsed_point_option) を使用すると、最小エリアより小さいという理由で削除されるすべてのポリゴンを表すポイントを格納するための出力ポイント フィーチャクラスを作成できます。 [出力フィーチャクラス] パラメーター値 (Python の out_feature_class) と同じ名前と場所を接尾辞 _Pnt とともに使用して、出力ポイントが生成されます。 出力ポリゴン フィーチャクラスには、入力フィーチャクラスにあるすべてのフィールドが含まれています。 出力ポイント フィーチャクラスには、これらのフィールドは含まれません。

  • 出力ポリゴン フィーチャクラスはトポロジ的に正確であるため、 入力データに含まれるトポロジ エラーはすべて、出力ポリゴン フィーチャクラスでフラグ付けされます。 出力フィーチャクラスには、入力フィーチャ ID と入力のトポロジ エラーまたは不整合がそれぞれ格納される InPoly_FIDSimPgnFlag という 2 つのフィールドが追加されます。

    SimPgnFlag フィールドの値は次のとおりです。

    • SimPgnFlag = 0 は、エラーがないことを示します。
    • SimPgnFlag = 1 は、トポロジ エラーがあることを示します。
    • SimPgnFlag = 2 は、パーティションで分割されたフィーチャを示します。これらのフィーチャは、単純化の後で最小エリアより小さくなります。 分割されたフィーチャの一部分だけにフラグが表示されることがあります。 これらのフィーチャはすべて出力フィーチャクラス内に保持されます。 この状況は、[カートグラフィック パーティション] 環境設定を使用している場合にのみ発生します。
    レガシー:

    このツールの前のバージョンでは、処理中にトポロジ エラーが生成されることがありました。 [トポロジ エラーの処理] (Python の error_option) パラメーターは、スクリプトとモデルでの互換性を保つために引き続きこのツールの構文に含まれていますが、現在では無視され、ツールのダイアログ ボックスで非表示になっています。

    SimPgnFlag フィールドは、処理中にこのツールによって生成されたトポロジ エラーに出力フィーチャクラスでフラグを付けるために使用されていました。 現在、このフィールドは、入力内に存在するエラーにフラグを付けるために使用されます。 このツールの前のバージョンでは、トポロジの解決過程で、フィーチャ単位で許容値が変更され、それらの値が MinSimpTol フィールドと MaxSimpTol フィールドに格納されていました。 現在の実装では、これらのフィールドの値は、[単純化の許容値] パラメーターに指定された許容値と同じままになります。 これらのフィールドのいずれかに依存する既存のモデルまたはスクリプトを必ず変更してください。

  • [入力バリア レイヤー] パラメーターは、単純化されたポリゴンが横切ることを許可されないフィーチャを識別するために使用します。 バリア フィーチャには、ポイント、ライン、ポリゴンのいずれかを指定できます。

  • フィールド ドメイン、サブタイプ、属性ルールの転送環境がオンでない場合でも、ドメインとサブタイプは出力にコピーされます。

  • 大きなデータセットを処理する場合は、メモリの制限を超えることがあります。 このような場合、[カートグラフィック パーティション] 環境設定で、関連するポリゴン フィーチャクラスを特定することによって、パーティション単位で入力データを処理することを検討します。 パーティションの境界によって定義されたデータの一部が順次処理されます。 結果の出力フィーチャクラスは、パーティション エッジにおいてシームレスで一致した形状になります。 詳細については、「パーティションを使用した大きなデータセットのジェネラライズ」をご参照ください。

パラメーター

ラベル説明データ タイプ
入力フィーチャ

単純化する入力ポリゴン フィーチャ。

Feature Layer
出力フィーチャクラス

単純化された出力ポリゴン フィーチャクラス。 入力フィーチャクラスに存在するすべてのフィールドが含まれます。 出力ポリゴン フィーチャクラスはトポロジ的に正確であるため、 このツールでトポロジ エラーが生成されることはありません。ただし、入力データに含まれるトポロジ エラーは、出力ポリゴン フィーチャクラスでフラグが付けられます。

出力フィーチャクラスには、入力フィーチャ ID と入力のトポロジ エラーまたは不整合がそれぞれ格納される InPoly_FIDSimPgnFlag という 2 つのフィールドが追加されます。

SimPgnFlag 属性の値は次のとおりです。

  • SimPgnFlag = 0 は、エラーがないことを示します。
  • SimPgnFlag = 1 は、トポロジ エラーがあることを示します。
  • SimPgnFlag = 2 は、パーティションで分割されたフィーチャを示します。これらのフィーチャは、単純化の後で最小エリアより小さくなります。 分割されたフィーチャの一部分だけにフラグが表示されることがあります。 これらのフィーチャはすべて出力フィーチャクラス内に保持されます。 この状況は、[カートグラフィック パーティション] 環境設定を使用している場合にのみ発生します。

Feature Class
単純化のアルゴリズム

ポリゴンの単純化アルゴリズムを指定します。

  • 重要なポイントを保持 (Douglas-Peucker)ポリゴンのアウトラインの基本的な形状を保つ重要なポイントを保持し、他のすべてのポイントを削除します (Douglas-Peucker)。 これがデフォルトです。
  • 重要な屈曲を保持 (Wang-Müller)重要な屈曲を保持し、不要な屈曲をラインから削除します (Wang-Müller)。
  • 加重有効エリアを保持 (Zhou-Jones)三角形で重み付けされた有効エリアである三角形を形成する頂点を保持します (Zhou-Jones)。
  • 有効エリアを保持 (Visvalingam-Whyatt)有効エリアである三角形を形成する頂点を保持します (Visvalingam-Whyatt)。
String
単純化許容値

この許容値は単純化の度合いを決定します。 単位は自由に選択できます。選択しない場合、入力の単位が使用されます。 MinSimpTol フィールドと MaxSimpTol フィールドの両方が、処理が行われたときに使用された許容値を格納するために出力に追加されます。

  • [重要なポイントを保持 (Douglas-Peucker)] アルゴリズムの場合、許容値は、各頂点と新規作成されたラインとの間の最大許容垂直距離を示します。
  • [重要な屈曲を保持 (Wang-Müller)] アルゴリズムの場合、許容値は、有意な屈曲に近似する円の半径を示します。
  • [加重エリアを保持 (Zhou-Jones)] アルゴリズムの場合、許容値の二乗は、3 つの隣接する頂点によって定義される有意な三角形の面積を示します。 三角形が正三角形から逸脱するほど、与えられる重み付けが大きくなり、削除される可能性が低くなります。
  • [有効エリアを保持 (Visvalingam-Whyatt)] アルゴリズムの場合、許容値の二乗は、3 つの隣接する頂点によって定義される有意な三角形の面積を示します。
Linear Unit
最小エリア
(オプション)

ポリゴンを保持するための最小エリア。 デフォルト値は 0 であり、すべてのポリゴンが保持されます。 指定した値の単位は自由に選択できます。選択しない場合、入力の単位が使用されます。

Areal Unit
トポロジ エラーの処理
(オプション)
レガシー:

これは、現在使用されていない従来のパラメーターです。 以前は、処理中に生成された可能性のあるトポロジ エラーの処理方法を指定するために使用されていました。 このパラメーターは、スクリプトとモデルでの互換性を保つために引き続きこのツールの構文に含まれていますが、ツールのダイアログ ボックスで非表示になっています。

String
長さゼロのラインをポイントとして保持
(オプション)

[最小エリア] パラメーター値よりも小さいという理由で削除されたポリゴンの中心を格納するための出力ポイント フィーチャクラスを作成するかどうかを指定します。 [出力フィーチャクラス] パラメーターと同じ名前と場所を接尾辞 _Pnt とともに使用して、出力ポイントが生成されます。

  • オン - 最小エリアよりも小さいという理由で削除されたポリゴンの中心を格納するための派生した出力ポイント フィーチャクラスを作成します。 これがデフォルトです。
  • オフ - 派生した出力ポイント フィーチャクラスを作成しません。
Boolean
入力バリア レイヤー
(オプション)

単純化の際にバリアとしての役割を果たすフィーチャを含む入力。 単純化された結果のポリゴンはバリア フィーチャに接したり、バリア フィーチャを横切ったりしません。 たとえば、森林地帯を単純化する場合、単純化された結果の森林ポリゴンは、バリアとして定義された道路フィーチャを横切りません。

Feature Layer

派生した出力

ラベル説明データ タイプ
面積ゼロに単純化されたポリゴン

[長さゼロのラインをポイントとして保持] パラメーター (Python の collapsed_point_option) を使用すると、最小エリアより小さいという理由で削除されたポリゴンを表すポイントを格納するための出力ポイント フィーチャクラスが作成されます。

Feature Class

arcpy.cartography.SimplifyPolygon(in_features, out_feature_class, algorithm, tolerance, {minimum_area}, {error_option}, {collapsed_point_option}, {in_barriers})
名前説明データ タイプ
in_features

単純化する入力ポリゴン フィーチャ。

Feature Layer
out_feature_class

単純化された出力ポリゴン フィーチャクラス。 入力フィーチャクラスに存在するすべてのフィールドが含まれます。 出力ポリゴン フィーチャクラスはトポロジ的に正確であるため、 このツールでトポロジ エラーが生成されることはありません。ただし、入力データに含まれるトポロジ エラーは、出力ポリゴン フィーチャクラスでフラグが付けられます。

出力フィーチャクラスには、入力フィーチャ ID と入力のトポロジ エラーまたは不整合がそれぞれ格納される InPoly_FIDSimPgnFlag という 2 つのフィールドが追加されます。

SimPgnFlag 属性の値は次のとおりです。

  • SimPgnFlag = 0 は、エラーがないことを示します。
  • SimPgnFlag = 1 は、トポロジ エラーがあることを示します。
  • SimPgnFlag = 2 は、パーティションで分割されたフィーチャを示します。これらのフィーチャは、単純化の後で最小エリアより小さくなります。 分割されたフィーチャの一部分だけにフラグが表示されることがあります。 これらのフィーチャはすべて出力フィーチャクラス内に保持されます。 この状況は、[カートグラフィック パーティション] 環境設定を使用している場合にのみ発生します。

Feature Class
algorithm

ポリゴンの単純化アルゴリズムを指定します。

  • POINT_REMOVEポリゴンのアウトラインの基本的な形状を保つ重要なポイントを保持し、他のすべてのポイントを削除します (Douglas-Peucker)。 これがデフォルトです。
  • BEND_SIMPLIFY重要な屈曲を保持し、不要な屈曲をラインから削除します (Wang-Müller)。
  • WEIGHTED_AREA三角形で重み付けされた有効エリアである三角形を形成する頂点を保持します (Zhou-Jones)。
  • EFFECTIVE_AREA有効エリアである三角形を形成する頂点を保持します (Visvalingam-Whyatt)。
String
tolerance

この許容値は単純化の度合いを決定します。 単位は自由に選択できます。選択しない場合、入力の単位が使用されます。 MinSimpTol フィールドと MaxSimpTol フィールドの両方が、処理が行われたときに使用された許容値を格納するために出力に追加されます。

  • POINT_REMOVE アルゴリズムの場合、許容値は、各頂点と新規作成されたラインとの間の最大許容垂直距離を示します。
  • BEND_SIMPLIFY アルゴリズムの場合、許容値は、有意な屈曲に近似する円の半径を意味します。
  • WEIGHTED_AREA アルゴリズムの場合、許容値の二乗は、3 つの隣接する頂点によって定義される有意な三角形の面積を示します。 三角形が正三角形から逸脱するほど、与えられる重み付けが大きくなり、削除される可能性が低くなります。
  • EFFECTIVE_AREA アルゴリズムの場合、許容値の二乗は、3 つの隣接する頂点によって定義される有意な三角形の面積を示します。
Linear Unit
minimum_area
(オプション)

ポリゴンを保持するための最小エリア。 デフォルト値は 0 であり、すべてのポリゴンが保持されます。 指定した値の単位は自由に選択できます。選択しない場合、入力の単位が使用されます。

Areal Unit
error_option
(オプション)
レガシー:

これは、現在使用されていない従来のパラメーターです。 以前は、処理中に生成された可能性のあるトポロジ エラーの処理方法を指定するために使用されていました。 このパラメーターは、スクリプトとモデルでの互換性を保つために引き続きこのツールの構文に含まれていますが、ツールのダイアログ ボックスで非表示になっています。

String
collapsed_point_option
(オプション)

minimum_area パラメーター値よりも小さいという理由で削除されたポリゴンの中心を格納するための出力ポイント フィーチャクラスを作成するかどうかを指定します。 out_feature_class パラメーターに指定したポリゴン出力フィーチャクラスと同じ名前と場所を接尾辞 _Pnt とともに使用して、出力ポイントが生成されます。

  • KEEP_COLLAPSED_POINTS最小エリアよりも小さいという理由で削除されたポリゴンの中心を格納するための派生した出力ポイント フィーチャクラスを作成します。 これがデフォルトです。
  • NO_KEEP派生した出力ポイント フィーチャクラスを作成しません。
Boolean
in_barriers
[in_barriers,...]
(オプション)

単純化の際にバリアとしての役割を果たすフィーチャを含む入力。 単純化された結果のポリゴンはバリア フィーチャに接したり、バリア フィーチャを横切ったりしません。 たとえば、森林地帯を単純化する場合、単純化された結果の森林ポリゴンは、バリアとして定義された道路フィーチャを横切りません。

Feature Layer

派生した出力

名前説明データ タイプ
out_point_feature_class

[長さゼロのラインをポイントとして保持] パラメーター (Python の collapsed_point_option) を使用すると、最小エリアより小さいという理由で削除されたポリゴンを表すポイントを格納するための出力ポイント フィーチャクラスが作成されます。

Feature Class

コードのサンプル

SimplifyPolygon (ポリゴンの単純化) の例 1 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、イミディエイト モードで SimplifyPolygon 関数を使用する方法を示しています。

import arcpy
import arcpy.cartography as CA
arcpy.env.workspace = "C:/data"
CA.SimplifyPolygon("soils.shp", "C:/output/output.gdb/simplified_soils", "POINT_REMOVE", 100)
SimplifyPolygon (ポリゴンの単純化) の例 2 (スタンドアロン スクリプト)

次のスタンドアロン スクリプトで、SimplifyPolygon 関数を使用する方法を示します。

# Name: SimplifyPolygon_Example2.py
# Description: Eliminate small islands before simplifying and smoothing lake 
#              boundaries.

# Import system modules
import arcpy
import arcpy.management as DM
import arcpy.cartography as CA
 
# Set environment settings
arcpy.env.workspace = "C:/data/Portland.gdb/Hydrography"
 
# Set local variables
inLakeFeatures = "lakes"
eliminatedFeatures = "C:/data/PortlandOutput.gdb/lakes_eliminated"
simplifiedFeatures = "C:/data/PortlandOutput.gdb/lakes_simplified"
smoothedFeatures = "C:/data/PortlandOutput.gdb/lakes_smoothed"

# Eliminate small islands in lake polygons.
DM.EliminatePolygonPart(inLakeFeatures, eliminatedFeatures, 100, "OR", 0, 
                        "CONTAINED_ONLY")
 
# Simplify lake polygons
CA.SimplifyPolygon(eliminatedFeatures, simplifiedFeatures, "POINT_REMOVE", 50, 
                   200, "#", "KEEP_COLLAPSED_POINTS")

# Smooth lake polygons
CA.SmoothPolygon(simplifiedFeatures, smoothedFeatures, "PAEK", 100, 
                 "FLAG_ERRORS")

ライセンス情報

  • Basic: No
  • Standard: Yes
  • Advanced: Yes

関連トピック