ArcGISでラスターの中心点を見つけますか?


10

たとえば、ArcMap 10ドキュメント(関連付けられたtfwを含む.tiff)に読み込まれた長方形の地理参照ラスターファイルがある場合、その中心点を簡単に見つけてその点をポイントベクターレイヤーに保存するにはどうすればよいですか?

また、ArcMapドキュメントにそのようなラスターが複数ある場合、それらすべてにプロセスを適用するにはどうすればよいですか?

残念ながら、Pythonの経験はありません。したがって、プログラムによるソリューションは問題ありませんが、既存のスクリプトをArcGIS 10にロードして、問題のラスターで実行する方法についての具体的な指示が必要になります。(ところで、ラスターはすべて個別のレイヤーにあります)。


1
プログラムによるソリューションは受け入れられますか?
カークカイケンダル、2011

プログラムによる解決策を受け入れたいのですが、Pythonの経験がありません。スクリプトをArcGISにロードして、問題のラスターで実行する方法の手順が必要です。
hpy '27

回答:


7

元の質問は10.0に関するものでしたが、以下のコードを10.3.1用に更新しました。

これをコピーして、arcmapのpythonウィンドウに貼り付け、RasterCenter関数を作成します。

import arcpy, os
def RasterCenter(raster):
    #raster: string reference to raster
    raster = arcpy.Raster(raster)
    fcname = "{}_center".format(os.path.basename(str(raster)))
    x = raster.extent.XMin + (raster.extent.XMax - raster.extent.XMin)/2
    y = raster.extent.YMin + (raster.extent.YMax - raster.extent.YMin)/2
    featureclass = arcpy.CreateFeatureclass_management("in_memory", fcname, "POINT",spatial_reference = raster.spatialReference)
    with arcpy.da.InsertCursor(featureclass, ['SHAPE@XY']) as cursor:
        cursor.insertRow(((x, y),))
    mxd = arcpy.mapping.MapDocument("CURRENT")
    df = arcpy.mapping.ListDataFrames(mxd)[0]
    arcpy.MakeFeatureLayer_management(featureclass, fcname)
    layer = arcpy.mapping.Layer(fcname)
    arcpy.mapping.AddLayer(df, layer)

次に、Pythonウィンドウを使用して、次の呼び出しによってフィーチャクラスを作成できます。

RasterCenter("<reference to raster">)

したがって、たとえば、DEMという名前のラスターがある場合、PythonウィンドウでRasterCenter( "dem")を呼び出すと、ラスターの中心に1つのポイントを持つ "dem_center"という名前のレイヤーが追加されます。レイヤーはメモリに保存されるため、保持したい場合はエクスポートします。

さらに一歩進むには、スクリプトを.pyファイルに保存し、.pyファイルをpythonの検索パスに配置します。たとえば、RasterCenter.pyとして保存し、PYTHONPATHに配置します(通常、この場所はC:\ Python26 \ ArcGIS10.0 \ Libです)。

それからあなたは行うことができます:

import RasterCenter
RasterCenter.RasterCenter("<reference to raster">)

6

非常に簡単でシンプルなラスタープロパティを取得し、最小、最大x、yから中心点を計算する

MinX = arcpy.GetRasterProperties_management("raster", "LEFT")
MinY = arcpy.GetRasterProperties_management("raster", "BOTTOM")
MaxX = arcpy.GetRasterProperties_management("raster", "RIGHT")
MaxY = arcpy.GetRasterProperties_management("raster", "TOP")

centreX = (MaxX + MinX) / 2
centreY = (MaxY + MinY) / 2

そして通常のエラーチェックなど...

次に、updateCursorを使用してポイントテーブルに追加します。


2
素敵なアプローチ。中心座標の式を改善したいと思います。それらは、エンドポイントの違いではなく、エンドポイントの平均です。
whuber

これは私が探しているもののように見えますが、ArcGISでスクリプトを作成したことがないので、そのようなスクリプトを読み込んで実行する方法を教えてもらえますか?(これを反映するために元の質問を更新しました...)ありがとうございます!
hpy '27

1
raster.extent.XMin -あなたは例えばラスタ= arcpy.Raster(「ラスター」)、そしてセントレックス= raster.extent.XMax、ラスタ範囲のプロパティを使用して値をもアクセスすることができます
blord-カスティージョ

1
@Whuber私は今エラーを見ることができます、私は私がしている他の何かを考えていました!ありがとうWhuber
毛深い
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.