Extraindo valores para pontos sem o ArcGIS Spatial Analyst?

8

Eu tenho um DEM raster e vários pontos. Quero determinar a elevação do DEM em cada ponto. Além de examinar manualmente o DEM em cada ponto (consome muito tempo com muitos pontos), existe alguma maneira de fazer isso sem acessar a ferramenta Extrair valores para pontos do analista espacial? Eu tenho acesso ao 3d Analyst, se isso ajudar.

Alpheus
fonte
Isso pode ser útil: gis.stackexchange.com/questions/46893/…
Aaron

Respostas:

6

Adicionar informações da superfície do analista 3D adicionará um campo Z aos dados do vetor com o valor dos dados da camada raster sobreposta:

Interpola as propriedades de elevação da superfície para recursos de ponto, multiponto e polilinha.

Isso é para a v10, não entendi qual versão do ArcGIS você estava usando.

M.Smith
fonte
10

Roteiro:

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()

Interface:

insira a descrição da imagem aqui

Parâmetros:

insira a descrição da imagem aqui

para trabalhar a partir de MXD. Atribua um nome exclusivo raster (s) à tabela de conteúdo. O script criará o mesmo campo de nome e tentará preenchê-lo com valores de célula.

É lento, então eu uso com menos de 1000 pontos

FelixIP
fonte
Oi, obrigado pelo script. Tentei executá-lo algumas vezes, mas ele apresenta o seguinte erro: "linha 27, em <module> para linha em linhas: terça-feira, 17 de maio 12:56:55 2016 - Informações sobre o erro do Python: <type 'exceptions.RuntimeError' >: Foi especificada uma coluna que não existe. " alguma ideia? obrigado.
Matt
Como você chama essa varredura na tabela de conteúdo mxd?
FelixIP
Tentei DEMH e DEMH_copy como nomes raster.
Matt
Você pode ver o campo demh na tabela shapefile após a falha?
FelixIP 17/05
o campo "demh_copy_tif" é adicionado à tabela de atributos, mas com valores NULL.
18716 Matt
4

Você pode fazer isso com o Geospatial Modeling Environment gratuito de Hawthorne Beyer (GME, anteriormente conhecido como Hawth's Tools). Existe uma ferramenta lá, Intersect Points With Raster , que, como o próprio nome indica, atua como a ferramenta Intersect no ArcGIS, mas permite interceptar uma camada de pontos com uma raster, como a ferramenta Extrair valores para pontos. Você também pode aplicar uma consulta SQL à sua camada de pontos para extrair apenas valores de varredura para um subconjunto de pontos. Você precisará instalar ou atualizar o R ​​no seu PC e no GME (ele depende do ArcGIS, mas pode ser executado independentemente de uma sessão do ArcGIS).

Dan C
fonte
Nesse ponto, você também pode usar o R. Incluindo a adição de bibliotecas e a leitura de dados, são necessárias apenas 4 linhas de código para fazer isso e você pode consultar os dados rapidamente usando uma sintaxe de índice.
Jeffrey Evans
1

Outra opção para extrair valores de varredura para apontar o shapefile é usar o QGIS, que é um software de código aberto gratuito. No gerenciador de plug-ins no QGIS, faça o download da ferramenta de amostragem Plugin: Point , que pode extrair vários valores de varredura para apontar o shapefile, semelhante a Extrair valores múltiplos para pontos, o que requer a extensão do Spatial Analyst no ArcGIS.

A ferramenta funciona perfeitamente se a projeção dos dados da varredura e do shapefile forem iguais. Trabalhar com diferentes projeções para os dados da varredura e do arquivo de forma criará um arquivo de forma com colunas vazias dos valores da varredura.

ahmadhanb
fonte