回答:
脚本:
import arcpy, traceback, sys, os
pntFile=arcpy.GetParameterAsText(0)
rasters=arcpy.GetParameterAsText(1)
rasters=rasters.split(';')
theFields=[x.name.lower() for x in arcpy.ListFields(pntFile)]
result=arcpy.GetCount_management(pntFile)
nF=int(result.getOutput(0))
p=arcpy.Point()
try:
def showPyMessage():
arcpy.AddMessage(str(time.ctime()) + " - " + message)
for raster in rasters:
desc=arcpy.Describe(raster)
theFLD=raster.lower()
arcpy.AddMessage("Sampling "+theFLD)
if not(theFLD in theFields):
try:arcpy.AddField_management(pntFile, theFLD, "FLOAT")
except:
aF=raster.split(os.sep)[-1]
theFLD=aF.split(".")[0]
theFLD="F"+theFLD
arcpy.AddField_management(pntFile, theFLD, "FLOAT")
arcpy.SetProgressor("step", "", 0, nF)
with arcpy.da.UpdateCursor(pntFile,("SHAPE@XY",theFLD)) as rows:
for row in rows:
p.X,p.Y=row[0]
myArray = arcpy.RasterToNumPyArray(raster,p,1,1,-9999)
row[1]=myArray[0,0]
rows.updateRow(row)
arcpy.SetProgressorPosition()
del row,rows
except:
message = "\n*** PYTHON ERRORS *** "; showPyMessage()
message = "Python Traceback Info: " + traceback.format_tb(sys.exc_info()[2])[0]; showPyMessage()
message = "Python Error Info: " + str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"; showPyMessage()
インターフェース:
パラメーター:
mxdから動作します。コンテンツテーブルでラスターに短い一意の名前を付けます。スクリプトは同じ名前のフィールドを作成し、セルの値を入力しようとします。
遅いので1000ポイント以下で使っています
これは、Hawthorne Beyerの無料の地理空間モデリング環境(GME、以前はHawth's Toolsとして知られていました)を使用して行うことができます。このツールには、「ポイントとラスターの交差」というツールがあります。これは、その名前が示すように、ArcGISの交差ツールのように機能しますが、ポイントレイヤーをラスターと交差させることができます。ポイントレイヤーにSQLクエリを適用して、ポイントのサブセットのラスター値のみを抽出することもできます。PCおよびGMEにもRをインストールまたはアップグレードする必要があります(ArcGISに依存していますが、ArcGISセッションとは独立して実行できます)。
ラスター値をポイントシェープファイルに抽出する別のオプションは、無料のオープンソースソフトウェアであるQGISを使用することです。QGISのプラグインマネージャーダウンロードプラグイン:ポイントサンプリングツール。ArcGISのSpatial Analystエクステンションを必要とする複数の値をポイントに抽出と同様に、複数のラスター値をポイントシェープファイルに抽出できます。
ラスターデータの投影とシェープファイルが同じ場合、ツールは完全に機能します。ラスタとシェープファイルデータのさまざまな投影法を使用すると、ラスタ値の空の列を持つシェープファイルが作成されます。