Mais

Camada de eventos para classe de recursos - método mais rápido?


Existem três métodos para converter a saída de uma Camada de Evento Make XY em uma Classe de Característica:

  • Recursos de cópia
  • Feature to Point
  • Classe de recurso para classe de recurso

Qual é o método mais rápido? Preciso converter uma grande quantidade de pontos armazenados em uma tabela csv (arquivo de 1,5 GB) e me pergunto qual é a melhor maneira de fazer isso.

Vou usar o geoprocessamento em segundo plano em uma máquina de 64 bits.


Aqui está um exemplo de técnica que mencionei no meu comentário à sua pergunta. Ler um CSV e preencher uma classe de recurso com seus valores pode ser fácil. O script assume o Latitude campo é a 1ª coluna e Longitude campo é a 2ª coluna. Você pode ajustar o sistema de coordenadas no código para algo diferente de WGS84, ajustar os tipos de campo, etc.

# Autor: John K. Tran # Contato: [email protected] import arcpy import os import csv print "arcpy importado" "" "O CSV de entrada pode ser semelhante a: Lat, Lon, Nome, Sobrenome 12.34,56.78, Joe, Smith 0,98,7,65, Jane, Doe 65,43,43,21, Bob, Sagat Certifique-se de que os campos 'Lat' e 'Lon' estão na 1ª e 2ª coluna no CSV, respectivamente. "" "Incsv = r" C:  Usuários  MyName  Desktop  My Docs  Sample Data  SampleCSV.csv "# Altere para o caminho do seu arquivo CSV. outfc = r "C:  Users  MyName  Desktop  My Docs  Sample Data  SampleGDB.gdb  SampleFC" # Altere para o caminho do seu FC de saída. spatialref = arcpy.SpatialReference (4326) # Crie o objeto de referência espacial como WGS84. Pode modificar se desejar. if not arcpy.Exists (outfc): # Crie a classe de recurso de saída, se necessário. arcpy.CreateFeatureclass_management (os.path.dirname (outfc), os.path.basename (outfc), "POINT", None, None, None, spatialref) csv.register_dialect ("xls", delimiter = ",", lineterminator = " n") # Registre o dialeto para a sintaxe CSV nativa no Microsoft Excel. f = open (incsv, "r") reader = csv.reader (f, dialect = "xls") headers = reader.next () # Leia a primeira linha como os nomes dos cabeçalhos. para cabeçalho nos cabeçalhos [2:]: # Adicione campos para as colunas restantes, se necessário. O padrão é o campo TEXTO. arcpy.AddField_management (outfc, header, "TEXT") cursor = arcpy.da.InsertCursor (outfc, ['SHAPE @ XY'] + headers [2:]) # Crie InsertCursor. contagem = 0 para linha no leitor: se contagem% 1000 == 0: imprime "processando linha {0}". format (contagem) Ycoord = linha [0] # Certifique-se de que 'Lat' está na primeira coluna. Xcoord = linha [1] # Certifique-se de que 'Lon' está na 2ª coluna. newrow = [(float (Xcoord), float (Ycoord))] + linha [2:] cursor.insertRow (newrow) # Insira o ponto em FC para cada linha em CSV. contagem + = 1 del cursor f.close ()

E o exemplo de um CSV que pode ser lido é:

Lat, Lon, FirstName, LastName, Tone, Magnitude 26,61, -81,49, John, Smith, Dark, 6,0 26,68, -81,47, Jim, Jones, Light, 9,0 20,01, -155,87, Steve, Bruin, Medium, 3,9 25,43, - 80,45, Bob, Johnson, Dark, 2,75 26,05, -80,11, Bill, Mayer, Light, 26,6

100.000 registros CSV levaram cerca de 3-5 segundos para eu executar.


Eu descobri que um modelo construtor de modelos é mais rápido com: "Make X Y Event Layer" seguido por "Feature class to Feature Class"