ポイントフィーチャからスクエアバッファーを作成したいのですが、そこに入るコードがわかりません。
forums.esriのWebサイトでも同様の質問が寄せられていますが、それは10年以上前のことであり、コードを試してもうまくいきませんでした。
ポイントフィーチャからスクエアバッファーを作成するにはどうすればよいですか?
ポイントフィーチャからスクエアバッファーを作成したいのですが、そこに入るコードがわかりません。
forums.esriのWebサイトでも同様の質問が寄せられていますが、それは10年以上前のことであり、コードを試してもうまくいきませんでした。
ポイントフィーチャからスクエアバッファーを作成するにはどうすればよいですか?
回答:
ArcMap 10で次の手順を試してください。
Pythonソリューションの場合:
可能な解決策は、標準のESRIバッファーツールを使用して任意の半径で「通常の」ラウンドバッファーを作成し、その結果得られるバッファーのフィーチャクラスに対してフィーチャエンベロープからポリゴンを実行することです。これにより、各フィーチャの範囲の周りに正方形のエンベロープフィーチャが作成されます。ポリゴンへの機能エンベロープは、[データ管理]> [機能]にあります。モデルビルダーモデルは次のようになります。
Aaronのコードの最後にリンクされたスクリプトは、スクエアバッファーにのみ使用でき、新しいarcpy.daモジュールを使用しないため、長方形バッファーの作成に使用できるスクリプトを作成しました。10kのランダムポイントデータセットでは、10秒で完了しました。
import os, arcpy
point_FC = arcpy.GetParameterAsText(0)
w = float(arcpy.GetParameterAsText(1))
h = float(arcpy.GetParameterAsText(2))
output_FC = arcpy.GetParameterAsText(3)
def rect(coord, w, h):
#Given XY coordinates and rectangle dimensions,
#return a polygon object of a rectangle centered about the point
x,y = coord
w *= 0.5
h *= 0.5
xmin,xmax = x-w, x+w
ymin,ymax = y-h, y+h
poly = ((xmin, ymax), (xmax, ymax), (xmax, ymin), (xmin, ymin))
return arcpy.Polygon(arcpy.Array(arcpy.Point(*p) for p in poly))
#Create output feature class.
spatref = arcpy.Describe(point_FC).spatialReference
folder, base = os.path.split(output_FC)
arcpy.CreateFeatureclass_management(folder, base, "POLYGON", spatial_reference=spatref)
#Get field object for every field in input except OID and Shape.
fields = [f for f in arcpy.ListFields(point_FC) if f.type not in ("OID", "Geometry")]
for field in fields:
arcpy.AddField_management(output_FC, field.name, field.type, field.precision,
field.scale, field.length, field.aliasName,
field.isNullable, field.required, field.domain)
#Get field names to be inputted to cursors.
#Need SHAPE@XY token to read point coords and SHAPE@ token to write polygon coords.
fnames = [f.name for f in fields]
fields_in = fnames[::]
fields_out = fnames[::]
fields_in.append("SHAPE@XY")
fields_out.append("SHAPE@")
#Create buffers and write attributes to output FC, if any.
count = int(arcpy.GetCount_management(point_FC)[0])
arcpy.SetProgressor("step", "Buffering...", 0, count, 1)
with arcpy.da.SearchCursor(point_FC, fields_in) as Scursor, arcpy.da.InsertCursor(output_FC, fields_out) as Icursor:
for i,row_in in enumerate(Scursor):
#"Convert" point to rectangle
arcpy.SetProgressorPosition(i)
feature = list(row_in)
feature[-1] = rect(feature[-1], w, h)
Icursor.insertRow(feature)
ArcObjectsを使用していると仮定すると(タグを使用して、使用している言語とAPIを指定してください)、IEnvelope.Expand
この例のように、ポイントのエンベロープからスクエアバッファーを作成できます:GeoFeatureLayer Snippetのポイント検索からすべてのフィーチャを取得
ESRI.ArcGIS.Geometry.IEnvelope envelope = point.Envelope;
envelope.Expand(searchTolerance, searchTolerance, false);
アーロンの答えに代わるものとして、アドバンスドライセンスがない人には、最小境界ジオメトリツールを使用します。以下の手順(Aaronから変更):
編集:このオプションでは、「ENVELOPE」オプション(高度なライセンスが必要)を使用せずに、結果の正方形バッファーの方向を制御できません。[出力に属性としてジオメトリ特性を追加(オプション)]オプションにチェックを入れると、結果のオフセットは出力フィーチャクラスに「MBG_Orientation」として記録されます。必要に応じて、これを使用してフィーチャを回転させて中心に戻すことができます。ArcPyを使用して属性テーブルから値でポリゴンを回転するをご覧ください。それに対する潜在的な解決策のために。
このサイトでは、geographiclib JavaScriptとjs2shapefileを使用してcsvを正方形または長方形または円形のバッファーに変換する方法について説明します。
それがあなたの問題を解決するかどうかを見ることができます。