Geometry()オブジェクトの「長さ」属性にアクセスするときに測定単位を指定するにはどうすればよいですか?


10

CalculateField_managementツールを使用すると、形状の長さを計算するときに測定単位を指定できます。

#Calculate polyline lengths in miles
polylines = "C:\sampleShape.shp"
arcpy.CalculateField_management(polylines, "shapeLen", "!Shape.length@MILES!", "PYTHON_9.3")

各機能の 'SHAPE @ LENGTH'を使用してカーソル内で同じことを行い、長さを選択した単位で返します。

#hypothetical example 1
with arcpy.da.UpdateCursor(polylines, field_names=["SHAPE@LENGTH.FEET", "shapeLen"]) as upCurs:
    for row in upCurs:
        row[1] = row[0]
        upCurs.updateRow(row)

あるいは、(効率的ではない)@SHAPEジオメトリオブジェクトを使用することによって?

#hypothetical example 2
with arcpy.da.UpdateCursor(polylines, field_names=["@SHAPE", "shapeLen"]) as upCurs:
    for row in upCurs:
        row[1] = row[0].length@FEET
        upCurs.updateRow(row)

これを行う方法はありますか?

回答:


7

ここでは、回避策を使用する必要があります。長さは常にジオメトリの空間参照の線形単位になります。フィートからメートルへの変換係数とmetersPerUnitプロパティを知ることで、ほとんどの方法が得られるか、フィールドを追加して前述のフィールド計算機を使用するshape.length@feetことができます。別のオプションは、カーソルの空間参照を、投影座標系ではなく地理座標系(WGS84など)として指定することです。次に、メソッドGeometry.getLength()geometry.getArea()メソッドはメートル単位の数値を返します。これを再び簡単にフィートに変換できます。

10.2.1でGeometry.getLength/getAreaメソッドにオプションの2番目の引数を追加して、単位を指定しました。そのため、出荷されたときと到着したときはいつでも、それを行う直接的な方法があるはずですが、現時点では別の回避策を使用する必要があります。


6

見られるように、ジオメトリ・オブジェクトと、のgetLength()メソッドは常に、メートルでの距離を返し、ここ。たとえば、マイルまたはフィートにのみ変換する場合は、これが望ましい場合があります。メートルから他の直線距離に変換するのは比較的簡単です。

入力に地理座標系(GCS)を使用する必要があるため、長さを10進度で指定する場合は少し扱いに​​くくなります。ここで説明するように、SpatialReferenceオブジェクトをカーソルに渡すことを検討することをお勧めします。

たとえば、NAD_1983_StatePlane_Louisiana_South_FIPS_1702_Feet、投影座標系(PCS)にポリラインシェープファイルがあります。

このコードを使用すると、各オブジェクトの長さに10進度でアクセスできます。

spatref = arcpy.SpatialReference(4326) #EPSG code for WGS84
length = [row[0] for row in arcpy.da.SearchCursor("layer", "SHAPE@LENGTH", spatial_reference=spatref)]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.