Mais

Usando coleções de geometria com Fiona para escrever saídas de multipontos e pontos?


Estou recebendo o seguinte erro nesta função:

ValueError: O tipo de geometria do registro não corresponde ao tipo de geometria do esquema de coleção: 'Point'! = 'MultiPoint'

O problema é que tenho multipontos misturados com pontos regulares. Quando tento escrever as saídas em, recebo um problema de confusão de esquema

O registro que causa problemas em 'output.write' é este (nota: para um MultiPoint ele só tem um x, y):

{'geometry': {'type': 'MultiPoint', 'coordinates': [(13531245.475704141, 2886003.2689278126)]}, 'type': 'Feature', 'id': '0', 'properties': OrderedDict ([ (u'H20Status ', u'Fair')])}

Quando eu for:

if geom ['type'] == 'MultiPonto': # divide os Multipontos em pontos # ou seja,  para pt em minha_forma: pt = self.move_point (pt, compare, dist)

'pt' torna-se um 'Ponto':

POINT (13531245.47570414 2886003.268927813)

Então, quando tento escrever de volta para o que era (um multiponto):

# write to outfile - ONDE TUDO FALHA output.write ({'geometry': mapping (pt), 'properties': item ['properties']})

Eu entendi isso:

ValueError: O tipo de geometria do registro não corresponde ao tipo de geometria do esquema de coleção: 'Point'! = 'MultiPoint'

Se eu tentar reescrever 'pt' em um 'MultiPonto' ANTES da operação de gravação (e novamente, este é um multiponto com UM conjunto de coordenadas) assim,

mpoint = MultiPonto (pt)

Eu entendi isso:

Arquivo "C:  Python27  lib  site-packages  shapely  geometry  multipoint.py", linha 143, em geos_multipoint_from_py assert len ​​(array ['shape']) == 2 AssertionError

* Código de trabalho completo após a ajuda de @gene e @Vince *

def process_file (self, in_file, out_file, compare_file, dist): # abre o arquivo de entrada e compara o arquivo # loop sobre cada um com fiona.open (in_file, 'r') como entrada: meta = input.meta # O outFile tem o mesmo crs, schema as inFile com fiona.open (out_file, 'w', ** meta) como saída: with fiona.open (compare_file, 'r') as compare: # Ler geometrias bem torneadas do arquivo # Loop através de todos os objetos bem formados # type (item) = 'dict' para o item na entrada: geom = item ['geometry'] my_shape = shape (geom) # verifique se é um multiponto ou ponto se geom ['type'] == 'MultiPoint': # divida os multipontos em pontos # ie  para pt em my_shape: single_point = self.move_point (pt, compare, dist) mpoint = MultiPoint ([(single_point.x, single_point.y)]) mpoint_for_merge = shape (mapping (mpoint)) # write to outfile - ONDE TUDO AGORA TRABALHOS output.write ({'geometry': mapping (mpoint_for_merge), 'properties': item ['properties']}) elif geom ['type'] == 'Point': # return of move_point é um geom bem torneado # ie  my_shape = self.move_point (my_shape, compare, dist) # write to outfile output.write ({'geometry': mapping (my_shape), 'properties': item ['properties']}) else: raise ValueError ('geometria não tratada tipo: '+ repr (geom.type))

Mantenha as coisas simples, um MultiPonto é uma lista simples de pontos e o tipo de geometria pode ser obtido por Fiona (chave ['geometria'] ['tipo']) ou por Shapely (geometry.type)

com fiona.open (in_file, 'r') como entrada: com fiona.open (compare_file, 'r') como compare: meta = input.meta com fiona.open (out_file, 'w', ** meta) como saída : para item na entrada: geom = item ['geometry'] my_shape = shape (geom) # verifique se é um Multiponto if geom ['type'] == 'MultiPoint': para pt em my_shape: my_shape = self.move_point (pt, compare, dist) else: # the Points minha_forma = self.move_point (minha_forma, comparar, dist)

Você também pode usar

if my_shape.type == 'MultiPoint':

Novo

Seu problema é transformar um Ponto em MultiPonto. Com Shapely você precisa usar as coordenadas do Ponto e não o Ponto em si (veja Coleções de Pontos)

Multi = MultiPonto ([(13531245.475704141, 2886003.2689278126)]) imprimir Multi MULTIPOINT (13531245.47570414 2886003.268927813) ponto = Multi [0] ponto de impressão PONTO (13531245.47570414 2886003.268927813)

Agora, você não pode usarmpoint = MultiPonto (ponto)mas

mpoint = MultiPoint ([(point.x, point.y)]) imprimir mapeamento (mpoint) {'type': 'MultiPoint', 'coordinates': ((13531245.475704141, 2886003.2689278126),)} # e forma de impressão (mapeamento ( mpoint)) MULTIPOINT (13531245.47570414 2886003.268927813)

Shapely: tuplas sem vírgulas com LineString

é bastante complicado, mas é uma longa história: usei várias bibliotecas como a OSMNx para traçar uma rota entre vários pontos de uma cidade. Agora eu iria convertê-lo em um arquivo shp.

A rota é uma lista cheia de id de nós. Em seguida, esses id foram usados ​​para extrair a latitude e longitude de cada nó. Fiz tuplas para concatenar as coordenadas de cada par de nós (um início, uma chegada) com um loop for, assim:

Aqui está o resultado da impressão (jornada) no final do loop:

Cada tupla aparece corretamente. Mas quando eu quero converter jornada em uma LineString bem torneada. E ele retorna o seguinte:

Consequentemente, não posso convertê-lo em um shp usando fiona:

-------------------------------------------------- ------------------------- TypeError Traceback (última chamada mais recente) in () 4> 5 ----> 6 com fiona.open ( 'test.shp', 'w', 'ESRI Shapefile', esquema) como c: 7 c.write (<8 'geometria': mapeamento (traço)

/usr/local/lib/python3.5/dist-packages/fiona/iniciar.py em aberto (caminho, modo, driver, esquema, crs, codificação, camada, vfs, drivers_ativados, crs_wkt) 173 c = Coleção (caminho, modo, crs = crs, driver = driver, esquema = this_schema, 174 encoding = encoding , layer = layer, vsi = vsi, archive = archive, -> 175 enabled_drivers = enabled_drivers, crs_wkt = crs_wkt) 176 else: 177 raise ValueError (

/usr/local/lib/python3.5/dist-packages/fiona/collection.py em iniciar(self, path, mode, driver, schema, crs, encoding, layer, vsi, archive, enabled_drivers, crs_wkt, ** kwargs) 154 elif self.mode in ('a', 'w'): 155 self.session = WritingSession () -> 156 self.session.start (self, ** kwargs) 157 exceto IOError: 158 self.session = Nenhum

fiona / ogrext.pyx em fiona.ogrext.WritingSession.start (fiona / ogrext2.c: 16207) ()

TypeError: o argumento do tipo 'int' não é iterável

Não entendo por que as tuplas são convertidas sem uma vírgula entre latitude e longitude. Além disso, existem várias duplicações (as segundas coordenadas da terceira linha são as primeiras coordenadas da quarta linha, etc.) e talvez isso possa ser fonte de erro para o futuro shp.


Fiona

Fiona é a API vetorial elegante e ágil da GDAL para programadores Python.

Fiona foi projetada para ser simples e confiável. Ele se concentra na leitura e gravação de dados no estilo Python IO padrão e depende de tipos e protocolos Python familiares, como arquivos, dicionários, mapeamentos e iteradores, em vez de classes específicas para OGR. Fiona pode ler e gravar dados do mundo real usando formatos GIS multicamadas e sistemas de arquivos virtuais compactados e se integra prontamente com outros pacotes GIS Python, como pyproj, Rtree e Shapely. Fiona é compatível apenas com as versões 2.7 e 3.4+ do CPython.


Método de buffer GeometryEngine (IEnumerable Geometry, IEnumerable Double, Boolean)

As geometrias devem ter a mesma referência espacial. As medições planas de distância e área podem ser extremamente imprecisas se usar uma referência espacial inadequada. Certifique-se de compreender o potencial de erro com a referência espacial da geometria. Se você precisar calcular resultados mais precisos, considere usar uma referência espacial diferente ou usar o equivalente geodésico, BufferGeodetic (IEnumerable Geometry, IEnumerable Double, LinearUnit, Double, GeodeticCurveType, Boolean). Consulte o documento Introdução às Referências Espaciais para obter mais informações sobre referências espaciais. Se unionResult for true, a coleção de saída conterá um único resultado. Se geometries estiver vazio, um array vazio é retornado.

Este método permite a criação de diferentes tamanhos de geometria de saída em buffer para cada entrada no geometrias coleção com base nos valores do distâncias coleção. Na maioria das circunstâncias, haveria uma correspondência de entrada um para um geometrias para o buffer de entrada distâncias. No entanto, é possível ter menos buffer de entrada distâncias do que a entrada geometrias. Neste caso, o último valor de distância no buffer distâncias coleção será usada para o resto do geometrias. Em um caso extremo, pode-se especificar um único valor de buffer no buffer de entrada distâncias coleção e esse valor se aplicaria a todas as entradas geometrias coleção.

Os polígonos gerados a partir deste método estático são baseados na SpatialReference das geometrias de entrada. Uma SpatialReference é uma combinação de um elipsóide, datum e um sistema de coordenadas usado para exibir (também conhecido como projeto) dados geográficos da Terra tridimensional em uma superfície bidimensional (como um pedaço de papel ou monitor de computador). Um bom artigo para descrever como funciona uma referência espacial pode ser encontrado aqui. O importante a saber sobre a criação de buffers é que alguns SpatialReferences são melhores do que outros para obter resultados precisos. Para obter os polígonos de buffer mais precisos usando este método, considere o uso de uma referência espacial de 'preservação de área', como: Albers, Lambert, Mollweide, Hammer, Senoidal e semelhantes. Se as geometrias de entrada para este método não forem baseadas em uma boa 'área preservada' SpatialReference, então existem duas opções disponíveis para produzir buffers precisos: (1) usar o método estático de projeto (geometria, SpatialReference) para projetar a geometria em uma coordenada sistema que é mais adequado para buffers ou (2) usar o BufferGeodetic (IEnumerable Geometry, IEnumerable Double, LinearUnit, Double, GeodeticCurveType, Boolean) Método estático que usará um algoritmo de projeção interno para converter a geometria em um sistema de coordenadas esféricas para obter o os buffers mais precisos possíveis.

Gere vários buffers individuais ou um único buffer unido em torno de vários pontos.


Usando coleções de geometria com Fiona para escrever saídas de multipontos e pontos? - Sistemas de Informação Geográfica

Qual é o maior lote na cidade de San Francisco?

Ingestão e processamento de dados JSON em escala

Neste tutorial, você aprenderá como criar um pipeline StreamSets Data Collector (SDC) para ingerir centenas de milhares de objetos JSON, processando cada um por meio de código JavaScript e gravando os resultados no Apache Hive.

SF OpenData, o portal oficial de dados abertos da cidade e do condado de São Francisco, disponibiliza centenas de conjuntos de dados da cidade para uso por desenvolvedores, analistas, residentes e muito mais. Um desses conjuntos de dados contém as coordenadas do polígono para cada lote na cidade - um total de 206560 registros, em formato de arquivo de forma.

Felizmente, Mirco Zeiss, um consultor da CGI na Alemanha, converteu os dados do arquivo de forma em JSON e os enviou para um projeto GitHub, já que ele "precisava de um arquivo .json muito grande para testar vários códigos". Podemos usar SDC para ler os dados JSON, calcular a área de cada lote em um avaliador JavaScript e gravar os registros resultantes no Hive para análise. Especificamente, estamos procurando responder à pergunta: "Qual é o maior lote da cidade de São Francisco?"

Você precisará do seguinte:

Hadoop - usei o QuickStart VM para Cloudera Distribution Hadoop (CDH) 5.5, mas outras versões e distribuições provavelmente funcionarão tão bem. Eu recomendo fortemente trabalhar com o CDH Quickstart Tutorial se você não tiver experiência anterior com Hadoop.

StreamSets Data Collector - este tutorial assume que você instalou StreamSets no Cloudera QuickStart VM, junto com o CDH. Consulte esta entrada do blog para obter um guia prático para começar. De novo eu altamente recomendado trabalhando com o tutorial para ter uma ideia do SDC.

Ferramentas de desenvolvimento comuns, como git

Baixe os dados JSON de origem

A primeira etapa é baixar os dados JSON de origem do GitHub. Basta clonar o projeto:

O arquivo citylots.json é grande - 181 MB - contendo mais de 200.000 objetos JSON, cada um representando um único lote da cidade. Aqui estão as primeiras linhas do arquivo, formatadas para facilitar a leitura:

O arquivo inteiro é um único objeto JSON, que contém uma matriz de objetos de lote em sua propriedade features.

Usaremos o SDC Directory Origin para ler os dados JSON. Como o Directory Origin pode aceitar uma série de objetos JSON ou uma matriz JSON de objetos, precisaremos pré-processar um pouco os dados. Felizmente, isso é uma simples questão de excluir tudo antes do primeiro colchete de abertura ‘[‘ na parte superior do arquivo, e tudo depois do último colchete de fechamento ‘]’ no final do arquivo. Você precisará usar um editor capaz de lidar com arquivos muito grandes. Eu usei o vim. Salve o arquivo como citylots-array.json.

Agora que os dados de origem estão no formato correto, você pode começar a trabalhar com o SDC.

  1. Se você não executou o tutorial StreamSets, precisará criar diretórios para manter os arquivos de origem, destino e erro, no diretório base StreamSets:
  • / & ltbase diretório & gt / tutorial / origin
  • / & ltbase diretório & gt / tutorial / destino
  • / & ltbase diretório & gt / tutorial / error

Mova o arquivo citylots-array.json para / & ltbase diretório & gt / tutorial / origin

Se você ainda não estiver conectado, faça login no SDC.

De Casa página ou Começando página, clique Criar novo pipeline.

No Novo Pipeline janela, insira um nome de pipeline e uma descrição opcional e clique em Salve .

No painel Propriedades, clique no Registros de Erro guia para o Registros de Erro propriedade, selecione Gravar no arquivo. Isso grava registros de erros em um arquivo para que você possa lidar com os registros de erros sem precisar interromper o pipeline.

Clique no Registros de erro - Gravar no arquivo guia e conjunto Diretório para / & ltbase diretório & gt / tutorial / error

Usaremos a origem do diretório para processar os dados do lote municipal JSON.

Para adicionar o estágio à tela, na Barra de Ajuda de Criação de Pipeline, clique em Selecione Origem e diretório gt. Ou, na biblioteca de fases, clique no Diretório origem. A origem é exibida na tela e o painel Propriedades exibe as propriedades do palco.

No painel Propriedades, clique no arquivos guia e configure as seguintes propriedades. Use os padrões para propriedades que não estão listadas:

  1. Clique no JSON guia e configure as seguintes propriedades. Use os padrões para propriedades que não estão listadas:

Seu pipeline deve ser assim:

É uma boa ideia visualizar os dados para verificar se você configurou a origem do diretório corretamente. Acima da tela do pipeline, clique no Antevisão ícone e aceite as propriedades padrão. Você deve ser capaz de detalhar os primeiros registros de Dados de saída abaixo da tela do pipeline e veja as coordenadas do polígono do lote da cidade:

Se você encontrar algum erro, verifique as propriedades do pipeline e da origem.

Agora que verificamos que a origem do diretório está lendo os dados JSON corretamente, clique no botão Fechar visualização ícone.

Configure um avaliador de JavaScript

Agora que nosso pipeline está lendo com sucesso os dados JSON, precisamos calcular a área de cada lote da cidade. Usei uma versão do algoritmo para calcular a área de um polígono na superfície da Terra fornecida em uma resposta no StackExchange de Sistemas de Informação Geográfica de Tim Schaub.

Adicione um Avaliador de JavaScript processador à tela e conecte o primeiro local de saída da Origem do diretório a ele.

Com o JavaScript Evaluator selecionado, no painel Propriedades, clique no JavaScript aba.

Exclua o conteúdo existente do Roteiro caixa de texto e cole no seguinte script:

Visualize o pipeline novamente, clique em JavaScript Evaluator e você verá que os registros de saída agora têm um campo AREA:

Observe que o script apenas copia o campo de propriedades do registro de entrada para o registro de saída e define a área. Isso "nivela" o registro e facilita a gravação em uma tabela do Apache Hive.

Clique no Fechar visualização ícone e adicionaremos um destino para nossos registros processados.

Configurar um destino Hadoop FS

Poderíamos ir em frente e configurar um destino de streaming Hive, mas gravar no Hive é muito, muito mais lento do que simplesmente anexar dados a um arquivo no disco, então vamos testar o pipeline em todo o conjunto de dados simplesmente gravando-o em um arquivo JSON . Isso nos dará alguma confiança de que o pipeline está correto antes de investirmos tempo em executá-lo no Hive.

Adicione um Hadoop FS destino à tela e conecte o avaliador de JavaScript a ela.

No painel Propriedades, clique no Hadoop FS aba. Para usar o Hadoop FS para gravar em um sistema de arquivos local, configure as seguintes propriedades. Use os padrões para propriedades que não estão listadas:

  1. Clique no Arquivos de saída guia e configure as seguintes propriedades. Use os padrões para propriedades que não estão listadas:

Agora que o pipeline básico está concluído, você pode iniciá-lo clicando no Começar ícone.

O console entra no modo Monitor e mostra estatísticas resumidas no painel Monitor. O SDC levará alguns minutos para trabalhar com os registros.

Quando todos os 206.560 registros forem ingeridos, observe que o JavaScript Evaluator detectou 6 erros:

Clique no Avaliador de JavaScript na tela do pipeline e, em seguida, o Erros guia à esquerda. Você verá que os seis erros são todos SCRIPTING_04 - Script enviado registro para erro: TypeError: Não é possível ler a propriedade "tipo" de nulo. Analise o primeiro erro e você verá o porquê - o campo de geometria para este registro é nulo.

Se você trabalhar com os outros cinco registros listados, verá que todos eles têm geometria nula. Acontece que um punhado de plotagens não tem coordenadas registradas. Vamos filtrá-los para que o avaliador de JavaScript possa operar com sucesso em sua entrada.

Dados de rota com o seletor de fluxo

Vamos configurar um Seletor de fluxo para rotear apenas os registros com um campo de geometria não nula para o avaliador de JavaScript.

Na Barra de Ajuda de Criação de Pipeline, clique em Selecione o processador para conectar & gt Stream Selector. Ou, na biblioteca de palco, selecione o Seletor de fluxo processador e conectar a origem do diretório a ele.

Clique no Condições aba. Uma condição para o fluxo padrão é exibida. O fluxo padrão representa quaisquer registros não capturados por outras condições.

Clique no Adicionar ícone. Uma caixa de texto de condição é exibida no painel Propriedade e o local de saída correspondente aparece no cenário na tela.

A condição a seguir captura registros em que o campo de geometria não é nulo. Você pode copiar e colar a expressão, mas tente digitá-la para ver como o recurso de conclusão de expressão ajuda a selecionar a função e garantir a sintaxe válida.

Todos os registros que correspondem a esta condição passam para o primeiro fluxo de saída. Todos os outros registros são capturados pela condição padrão e passados ​​pelo segundo fluxo de saída.

O Seletor de fluxo deve ser semelhante a este:

Em nosso cenário, não temos uso para registros sem geometria associada, então vamos apenas descartá-los. SDC inclui um destino de Lixo que atende às nossas necessidades perfeitamente. Basta adicionar um Lixo destino à tela e conecte a saída padrão do Seletor de fluxo (marcado como ‘2’) a ele.

Se você tentar executar o pipeline agora, perceberá que ele, na verdade, não processa nenhum registro. Por que é isso? Bem, o pipeline já processou todos os arquivos em seu diretório de entrada, então está esperando por uma nova entrada. Como ainda estamos desenvolvendo nosso pipeline, precisamos ser capazes de redefinir seu estado para que ele possa processar os mesmos dados de entrada novamente.

Pare o pipeline se estiver em execução, clique no Mais ícone acima da tela do pipeline e clique em Reiniciar origem. Será solicitado que você confirme se realmente deseja redefinir a origem, então clique OK.

Agora clique no Corre ícone. O pipeline irá reprocessar os dados de origem e, após alguns minutos, você verá que todos os 206.560 registros foram processados ​​com sucesso, sem erros:

Clique no Pare ícone para parar o pipeline.

Agora que vimos que nosso pipeline está funcionando corretamente, precisamos trocar o destino Hadoop FS por um destino que permitirá consultas. Vamos criar uma nova tabela no Hive para receber nossos registros de saída. O destino SDC Hive Streaming suporta o formato de arquivo ORC (Optimized Row Columnar), então precisaremos especificar isso em nosso código de linguagem de definição de dados (DDL).

Supondo que você esteja usando o Cloudera Distribution Hadoop (CDH) QuickStart VM:

Abra uma nova guia do navegador e vá para http: //quickstart.cloudera: 8888 / beeswax /

Cole o seguinte código DDL na área de consulta:

Clique Executar.

O Hive deve criar a tabela em apenas alguns segundos, e a tela ficará assim:

Configurar um destino de streaming Hive

O Hive está pronto para nossos registros de saída, vamos configurar o destino do Hive Streaming:

Na tela do pipeline, clique no Hadoop FS destino e, em seguida, clique no Excluir ícone.

Adicione um Hive Streaming destino à tela e conecte o avaliador de JavaScript a ela.

No painel Propriedades, clique no Em geral aba. Configure as seguintes propriedades. Use os padrões para propriedades que não estão listadas:

  1. Clique no Colmeia aba. Configure as seguintes propriedades. Use os padrões para propriedades que não estão listadas:

Execute o pipeline, enviando registros para o Hive

Pare o pipeline se estiver em execução, clique no Mais ícone acima da tela do pipeline e clique em Reiniciar origem. Será solicitado que você confirme se realmente deseja redefinir a origem, então clique OK.

Agora clique no Corre ícone. Novamente, o pipeline irá reprocessar os dados de origem e, após cerca de algumas horas, você verá que todos os 206.560 registros foram processados ​​com sucesso, sem erros:

E daí É O maior lote na cidade de San Francisco?

Agora podemos executar uma consulta no Hive! Vamos pegar os dez maiores lotes. Cole a seguinte consulta na área de consulta do Hive e clique em Executar:

Depois de alguns minutos, você verá este resultado:

Aqui estão os resultados de uma forma mais legível:

mapblklot blklot block_num lot_num from_st to_st rua st_type ímpar Par área
1300001 1300001 1300 1 2901 2901 LYON ST O 6104089
1700001 1700001 1700 1 1101 1199 09 AVE O 4149480
4591A079 4591A079 4591A 79 520 520 LANÇA AVE E 2893706
7283004 7283004 7283 4 991 991 LAKE MERCED BLVD O 2480004
1939001 1939001 1939 1 300 600 CALIFÓRNIA AVE E 1684637
6220002 6220002 6220 2 61 61 JOHN F SHELLEY DR O 1351541
4502A002 4502A002 4502A 2 3305 3305 03RD ST O 696521
900003 900003 900 3 3751 3751 LAGUNA ST O 657407
1939002 1939002 1939 2 0 0 DESCONHECIDO NULO E 620400
7284001 7284001 7284 1 599 599 HORIZONTE BLVD O 462228

Então, em 6.104.089 m 2, ou 2,36 milhas quadradas, 2901 Lyon St é o maior lote de São Francisco. O que poderia estar nesse endereço? Vamos dar uma olhada:

É o Presidio! Para os propósitos da cidade de San Francisco, o Presidio é um lote gigante.

Neste tutorial, você aprendeu:

Como ingerir dados JSON por meio da origem do diretório

Como implementar um cálculo não trivial em um avaliador JavaScript

Como usar o destino Hadoop FS para desenvolvimento rápido de seu pipeline

Como descartar registros que não atendem aos critérios desejados

Como escrever registros no Apache Hive

E, finalmente, você aprendeu que o Presidio é o maior lote urbano de São Francisco!


Geometrias preparadas¶

Para obter uma geometria preparada, acesse a propriedade GEOSGeometry.prepared. Depois de ter uma instância PreparedGeometry, seus métodos de predicado espacial, listados abaixo, podem ser usados ​​com outros objetos GEOSGeometry. Uma operação com uma geometria preparada pode ser ordens de magnitude mais rápida - quanto mais complexa a geometria preparada, maior será a aceleração da operação. Para obter mais informações, consulte a página wiki GEOS sobre geometrias preparadas.

PreparedGeometry ¶

Todos os métodos em PreparedGeometry usam um outro argumento, que deve ser uma instância GEOSGeometry.

contém ( outro ) ¶ contains_properly ( outro ) ¶ tampas ( outro ) ¶ cruzes ( outro ) ¶ disjunto ( outro ) ¶ se cruza ( outro ) ¶ se sobrepõe ( outro ) ¶ toca ( outro ) ¶ dentro de ( outro ) ¶


Fábricas de geometria¶

De arquivo(file_h
Parâmetro:file_h (um Python Arquivo objeto ou um caminho de string para o arquivo) - arquivo de entrada que contém dados espaciais
Tipo de retorno:uma GEOSGeometria correspondente aos dados espaciais no arquivo
  • fragmento (string) - string que contém dados espaciais
  • srid (inteiro) - identificador de referência espacial

uma GEOSGeometria correspondendo aos dados espaciais na string


Drivers

Classe base para todos os motoristas.

Parâmetros:rd (RequestDataset) - O objeto do conjunto de dados da solicitação de entrada.
aula ocgis.driver.base. AbstractTabularDriver ( rd ) [fonte] ¶

Classe base para drivers tabulares (sem acesso de variável única ideal).

aula ocgis.driver.base. AbstractUnstructuredDriver [fonte] ¶

aula ocgis.driver.nc. DriverNetcdf ( rd ) [fonte] ¶

Driver para arquivos netCDF que evita qualquer sugestão de metadados.

Argumentos de palavra-chave do driver (driver_kwargs) para o conjunto de dados da solicitação:

Driver netCDF com reconhecimento de metadados que interpreta CF-Grid por padrão.

aula ocgis.driver.nc_scrip. DriverNetcdfSCRIP ( rd ) [fonte] ¶

Driver para o formato de grade SCRIP NetCDF estruturado e não estruturado. SCRIP é um formato legado que é o principal precursor da convenção NetCDF-CF. Por padrão, as grades SCRIP são tratadas como dados não estruturados, criando uma grade não estruturada.

aula ocgis.driver.nc_ugrid. DriverNetcdfUGRID ( rd ) [fonte] ¶

Driver para dados NetCDF seguindo a convenção UGRID. Ele também interpretará a convenção CF para eixos não sobrecarregados por UGRID.

aula ocgis.driver.vector. DriverVector ( rd ) [fonte] ¶

Driver para dados vetoriais GIS.

Argumentos de palavra-chave do driver (driver_kwargs) para o conjunto de dados da solicitação:

Driver para arquivos de valores separados por vírgula.


HGeometry também inclui uma estrutura de dados / tipo de dados para gráficos planares. Em particular, ele possui uma estrutura de dados EdgeOracle, que pode ser construída em tempo (O (n)) que pode testar se o gráfico contém uma aresta em tempo constante. Todos os tipos de geometria são parametrizados por um tipo numérico r. É bem sabido que algoritmos aritméticos de ponto flutuante e geométricos não combinam bem, ou seja, devido a erros de ponto flutuante, podem-se obter resultados completamente errados. Portanto, não aconselho usar Double ou Float para esses tipos. Em vários algoritmos, é suficiente se o tipo r for Fracional. Portanto, você pode usar um tipo de número exato, como Rational.

PolyTri é um triangulador de polígonos para polígonos simples baseado no algoritmo de Seidel [1]. PolyTri é lançado sob a licença Unlicense.


Argumentos de entrada

X & # 8212 Primeira coordenada vetor | matriz

Primeira coordenada, especificada como um vetor ou uma matriz. As entradas de matriz são suportadas apenas para eixos cartesianos.

A interpretação da primeira coordenada depende do tipo de eixos. Para eixos cartesianos, a primeira coordenada é x- posição do eixo em unidades de dados.

Se x e y forem ambos vetores com o mesmo comprimento, a linha plota uma única linha.

Se x e y forem matrizes com o mesmo tamanho, a linha plota várias linhas. A função plota colunas de y versus x.

Se um de x ou y for um vetor e o outro for uma matriz, a linha plota várias linhas. O comprimento do vetor deve ser igual a uma das dimensões da matriz:

Se o comprimento do vetor for igual ao número de linhas da matriz, a linha plota cada coluna da matriz em relação ao vetor.

Se o comprimento do vetor for igual ao número de colunas da matriz, a linha plota cada linha da matriz em relação ao vetor.

Se a matriz for quadrada, a linha plota cada coluna em relação ao vetor.

Para eixos polares, a primeira coordenada é o ângulo polar θ em radianos. Para eixos geográficos, a primeira coordenada é a latitude em graus. Para plotar linhas nesses tipos de eixos, x e y devem ter o mesmo tamanho.

Exemplo: x = linspace (0,10,25)

Tipos de dados: solteiro | duplo | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categórico | datetime | duração

Y & # 8212 Segunda coordenada vetor | matriz

Segunda coordenada, especificada como um vetor ou uma matriz. As entradas de matriz são suportadas apenas para eixos cartesianos.

A interpretação da segunda coordenada depende do tipo de eixos. Para eixos cartesianos, a segunda coordenada é y- posição do eixo em unidades de dados.

Se x e y forem ambos vetores com o mesmo comprimento, a linha plota uma única linha.

Se x e y forem matrizes com o mesmo tamanho, a linha plota várias linhas. A função plota colunas de y versus x.

Se um de x ou y for um vetor e o outro for uma matriz, a linha plota várias linhas. O comprimento do vetor deve ser igual a uma das dimensões da matriz:

Se o comprimento do vetor for igual ao número de linhas da matriz, a linha plota cada coluna da matriz em relação ao vetor.

Se o comprimento do vetor for igual ao número de colunas da matriz, a linha plota cada linha da matriz em relação ao vetor.

Se a matriz for quadrada, a linha plota cada coluna em relação ao vetor.

Para eixos polares, a segunda coordenada é o raio em unidades de dados. Para eixos geográficos, a segunda coordenada é a longitude em graus. Para plotar linhas nesses tipos de eixos, x e y devem ter o mesmo tamanho.

Exemplo: y = sin (x)

Tipos de dados: solteiro | duplo | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categórico | datetime | duração

Z & # 8212 Terceira coordenada vetor | matriz

Terceira coordenada, especificada como um vetor ou uma matriz. As entradas de matriz são suportadas apenas para eixos cartesianos.

A interpretação da terceira coordenada depende do tipo de eixos. Para eixos cartesianos, a terceira coordenada é z- posição do eixo em unidades de dados.

Se x, y e z são todos vetores com o mesmo comprimento, a linha plota uma única linha 3-D.

Se x, y e z forem todas matrizes com o mesmo tamanho, a linha plota várias linhas 3-D usando as colunas da matriz.

Se um ou dois de x, y e z forem um vetor e os outros forem matrizes do mesmo tamanho, a linha plota várias linhas 3-D. O comprimento do vetor deve ser igual a uma das dimensões da matriz.

Para eixos polares e geográficos, a terceira coordenada afeta a estratificação de linhas 2-D nos eixos. Para usar a terceira coordenada nesses tipos de eixos, x, y e z devem ter o mesmo tamanho.

Exemplo: z = sin (x) + cos (y)

Tipos de dados: solteiro | duplo | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categórico | datetime | duração

Ax & # 8212 Alvo eixos Objeto de eixos | Objeto PolarAxes | Objeto GeographicAxes

Eixos de destino, especificados como um objeto Axes, um objeto PolarAxes ou um objeto GeographicAxes. Se você não especificar os eixos, a função de linha será plotada nos eixos atuais.

Argumentos do par nome-valor

Especifique pares opcionais separados por vírgula de argumentos Nome e Valor. Name é o nome do argumento e Value é o valor correspondente. O nome deve aparecer entre aspas. Você pode especificar vários argumentos de pares de nome e valor em qualquer ordem como Nome1, Valor1. NomeN, ValorN.

Exemplo: line (x, y, 'Color', 'red', 'LineWidth', 3) cria uma linha vermelha com 3 pontos de largura.

As propriedades listadas aqui são apenas um subconjunto. Para obter uma lista completa, consulte Propriedades da linha.

'Cor' e # 8212 Cor da linha [0 0.4470 0.7410] (padrão) | Tripleto RGB | código de cores hexadecimal | 'r' | 'g' | 'b' | .

Cor da linha, especificada como um tripleto RGB, um código de cor hexadecimal, um nome de cor ou um nome curto.

Para uma cor personalizada, especifique um trio RGB ou um código de cor hexadecimal.

Um tripleto RGB é um vetor linha de três elementos cujos elementos especificam as intensidades dos componentes vermelho, verde e azul da cor. As intensidades devem estar na faixa [0,1], por exemplo, [0,4 0,6 0,7].

Um código de cor hexadecimal é um vetor de caracteres ou um escalar de string que começa com um símbolo hash (#) seguido por três ou seis dígitos hexadecimais, que podem variar de 0 a F. Os valores não diferenciam maiúsculas de minúsculas. Portanto, os códigos de cores '# FF8800', '# ff8800', '# F80' e '# f80' são equivalentes.

Como alternativa, você pode especificar algumas cores comuns por nome. Esta tabela lista as opções de cores nomeadas, os triplos RGB equivalentes e os códigos de cores hexadecimais.