ArcGIS Spatial Analystを使用せずにポイントに値を抽出しますか?


8

ラスターDEMと複数のポイントがあります。各ポイントのDEM標高を決定したいと思います。各ポイントでDEMを手動で調べる以外に(多くのポイントで時間がかかる)、Spatial Analystが値をポイントに抽出ツールにアクセスせずにこれを行う方法はありますか?それが役立つ場合、私は3d Analystにアクセスできます。


これが役に立つかもしれ:gis.stackexchange.com/questions/46893/...
アーロン

回答:


6

3Dアナリストの[ サーフェス情報を追加]は、重なり合うラスターレイヤーからのデータ値を使用して、ベクターデータにZフィールドを追加します。

ポイント、マルチポイント、およびポリラインフィーチャのサーフェス標高プロパティを補間します。

これはv10の場合です。使用しているArcGISのバージョンを確認できませんでした。


10

脚本:

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ポイント以下で使っています


こんにちは、スクリプトに感謝します。数回実行しようとしましたが、次のエラーが発生します。「27行目、<モジュール> in row in rows:Tue May 17 12:56:55 2016-Python Error Info:<type 'exceptions.RuntimeError' >:存在しない列が指定されました。何か案は?ありがとう。
マット

mxdコンテンツテーブルでこのラスターを何と呼びますか?
FelixIP 2016年

ラスター名としてDEMHとDEMH_copyを試しました。
マット

クラッシュ後にシェープファイルテーブルにフィールドdemhが表示されますか?
FelixIP 2016年

フィールド「demh_copy_tif」が属性テーブルに追加されますが、NULL値が含まれます。
マット

4

これは、Hawthorne Beyerの無料の地理空間モデリング環境(GME、以前はHawth's Toolsとして知られていました)を使用して行うことができます。このツールには、「ポイントとラスターの交差」というツールがあります。これは、その名前が示すように、ArcGISの交差ツールのように機能しますが、ポイントレイヤーをラスターと交差させることができます。ポイントレイヤーにSQLクエリを適用して、ポイントのサブセットのラスター値のみを抽出することもできます。PCおよびGMEにもRをインストールまたはアップグレードする必要があります(ArcGISに依存していますが、ArcGISセッションとは独立して実行できます)。


この時点で、Rを使用することもできます。ライブラリの追加とデータの読み取りを含め、これを行うのに必要なコードは約4行だけであり、インデックス構文を使用してその場でデータをクエリできます。
Jeffrey Evans

1

ラスター値をポイントシェープファイルに抽出する別のオプションは、無料のオープンソースソフトウェアであるQGISを使用することです。QGISのプラグインマネージャーダウンロードプラグイン:ポイントサンプリングツール。ArcGISのSpatial Analystエクステンションを必要とする複数の値をポイント抽出と同様に、複数のラスター値をポイントシェープファイルに抽出できます。

ラスターデータの投影とシェープファイルが同じ場合、ツールは完全に機能します。ラスタとシェープファイルデータのさまざまな投影法を使用すると、ラスタ値の空の列を持つシェープファイルが作成されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.