Mais

Alinhando atributos com recursos ao criar shapefile usando PyShp?

Alinhando atributos com recursos ao criar shapefile usando PyShp?


Usei o Módulo Python Pyshp para selecionar blocos de censo específicos dos arquivos de forma do Censo e empacotá-los em um único arquivo de forma. No entanto, quando adiciono esses dados ao ArcMap e clico com o botão direito para identificar os blocos, obtenho atributos para vários blocos longe do bloco pretendido. A princípio presumi que tinha escrito meu script de uma forma que desalinhava os registros e formas de objetos em pyshp, mas quando li este arquivo de forma em python, tudo parecia estar alinhado corretamente (ou seja, posso procurar o registro que desejo e encontrar a forma correta no mesmo índice e vice-versa).

Alguém tem alguma sugestão sobre o próximo lugar que posso procurar para tentar resolver meu problema?

Aqui está a classe que criei para fazer isso. A ordem das operações é chamar load para obter um arquivo zip específico do censo, usar add_blocks para coletar qualquer um que corresponda à minha lista e adicioná-lo ao objeto escritor e, em seguida, write_shapefile para salvar tudo o que eu coletei.

classe CensusConnection: def __init __ (self): self.file_name = "self.ftp_path = 'ftp://ftp2.census.gov/geo/tiger/TIGER2010/TABBLOCK/2010/' self.reader = Nenhum self.writer = shapefile .Writer () def load (self, state_fips, county_fips = "):" Use-me para carregar todos os blocos em uma pasta em pwd que correspondam ao FIPS do estado ou FIPS do estado mais FIPS do condado. "# Importar dados e configurar o objeto do leitor self .file_name = 'tl_2010_' + state_fips + county_fips + '_tabblock10' tempdir = tempfile.mkdtemp () se não os.path.exists ('tl_2010_' + state_fips + county_fips + '_tabblock10'): print 'Retrieving' + self.ftpath. + self.file_name + '.zip…' sock = urllib2.urlopen (self.ftp_path + self.file_name + '.zip') memfile = io.BytesIO (sock.read ()) ZipFile (memfile, 'a'). extractall (tempdir + "/" + self.file_name) self.reader = shapefile.Reader (tempdir + "/" + self.file_name + "/" + self.file_name) self._dump () #set up writer object to match leitor self.shapes = self.reader.shapes () self.fields = self.reader.fields self.records = self .reader.records () self.writer.fields = self.fields def _dump (self): if (os.path.exists (self.file_name)): shutil.rmtree (self.file_name) def add_blocks (self, block_keys) : "Pegue uma chave de bloco, encontre esse bloco e adicione arquivos de forma ao objeto gravador" Chave de bloco = StateFIPS + CountyFIPS + TractID + GroupID + BlockID (15 dígitos) "fields = self.reader.fields records = self.reader.records ( ) para o índice no intervalo (len (registros)): if (registros [índice] [4] no conjunto (block_keys)): self.writer.shapes (). append (self.reader.shapes () [índice]) self .writer.records.append (self.reader.records () [index]) def write_shapefile (self, dir_name): if (len (self.writer.records)> 0): if (os.path.exists (dir_name) ): shutil.rmtree (dir_name) os.mkdir (dir_name) self.writer.save (dir_name + "/" + dir_name)

Pyshp: O desenho de PolyLineZ desenha linhas entre minhas linhas

Minhas linhas estão se conectando, embora eu não as tenha definido como polígonos.

Estou baseando meu script no pacote pyshp.

Meu script é parecido com este:

O problema é que quando eu gero vários Qgis de polígonos que eu os abro, desenha uma linha entre eles. Exemplo:

Uma linha vai de A a B.

Outra linha vai de C para D

Por alguma razão, Qgis traça uma linha entre B e C. Acho que isso tem a ver com a entrega pyshp do arquivo de forma. Mais específico, o campo 'bbox' que define os limites de cada forma.

A solução faria com que a linha entre B e C fosse embora.


Pyshp 1.2.0

1.2.0Nunca ConstruídoPor que não?
1.1.4 Disponível Ver log de compilação
1.1.3 Disponível Ver log de compilação
1.1.1 Disponível Ver log de compilação
1.1.0 Disponível Ver log de compilação
1.0.5 Disponível Ver log de compilação
1.2.0Nunca ConstruídoPor que não?
1.1.4 Disponível Ver log de compilação
1.1.3 Disponível Ver log de compilação
1.1.1 Disponível Ver log de compilação
1.1.0 Disponível Ver log de compilação
1.0.5 Disponível Ver log de compilação
1.2.0Nunca ConstruídoPor que não?
1.1.4 Disponível Ver log de compilação
1.1.3 Disponível Ver log de compilação
1.1.1 Disponível Ver log de compilação
1.1.0 Disponível Ver log de compilação
1.0.5 Disponível Ver log de compilação

1.2.0 Disponível Ver log de compilação
1.1.4 Disponível Ver log de compilação
1.1.3 Disponível Ver log de compilação
1.1.1 Disponível Ver log de compilação
1.1.0 Disponível Ver log de compilação
1.0.5 Disponível Ver log de compilação
Links
Autor
Licença
Dependente de
Importações
Último lançamento

Visão geral

PyShp fornece suporte de leitura e gravação para o formato Esri Shapefile. O formato Shapefile é um popular formato de dados vetoriais de Sistema de Informação Geográfica criado pela Esri. Para obter mais informações sobre este formato, leia a bem escrita & quotESRI Shapefile Technical Description - julho de 1998 & quot, localizada em http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf. O documento Esri descreve os formatos de arquivo shp e shx. No entanto, um terceiro formato de arquivo chamado dbf também é necessário. Este formato está documentado na web como & quotXBase File Format Description & quot e é um formato simples de banco de dados baseado em arquivo criado na década de 1960. Para obter mais informações sobre esta especificação, consulte: http://www.clicketyclick.dk/databases/xbase/format/index.html

Os formatos de arquivo Esri e XBase são muito simples em design e eficiência de memória, o que é parte da razão pela qual o formato de arquivo de forma continua popular, apesar das inúmeras maneiras de armazenar e trocar dados GIS disponíveis hoje.

Pyshp é compatível com Python 2.4-3.x.

Este documento fornece exemplos de uso do PyShp para ler e gravar arquivos de forma.

Atualmente, o shapefile de amostra do grupo de blocos do censo referenciado nos exemplos está disponível apenas no site do projeto de código do Google em http://code.google.com/p/pyshp. Esses exemplos são diretos e você também pode executá-los facilmente em seus próprios shapefiles manualmente com modificações mínimas. Outros exemplos de tópicos específicos são continuamente adicionados ao wiki pyshp no código do google e ao blog http://GeospatialPython.com.

Importante: para obter informações sobre projeções de mapas, arquivos de forma e Python, visite: http://code.google.com/p/pyshp/wiki/MapProjections

Espero sinceramente que esta biblioteca elimine a distração mundana de simplesmente ler e escrever dados e permita que você se concentre na parte desafiadora e divertida de seu projeto geoespacial.

Exemplos

Antes de fazer qualquer coisa, você deve importar a biblioteca.

Os exemplos abaixo usarão um arquivo de forma criado a partir do conjunto de dados do U.S. Census Bureau Blockgroups perto de San Francisco, CA e disponível no repositório de subversão do site de código pyshp google.

Lendo Shapefiles

Para ler um shapefile, crie um novo objeto & quotReader & quot e passe a ele o nome de um shapefile existente. O formato do arquivo de forma é uma coleção de três arquivos. Você especifica o nome do arquivo base do arquivo de forma ou o nome de arquivo completo de qualquer um dos arquivos de componente do arquivo de forma.

OU qualquer um dos outros 5+ formatos que são potencialmente parte de um arquivo de forma. A biblioteca não se preocupa com extensões.

Lendo arquivos de forma de objetos semelhantes a arquivos

Você também pode carregar shapefiles de qualquer objeto semelhante a um arquivo Python usando argumentos de palavra-chave para especificar qualquer um dos três arquivos. Esse recurso é muito poderoso e permite que você carregue arquivos de forma de uma url, de um arquivo zip, de um objeto serializado ou, em alguns casos, de um banco de dados.

Observe que nos exemplos acima o arquivo shx nunca é usado. O arquivo shx é um índice de registro fixo muito simples para os registros de comprimento variável no arquivo shp. Este arquivo é opcional para leitura. Se estiver disponível, o pyshp usará o arquivo shx para acessar os registros de forma um pouco mais rápido, mas funcionará bem sem ele.

Lendo geometria

A geometria de um shapefile é a coleção de pontos ou formas feitas de vértices e arcos implícitos que representam localizações físicas. Todos os tipos de shapefiles apenas armazenam pontos. Os metadados sobre os pontos determinam como eles são tratados pelo software.

Você pode obter uma lista da geometria do arquivo de forma chamando o método shapes ().

O método shapes retorna uma lista de objetos Shape que descrevem a geometria de cada registro de forma.

Você pode iterar pela geometria do arquivo de forma usando o método iterShapes ().

Cada registro de forma contém os seguintes atributos:

  • bbox: Se o tipo de forma contém vários pontos, esta tupla descreve a coordenada inferior esquerda (x, y) e a coordenada do canto superior direito, criando uma caixa completa ao redor dos pontos. Se shapeType for Null (shapeType == 0), um AttributeError será gerado.
  • peças: as peças simplesmente agrupam coleções de pontos em formas. Se o registro de forma tiver várias partes, este atributo contém o índice do primeiro ponto de cada parte. Se houver apenas uma parte, uma lista contendo 0 é retornada.
  • points: O atributo points contém uma lista de tuplas contendo uma coordenada (x, y) para cada ponto na forma.

Para ler uma única forma chamando seu índice, use o método shape (). O índice é a contagem da forma a partir de 0. Portanto, para ler o registro da 8ª forma, você usaria seu índice, que é 7.

Lendo Registros

Um registro em um arquivo de formas contém os atributos de cada forma da coleção de geometria. Os registros são armazenados no arquivo dbf. A ligação entre geometria e atributos é a base dos Sistemas de Informação Geográfica. Este link crítico está implícito na ordem das formas e registros correspondentes no arquivo de geometria shp e no arquivo de atributo dbf.

Os nomes dos campos de um shapefile estão disponíveis assim que você lê um shapefile. Você pode chamar o atributo & quotfields & quot do arquivo de forma como uma lista Python. Cada campo é uma lista Python com as seguintes informações:

  • Nome do campo: o nome que descreve os dados neste índice de coluna.
  • Tipo de campo: o tipo de dados neste índice de coluna. Os tipos podem ser: Caractere, Números, Longos, Datas ou Memorando. O tipo & quotMemo & quot não tem significado dentro de um GIS e é parte da especificação xbase.
  • Comprimento do campo: o comprimento dos dados encontrados neste índice de coluna. O software GIS mais antigo pode truncar esse comprimento para 8 ou 11 caracteres para os campos & quotCharacter & quot.
  • Comprimento decimal: o número de casas decimais encontradas nos campos & quotNumber & quot.

Para ver os campos do objeto Reader acima (sf), chame o atributo & quotfields & quot:

Você pode obter uma lista dos registros do arquivo de forma chamando o método records ():

Semelhante aos métodos de geometria, você pode iterar por meio de registros dbf usando o método recordsIter ().

Cada registro é uma lista contendo um atributo correspondente a cada campo na lista de campos.

Por exemplo, no 4º registro do shapefile de grupos de blocos, o 2º e o 3º campos são o id do grupo de blocos e a contagem de população de 1990 desse grupo de blocos de São Francisco:

Para ler um único registro, chame o método record () com o índice do registro:

Lendo geometria e registros simultaneamente

Você deseja examinar a geometria e os atributos de um registro ao mesmo tempo. Os métodos shapeRecord () e shapeRecords () permitem que você faça exatamente isso.

Chamar o método shapeRecords () retornará a geometria e os atributos de todas as formas como uma lista de objetos ShapeRecord. Cada instância de ShapeRecord possui um atributo & quotshape & quot e & quotrecord & quot. O atributo de forma é um objeto ShapeRecord conforme discutido na primeira seção & quotLeitura da geometria & quot. O atributo record é uma lista de valores de campo conforme demonstrado na seção & quotReading Records & quot.

Vamos ler a chave do grupo de blocos e a população para o 4º grupo de blocos: & gt & gt & gt shapeRecs [3] .record [1: 3] ['060750601001', 4715]

Agora vamos ler os primeiros dois pontos desse mesmo registro:

O método shapeRec () lê um único par forma / registro no índice especificado. Para obter o 4º registro de forma do shapfile de grupos de blocos, use o terceiro índice:

A chave do grupo de bloqueio e a contagem da população:

Escrevendo Shapefiles

O PyShp tenta ser o mais flexível possível ao gravar shapefiles enquanto mantém algum grau de validação automática para garantir que você não escreva acidentalmente um arquivo inválido.

O PyShp pode gravar apenas um dos arquivos componentes, como o arquivo shp ou dbf, sem gravar os outros. Portanto, além de ser uma biblioteca de shapefile completa, também pode ser usada como uma biblioteca dbf (xbase) básica. Os arquivos Dbf são um formato de banco de dados comum que geralmente é útil como um formato de banco de dados simples independente. E até mesmo arquivos shp ocasionalmente têm usos como um formato autônomo. Alguns sistemas GIS baseados na web usam um arquivo shp carregado pelo usuário para especificar uma área de interesse. Muitos pulverizadores de campo de produtos químicos de agricultura de precisão também usam o formato shp como um arquivo de controle para o sistema de pulverização (geralmente em combinação com formatos de arquivo de banco de dados personalizados).

Para criar um shapefile, você adiciona geometria e / ou atributos usando métodos na classe Writer até que esteja pronto para salvar o arquivo.

Crie uma instância da classe Writer para começar a criar um arquivo de forma:

Definindo o tipo de forma

O tipo de forma define o tipo de geometria contida no arquivo de forma. Todas as formas devem corresponder à configuração do tipo de forma.

Os tipos de forma são representados por números entre 0 e 31, conforme definido pela especificação do arquivo de forma. É importante notar que o sistema de numeração tem vários números reservados que ainda não foram usados, portanto, os números dos tipos de forma existentes não são sequenciais.

Você pode fazer referência aos tipos de forma pelos números ou pelas constantes definidas por PyShp: shapefile.NULL = 0 shapefile.POINT = 1 shapefile.POLYLINE = 3 shapefile.POLYGON = 5 shapefile.MULTIPOINT = 8 shapefile.POINTZ = 11 shapefile.POLYLINEZ = 13 shapefile.POLYGONZ = 15 shapefile.MULTIPOINTZ = 18 shapefile.POINTM = 21 shapefile.POLYLINEM = 23 shapefile.POLYGONM = 25 shapefile.MULTIPOINTM = 28 shapefile.MULTIPATCH = 31

Existem três maneiras de definir o tipo de forma: - Defina-o ao criar a instância da classe. - Defina-o atribuindo um valor a uma instância de classe existente. - Defina-o automaticamente para o tipo da primeira forma salvando o arquivo de forma.

Para definir manualmente o tipo de forma de um objeto Writer ao criar o Writer:

ou podemos usar as constantes conforme explicado acima:

Como você pode ver, não é necessário especificar explicitamente o argumento shapeType.

OU você pode defini-lo após a criação do gravador, alterando a propriedade:

Balanceamento de geometria e registro

Como cada forma deve ter um registro correspondente, é fundamental que o número de registros seja igual ao número de formas para criar um arquivo de forma válido. Para ajudar a evitar o desalinhamento acidental, o PyShp possui um recurso de & quotauto balance & quot para garantir que, ao adicionar uma forma ou um registro, os dois lados da equação estejam alinhados. Este recurso NÃO é ativado por padrão. Para ativá-lo, defina o atributo autoBalance para 1 (True):

Você também tem a opção de chamar manualmente o método balance () sempre que adicionar uma forma ou registro para garantir que o outro lado esteja atualizado. Quando o equilíbrio é usado, formas nulas são criadas no lado da geometria ou um registro com um valor de & quotNULL & quot para cada campo é criado no lado do atributo.

A opção de balanceamento oferece flexibilidade na construção do shapefile.

Sem o balanceamento automático, você pode adicionar geometria ou registros a qualquer momento. Você pode criar todas as formas e, em seguida, criar todos os registros ou vice-versa. Você pode usar o método de equilíbrio após criar uma forma ou registrar cada vez e fazer atualizações posteriormente. Se você não usar o método de equilíbrio e se esquecer de equilibrar manualmente a geometria e os atributos, o arquivo de forma será visto como corrompido pela maioria dos softwares de arquivo de forma.

Com o balaneamento automático, você pode adicionar formas ou geometria e atualizar entradas em branco em ambos os lados conforme necessário. Mesmo se você esquecer de atualizar uma entrada, o shapefile ainda será válido e manipulado corretamente pela maioria dos softwares de shapefile.

Adicionando Geometria

A geometria é adicionada usando um de três métodos: & quotnull & quot, & quotpoint & quot ou & quotpoly & quot. O método & quotnull & quot é usado para formas nulas, & quotpoint & quot é usado para formas de ponto e & quotpoly & quot é usado para todo o resto.

Adicionando uma forma nula

Como os tipos de forma nula (tipo de forma 0) não têm geometria, o método & quotnull & quot é chamado sem nenhum argumento.

A lista de formas do objeto escritor agora terá uma forma nula:

Adicionando uma forma de ponto

As formas de ponto são adicionadas usando o método & quotpoint & quot. Um ponto é especificado por um valor x, y e opcional z (elevação) e m (medida).

Adicionando uma forma poli

As formas & quotPoly & quot podem ser polígonos ou linhas. Os polígonos do shapefile devem ter pelo menos 4 pontos e o último ponto deve ser igual ao primeiro. O PyShp impõe automaticamente polígonos fechados. Uma linha deve ter pelo menos dois pontos. Devido às semelhanças entre esses dois tipos de forma, eles são criados usando um único método denominado & quotpoly & quot.

Adicionando um polígono com anéis

Os polígonos consistem em anéis, o que significa que estão fechados. O primeiro ponto e o último ponto de um anel devem ser iguais. PyShp força o fechamento do anel se o anel estiver incompleto quando você adiciona a forma. Os polígonos podem ter anéis internos que criam orifícios. Os furos são definidos pela ordem dos pontos. Normalmente os pontos em um anel funcionam no sentido horário. Se os pontos rodarem no sentido anti-horário, eles formam um buraco. Se você não ordenar os pontos corretamente, terá apenas polígonos sobrepostos.

Você pode usar o método & quotshapefile.signed_area () & quot para determinar se um anel está no sentido horário ou anti-horário. Um valor & gt = 0 significa que o anel está no sentido anti-horário e & lt 0 significa que o anel está no sentido horário. O valor retornado também é a área do polígono.

Criação de polígonos 3D

Os valores de elevação, conhecidos como valores & quotZ & quot, permitem que você crie shapefiles tridimensionais. O valor z é um valor extra especificado como parte de um ponto.

Os valores z são armazenados em um atributo de forma separado.

Criação de atributos

A criação de atributos envolve duas etapas. A etapa 1 é criar campos para conter valores de atributos e a etapa 2 é preencher os campos com valores para cada registro de forma.

As seguintes tentativas de criar um shapefile completo:

Você também pode adicionar atributos usando argumentos de palavra-chave onde as chaves são nomes de campo.

Nomes de arquivos

As extensões de arquivo são opcionais ao ler ou gravar arquivos shap. Se você especificá-los, o Pyshp os ignora de qualquer maneira. Ao salvar arquivos, você pode especificar um nome de arquivo base que é usado para todos os três tipos de arquivo. Ou você pode especificar um nmae para um ou mais tipos de arquivo. Nesse caso, quaisquer tipos de arquivo não atribuídos não serão salvos e apenas os tipos de arquivo com nomes de arquivo serão salvos. Se você não especificar nenhum nome de arquivo (ou seja, save ()), um nome de arquivo exclusivo é gerado com o prefixo & quotshapefile_ & quot seguido por caracteres aleatórios que são usados ​​para todos os três arquivos. O nome do arquivo exclusivo é retornado como uma string.

Salvando em objetos semelhantes a arquivos

Assim como você pode ler shapefiles de objetos semelhantes a arquivos Python, você também pode escrevê-los.

Editando Shapefiles

A classe Editor tenta tornar a alteração dos shapefiles existentes mais fácil manipulando os detalhes de leitura e gravação nos bastidores.

Vamos adicionar formas a shapefiles existentes:

Adicionar um ponto a um arquivo de forma de ponto

Edite o ponto anexado para alterar o valor de & quoty & quot e & quotz & quot

Adicione uma nova linha a um arquivo de forma de linha:

Adicione um novo polígono a um shapefile de polígono:

Remova o primeiro ponto em cada shapefile - para um shapefile de ponto que é a primeira forma e registre & quot


Como obter o nome da forma

Usando o DotSpatial, se eu abrir um Shapefile como um IFeatureSet, posso ver uma coleção de formas dentro do FeatureSet e essas formas têm coleções de atributos. Mas não consigo ver uma maneira óbvia de encontrar o nome associado à forma.

Por exemplo, se eu tiver o seguinte código:

Se eu depurar esse código colocando um ponto de interrupção no objeto Shape, posso ver uma coleção de atributos. No exemplo que estou usando, cada forma possui 12 atributos. Eu posso ver que um desses atributos é o que eu consideraria ser o nome da forma (neste exemplo, estou olhando para as províncias do Equador), mas não tenho ideia de como emparelhar de forma confiável qual desses atributos seria ser o nome da forma, neste caso o nome da província.

Aqui está um exemplo dos atributos disponíveis que posso ver para a primeira forma:

Olhando rapidamente, eu diria que o atributo no índice 4 é o que eu preciso, mas como faço para descobrir isso programaticamente?


Editar mais tarde

Parece que, examinando ainda mais os dados, os rótulos dos atributos podem ser os nomes das colunas DataTable no IFeatureSet:

Apesar. qual destes eu escolheria programaticamente se quisesse importar essas formas? É a única maneira de permitir que a pessoa que faz a importação escolha manualmente o correto?


Reprojetar um Shapefile de Polígono usando PyShp e PyProj

Neste post vou usar o PyShpbiblioteca junto com o PyProjbiblioteca para reprojetar o fronteira da autoridade locals da Irlanda, no formato Shapefile, de Mercator Transversal Irlandês para WGS 84 usando Pitão.

Para acompanhar, baixe os limites de administração do Central Statistics Office (CSO) e renomeie os arquivos para Ireland_LA. Mova os arquivos para o diretório a partir do qual deseja trabalhar.

Você precisará instalar as bibliotecas, você pode usar fácil instalação ou pip abrindo o prompt de comando janela e entrar

Abra um interativo Pitão janela e digite o seguinte para certificar-se de que você tem acesso às bibliotecas.

Se nenhum erro for retornado, você está pronto para prosseguir.

Minha tentativa original de converter os dados levou a essa monstruosidade & # 8230

e eu imediatamente percebi que vários limites da autoridade local eram compostos de geometria de várias partes.

Precisaríamos de dois construtos, um para reconstruir recursos de geometria única e outro para reconstruir recursos de geometria de várias partes.

Portanto, vamos começar. No seu favorito Pitão IDE abre um novo script, importa as bibliotecas e salve-o. Há um link na parte inferior da postagem para fazer o download do código.

Defina uma função para criar um arquivo de projeção (.prj). Veja a postagem sobre Gerando um arquivo de projeção (.prj) usando Python para mais informações.

Defina um caminho para o seu diretório de trabalho onde o Ireland_LA os arquivos residem. Você pode criar um caminho semelhante ao meu abaixo ou definir o seu próprio, apenas certifique-se de que o Shapefile está localizado lá.

Usando PyShp criar uma Leitor objeto para acessar os dados do Ireland_LA Shapefile.

Criar uma escritor objeto para gravar dados como um novo Shapefile.

Defina variáveis ​​para acesso ao campo informações do Shapefile original e do novo.

Pegaremos todas as informações de campo do original e copiá-lo-emos para o novo. O & # 8216 Bandeira de exclusão & # 8217 conforme definido no padrão Shapefile será ignorado (o tupla no E se ), e queremos dados das listas que seguem a tupla que definem o nome do campo, tipo de dados e comprimento do campo. Basicamente, estamos simplesmente replicando a estrutura de campo do original para o novo.

Agora queremos preencher os campos com informações de atributos. Crie uma variável para acessar os registros do arquivo original.

Copie os registros do original para o novo.

No snippet acima, o args variável mantém cada registro como uma lista e, em seguida, descompacta essa lista como argumentos em wgs_shp.record (attr_1, attr_2, attr_3 & # 8230.), que cria um registro no dbf Arquivo.

Agora temos todos os dados de atributos copiados. Vamos começar a busca para converter os dados de ITM para WGS84! Defina a projeção de entrada (a projeção do arquivo original) e uma projeção de saída usando PyProj..

Precisamos acessar a geometria dos recursos no arquivo original, portanto, dê a você mesmo acesso a ele.

Agora, fazemos um loop por cada recurso no conjunto de dados original, acessamos todos os pontos que compõem a geometria, convertemos as coordenadas de cada ponto e remontamos a geometria transformada no novo Shapefile. O E se instrução tratará da geometria com apenas uma parte constituindo o recurso.

O senão declaração lida com geometrias com várias peças.

E gere o arquivo de projeção para ele.

Salve e execute o arquivo. Abra o Shapefile em um GIS inspecionar. Dê uma olhada na tabela de atributos, bem preenchida com os dados. Você deve ser capaz de configurar o código para outros arquivos de polígono, apenas alterar o Shapefile de entrada original, definir as projeções (entrada e saída) e salvar um novo Shapefile. Também não se esqueça do arquivo de projeção!

Você pode baixar o código-fonte deste post aqui. Clique com o botão direito no link de download na página e selecione Salvar arquivo como & # 8230, antes de salvar, altere o .TXT no nome do arquivo para .py e salve.

Se alguém vir uma maneira de tornar o código mais eficiente, por favor, comente. Agradecemos seu feedback.


Extensões de arquivo shapefile

Shapefiles são um formato simples e não-topológico para armazenar a localização geométrica e as informações de atributos de feições geográficas. Um arquivo de forma é um dos formatos de dados espaciais com o qual você pode trabalhar e editar no ArcGIS.

O formato do arquivo de forma define a geometria e os atributos dos recursos referenciados geograficamente em três ou mais arquivos com extensões de arquivo específicas que devem ser armazenados no mesmo espaço de trabalho do projeto. Eles são:

  • .shp - O arquivo principal que armazena a geometria do recurso necessária.
  • .shx - O arquivo de índice que armazena o índice da geometria do recurso necessária.
  • .dbf - A tabela dBASE que armazena as informações de atributo dos recursos necessários.

Existe uma relação um-para-um entre geometria e atributos, que se baseia no número de registro. Os registros de atributos no arquivo dBASE devem estar na mesma ordem que os registros no arquivo principal.

Cada arquivo deve ter o mesmo prefixo, por exemplo, roads.shp, roads.shx e roads.dbf.

Ao visualizar shapefiles no ArcCatalog (ou qualquer aplicativo ArcGIS), você verá apenas um arquivo representando o shapefile, entretanto, você pode usar o Windows Explorer para visualizar todos os arquivos associados a um shapefile. Ao copiar arquivos de forma, é recomendado que você faça isso no ArcCatalog ou usando uma ferramenta de geoprocessamento. No entanto, se você copiar um shapefile fora do ArcGIS, certifique-se de copiar todos os arquivos que compõem o shapefile.


Capítulos

Autor: David DiBiase, palestrante sênior, John A. Dutton e-Education Institute, e diretor de educação, Industry Solutions, Esri. Instrutores e colaboradores: Jim Sloan, palestrante sênior, John A. Dutton e-Education Institute Ryan Baxter, assistente de pesquisa sênior, John A. Dutton e-Education Institute, Beth King, palestrante sênior, John A. Dutton e-Education Institute and Assistant Gerente do Programa de Educação Geoespacial Online e Adrienne Goldsberry, Professora Sênior, John A. Dutton e-Education Institute College of Earth and Mineral Sciences, The Pennsylvania State University.

Penn State Professional Master Degree in GIS: Vencedor do prêmio Sloan Consortium de 2009 para o programa online mais notável

Este módulo de material didático faz parte da Iniciativa REA da Penn State College of Earth and Mineral Sciences.

O College of Earth and Mineral Sciences está empenhado em tornar seus sites acessíveis a todos os usuários e agradece comentários ou sugestões sobre melhorias de acesso. Envie comentários ou sugestões sobre acessibilidade para o editor do site. O editor do site também pode ser contatado com perguntas ou comentários sobre este Recurso Educacional Aberto.


Considerações de geoprocessamento para saída de shapefile

Esses problemas (e mais) significam que os shapefiles são uma escolha ruim para gerenciamento ativo de banco de dados & # 8212; eles não lidam com o ciclo de vida moderno de criação, edição, controle de versão e arquivamento de dados.

Quando devo usar um shapefile?


  • Ao exportar dados para uso em um aplicativo de software não ESRI.
  • Ao exportar dados para uso no ArcView 3 ou ArcInfo Workstation.
  • Quando você precisa escrever recursos e atributos simples rapidamente, como para serviços de geoprocessamento do ArcGIS Server. Mas esteja ciente das limitações, conforme detalhado abaixo.

Quando não devo usar um shapefile?

Com algumas exceções indicadas abaixo, os shapefiles são aceitáveis ​​para armazenar geometria de recurso simples. No entanto, os shapefiles têm sérios problemas com atributos. Por exemplo, eles não podem armazenar valores nulos, eles arredondam números, têm suporte insuficiente para cadeias de caracteres Unicode, não permitem nomes de campo com mais de 10 caracteres e não podem armazenar data e hora em um campo. Essas são apenas as questões principais. Além disso, eles não oferecem suporte a recursos encontrados em bancos de dados geográficos, como domínios e subtipos. Portanto, a menos que você tenha atributos muito simples e nenhum recurso de geodatabase, não use shapefiles.


Componentes do arquivo de forma e extensões de arquivo

Os shapefiles são armazenados em três ou mais arquivos, todos com o mesmo prefixo e armazenados na mesma pasta do sistema (espaço de trabalho do shapefile). Você verá os arquivos individuais ao visualizar a pasta no Windows Explorer, não no ArcCatalog.

Extensão Descrição Obrigatório?
.shp O arquivo principal que armazena a geometria do recurso. Nenhum atributo é armazenado neste arquivo & # 8212 somente geometria. sim
.shx Um arquivo complementar ao .shp que armazena a posição de IDs de recursos individuais no arquivo .shp. sim
.dbf A tabela dBASE que armazena as informações de atributos dos recursos. sim
.sbn e .sbx Arquivos que armazenam o índice espacial dos recursos. Não
.atx Criado para cada índice de atributo dBASE criado no ArcCatalog. Não
.ixs e .mxs Índice de geocodificação para arquivos de forma de leitura / gravação. Não
.prj O arquivo que armazena as informações do sistema de coordenadas. Não
.xml Metadata for ArcGIS & # 8212 armazena informações sobre o arquivo de forma. Não


  • Há um limite de tamanho de 2 GB para qualquer arquivo de componente do arquivo de forma, o que se traduz em um máximo de aproximadamente 70 milhões de recursos de pontos. O número real de recursos de linha ou polígono que você pode armazenar em um arquivo de forma depende do número de vértices em cada linha ou polígono (um vértice é equivalente a um ponto).

  • Os shapefiles não contêm uma tolerância XY, como as classes de recursos de geodatabase. A tolerância XY é a distância mínima entre as coordenadas antes de serem consideradas iguais. Essa tolerância XY é usada ao avaliar relacionamentos entre recursos dentro da mesma classe de recursos ou entre várias classes de recursos diferentes. Ele também é usado extensivamente ao editar recursos. Se você estiver realizando qualquer tipo de operação envolvendo comparação entre recursos, como o uso de ferramentas de Sobreposição, a ferramenta Clip, a ferramenta Selecionar Camada por Localização ou quase todas as ferramentas que usam duas ou mais classes de recursos como entrada, você deve usar um geodatabase classes de recursos (que têm uma tolerância XY) em vez de arquivos de forma.

  • Um arquivo de forma pode ocupar de três a cinco vezes mais espaço do que um arquivo de geodatabase ou SDE devido aos métodos de compactação de formato.

  • Os shapefiles suportam multipatches, mas não têm suporte para os seguintes recursos multipatch avançados:

  • Coordenadas de textura
  • Texturas e cor da peça
  • Iluminação normal

    • Ao contrário de outros formatos, os atributos numéricos são armazenados em formato de caractere em vez de formato binário. Para números reais (ou seja, números contendo casas decimais), isso pode levar a erros de arredondamento. (Essa limitação não se aplica a coordenadas de forma, apenas atributos.) A tabela a seguir resume a largura do campo para cada tipo de dados.

      Tipo de dados geodatabaseTipo de campo dBASELargura do campo dBASE (número de caracteres)
      ID do objetoNúmero9
      Inteiro curtoNúmero4
      Inteiro longoNúmero9
      FlutuadorFlutuador13
      DobroFlutuador13
      TextoPersonagem254
      DataData8

    • O padrão de arquivo dBASE só oferece suporte a caracteres ANSI em seus nomes e valores de campo. O ESRI adicionou amplo suporte Unicode para arquivos dBASE para permitir que você armazene nomes e valores de campo Unicode. Mas este suporte adicional reside apenas no ArcGIS e não em aplicativos não ESRI. O suporte a Unicode no dBASE é um esforço contínuo da ESRI, o que significa que os problemas continuam a ser encontrados e resolvidos.

    NOTA: Se você tiver que suportar Unicode em seus nomes de campo ou valores de campo, sugerimos fortemente que você use geodatabase em vez de shapefiles.


    • Os nomes dos campos não podem ter mais de 10 caracteres.
    • O comprimento máximo do registro de um atributo é 4.000 bytes. O comprimento do registro é o número de bytes usados ​​para definir todos os campos, não o número de bytes usados ​​para armazenar os valores reais.
    • The maximum number of fields is 255. A conversion to shapefile will convert the first 255 fields if this limit is exceeded.
    • The dBASE file must contain at least one field. When you create a new shapefile or dBASE table, an integer ID field is created as a default.
    • dBASE files do not support type blob, guid, global ID, coordinate ID, or raster field types.
    • dBASE files have little SQL support aside from a WHERE clause.
    • Attribute indexes are deleted when you save edits, and you must re-create them from scratch.

    • Subtypes
    • Attribute domains
    • Geometric networks
    • Topologies
    • Annotation


    Shapefiles and geoprocessing

    Any geoprocessing tool that outputs a feature class allows you to choose either a shapefile or geodatabase feature class as the output format. Similarly, a tool that outputs a table allows you to choose either a dBASE file (.dbf) or a geodatabase table as the output. You should always be aware of which format you use and the consequences of converting a geodatabase input to a shapefile output.

    Geoprocessing tools auto-generate an output feature class or table for you. This autogenerated output is based on a number of factors as described in Specifying tool inputs and outputs. If your scratch workspace environment is set to a system folder, and not a geodatabase, the auto-generated output features class will be a shapefile or dBASE file, as illustrated below.

    It is suggested that you set your scratch workspace to a file geodatabase so that the auto-generated output is written to a file geodatabase, not a shapefile or .dbf table.

    Because shapefiles write quickly, they are often used to write intermediate data in models since this makes for faster model execution. However, writing to a file geodatabase is almost as fast as writing to a shapefile, so unless execution speed is critical, you should always use a file geodatabase for intermediate and output data. If you do use shapefiles, be aware of their limitations as described above and only use shapefiles for simple features and attributes. An alternative to using shapefiles for intermediate data is to write features to the in_memory workspace.
    Learn more about writing features to the in_memory workspace.


    An effective guide to geographic information systems and remote sensing analysis using Python 3

    • Construct applications for GIS development by exploiting Python
    • This focuses on built-in Python modules and libraries compatible with the Python Packaging Index distribution system - no compiling of C libraries necessary
    • This practical, hands-on tutorial teaches you all about Geospatial analysis in Python

    If you are a Python developer, researcher, or analyst who wants to perform Geospatial, modeling, and GIS analysis with Python, then this book is for you. Familarity with digital mapping and analysis using Python or another scripting language for automation or crunching data manually is appreciated.

    • Automate Geospatial analysis workflows using Python
    • Code the simplest possible GIS in 60 lines of Python
    • Mold thematic maps with Python tools
    • Get hold of the various forms that geospatial data comes in
    • Produce elevation contours using Python tools
    • Create flood inundation models
    • Apply Geospatial analysis to find out about real-time data tracking and for storm chasing

    Geospatial Analysis is used in almost every field you can think of from medicine, to defense, to farming. This book will guide you gently into this exciting and complex field. It walks you through the building blocks of geospatial analysis and how to apply them to influence decision making using the latest Python software.

    Learning Geospatial Analysis with Python, 2nd Edition uses the expressive and powerful Python 3 programming language to guide you through geographic information systems, remote sensing, topography, and more, while providing a framework for you to approach geospatial analysis effectively, but on your own terms. We start by giving you a little background on the field, and a survey of the techniques and technology used. We then split the field into its component specialty areas: GIS, remote sensing, elevation data, advanced modeling, and real-time data.

    This book will teach you everything you need to know about, Geospatial Analysis from using a particular software package or API to using generic algorithms that can be applied. This book focuses on pure Python whenever possible to minimize compiling platform-dependent binaries, so that you don't become bogged down in just getting ready to do analysis. This book will round out your technical library through handy recipes that will give you a good understanding of a field that supplements many a modern day human endeavors.

    This is a practical, hands-on tutorial that teaches you all about Geospatial analysis interactively using Python.


    Section 1: The History and the Present of the Industry

    This section starts by demonstrating common geospatial analysis processes using illustrations, basic formulas, simple code, and Python. Building on that, you'll learn how to play with geospatial data&mdashacquiring data and preparing it for various analyses. After that, you'll gain an understanding of the various software packages and libraries used in the geospatial technology ecosystem. At the end of this section, you'll learn how to evaluate any geospatial tool.

    This section includes the following chapters:

      , Learning about Geospatial Analysis with Python , Learning Geospatial DataChapter 3, The Geospatial Technology Landscape

    About the Author

    Joel Lawhead

    Joel Lawhead is a PMI-certified Project Management Professional, a certified GIS Professional, and the Chief Information Officer of NVision Solutions Inc., an award-winning firm specializing in geospatial technology integration and sensor engineering for NASA, FEMA, NOAA, the US Navy, and many other commercial and non-profit organizations. Joel began using Python in 1997 and started combining it with geospatial software development in 2000. He has authored multiple editions of Learning Geospatial Analysis with Python and QGIS Python Programming Cookbook, both from Packt. He is also the developer of the open source Python Shapefile Library (PyShp) and maintains a geospatial technical blog, GeospatialPython, and Twitter feed, @SpatialPython.


    Assista o vídeo: PyShp - Reading Shapefile Python