サマリー
基本的な形状を維持しながら、相対的に不要な頂点を取り除くことによってラインを単純化します。
[ラインの単純化 (Simplify Line)] および [ポリゴンの単純化 (Simplify Polygon)] ツールの詳細
使用法
このツールでは、次のように、それぞれの目的に応じた異なる単純化アルゴリズムを使用します。
- 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 アルゴリズムをベースとしています。
- BEND_SIMPLIFY アルゴリズムは、相対的に意味のない屈曲を識別して削除し、より小さな縮尺で表示できるようにデータを単純化する仕組みになっています。これは、一般に、POINT_REMOVE アルゴリズムと比べて、入力ジオメトリにより忠実な結果を生成しますが、処理により多くの時間がかかることがあります。このアルゴリズムは時間がかかる方法ですが、一般的に、元のフィーチャに忠実な結果が生成されます。これは、ラインの不要な屈曲を取り除きます。このアルゴリムは、Zeshen Wang と Jean-Claude Müller 共著「Line Generalization Based on Analysis of Shape Characteristics」(『Cartography and Geographic Information Systems』25(1)、3–15 (1998)) で定義されたアルゴリズムをベースとしています。
- WEIGHTED_AREA アルゴリズムは、最初に各頂点の有効エリアである三角形を識別する仕組みになっています。次に、各エリアの平坦度、歪度、凸性を比較するために、それらの三角形が一連のメトリクスによって重み付けされます。加重エリアを参考にしてそれらに対応する頂点を削除することで、可能な限り特徴を維持しながら、ラインを単純化します。このアルゴリズムは、Sheng Zhou と Christopher B. Jones 共著「(2005) Shape-Aware Line Generalisation with Weighted Effective Area」(Fisher, Peter F. (Ed.)『 Developments in Spatial Handling 11th International Symposium on Spatial Handling』369–80) で定義されたアルゴリズムをベースとしています。
[単純化の許容値] パラメーターの値は、単純化の度合いを決定します。許容値が大きくなるほど、生成されるジオメトリが粗大化します。許容値が小さくなるほど、入力により忠実なジオメトリが生成されます。MinSimpTol フィールドと MaxSimpTol フィールドの両方が、使用された許容値を格納するために出力に追加されます。
- POINT_REMOVE アルゴリズムの場合、許容値は、各頂点と新規作成されたラインとの間の最大許容垂直距離を示します。
- BEND_SIMPLIFY アルゴリズムの場合、許容値は、有意な屈曲に近似する円の半径を意味します。
- WEIGHTED_AREA アルゴリズムの場合、許容値の二乗は、3 つの隣接する頂点によって定義される有意な三角形の面積を示します。
[長さゼロのラインをポイントとして保持] パラメーター (Python の collapsed_point_option) を使用すると、データの空間的許容値よりも小さいすべてのラインのエンドポイントを格納するための出力ポイント フィーチャクラスを作成できます。[出力フィーチャクラス] (Python の out_feature_class) と同じ名前と場所を接尾辞 _Pnt とともに使用して、出力ポイントが生成されます。出力ライン フィーチャクラスには、入力フィーチャクラスにあるすべてのフィールドが含まれています。出力ポイント フィーチャクラスには、これらのフィールドは含まれません。
出力ライン フィーチャクラスはトポロジ的に正確であるため、 入力データに含まれるトポロジ エラーはすべて、出力ライン フィーチャクラスでフラグが付けられます。出力フィーチャクラスには、入力フィーチャ ID と入力のトポロジ エラーがそれぞれ格納される InLine_FID と SimLnFlag という 2 つのフィールドが追加されます。SimLnFlag の値が 1 であればトポロジ エラーが存在することを示し、0 (ゼロ) であればエラーは存在しないことを示します。
[入力バリア レイヤー] パラメーターは、単純化されたラインが横切ることを許可されないフィーチャを識別するために使用します。バリア フィーチャには、ポイント、ライン、ポリゴンのいずれかを指定できます。
大きなデータセットを処理する場合は、メモリの制限を超えることがあります。このような場合、[カートグラフィック パーティション] 環境設定で関連するポリゴン フィーチャクラスを特定することにより、パーティション単位で入力データを処理することを検討します。パーティションの境界によって定義されたデータの一部が順次処理されます。結果のフィーチャクラスは、パーティション エッジにおいてシームレスで一致した形状になります。詳細については、「パーティションを使用した大きなデータセットのジェネラライズ」をご参照ください。
構文
SimplifyLine_cartography (in_features, out_feature_class, algorithm, tolerance, {error_resolving_option}, {collapsed_point_option}, {error_checking_option}, {in_barriers})
パラメーター | 説明 | データ タイプ |
in_features | 単純化する入力ライン フィーチャ。 | Feature Layer |
out_feature_class | 単純化された出力ライン フィーチャクラス。入力フィーチャクラスに存在するすべてのフィールドが含まれます。出力ライン フィーチャクラスはトポロジ的に正確であるため、 このツールでトポロジ エラーが生成されることはありません。ただし、入力データに含まれるトポロジ エラーは、出力ライン フィーチャクラスでフラグが付けられます。出力フィーチャクラスには、入力フィーチャ ID と入力のトポロジ エラーがそれぞれ格納される InLine_FID と SimLnFlag という 2 つのフィールドが追加されます。SimLnFlag の値が 1 であれば入力のトポロジ エラーが存在することを示し、0 (ゼロ) であれば入力エラーは存在しないことを示します。 | Feature Class |
algorithm | ラインの単純化アルゴリズムを指定します。
| String |
tolerance | この許容値は単純化の度合いを決定します。単位は自由に選択できます。選択しない場合、入力の単位が使用されます。MinSimpTol フィールドと MaxSimpTol フィールドの両方が、処理が行われたときに使用された許容値を格納するために出力に追加されます。
| Linear Unit |
error_resolving_option (オプション) | Boolean | |
collapsed_point_option (オプション) | 空間的許容値よりも小さいすべてのラインのエンドポイントを格納するための出力ポイント フィーチャクラスを作成するかどうかを決定します。out_feature_class と同じ名前と場所を接尾辞 _Pnt とともに使用して、出力ポイントが生成されます。
| Boolean |
error_checking_option (オプション) | Boolean | |
in_barriers [in_barriers,...] (オプション) | 単純化の際にバリアとしての役割を果たすフィーチャを含む入力。単純化された結果のラインはバリア フィーチャに接したり、バリア フィーチャを横切ったりしません。たとえば、コンター ラインを単純化する場合、スポット標高フィーチャ入力をバリアとして使用すると、単純化されたコンター ラインによって、これらのポイント間が単純化されないようにすることができます。出力は、計測されたスポット標高によって示された標高に従います。 | Feature Layer |
コードのサンプル
SimplifyLine (ラインの単純化) の例 (Python ウィンドウ)
次の Python ウィンドウ スクリプトは、イミディエイト モードで SimplifyLine ツールを使用する方法を示しています。
import arcpy
import arcpy.cartography as CA
arcpy.env.workspace = "C:/data"
CA.SimplifyLine("roads.shp",
"C:/output/output.gdb/simplified_roads",
"POINT_REMOVE",
20)
SimplifyLine (ラインの単純化) の例 2 (スタンドアロン スクリプト)
次のスタンドアロン スクリプトで、この SimplifyLine ツールの使用方法を示します。
# Name: SimplifyLine_Example2.py
# Description: Simplify line features from two feature classes, rivers and coastlines,
# while maintaining their connections
# 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
inRiverFeatures = "rivers"
inCoastlineFeatures = "coastlines"
mergedFeatures = "C:/data/PortlandOutput.gdb/merged_lines"
simplifiedFeatures = "C:/data/PortlandOutput.gdb/merged_lines_simplified"
tempLayer = "tempLyr"
outRiverFeatureClass = "C:/data/PortlandOutput.gdb/rivers_final"
outCoastlineFeatureClass = "C:/data/PortlandOutput.gdb/coastlines_final"
# Merge rivers and coastlines into one feature class,
# assuming that they have a common f-code field
# with value 40 for rivers and 80 for coastlines.
DM.Merge(inRiverFeatures, inCoastlineFeatures, mergedFeatures)
# Simplify all lines.
CA.SimplifyLine(mergedFeatures,
simplifiedFeatures,
"BEND_SIMPLIFY",
100,
"KEEP_COLLAPSED_POINTS")
# Select rivers and coastlines by their f-code values
# and put them in separate feature classes.
DM.MakeFeatureLayer(simplifiedFeatures, tempLayer, "f-code = 40")
DM.CopyFeatures(tempLayer, outRiverFeatureClass)
DM.MakeFeatureLayer(simplifiedFeatures, tempLayer, "f-code = 80")
DM.CopyFeatures(tempLayer, outCoastlineFeatureClass)
環境
ライセンス情報
- ArcGIS Desktop Basic: いいえ
- ArcGIS Desktop Standard: はい
- ArcGIS Desktop Advanced: はい