Mais

Como adicionar Oracle Spatial Tables ao QGIS?

Como adicionar Oracle Spatial Tables ao QGIS?


Tenho jogado com QGIS Chugiak (2.4.0). Tenho tentado adicionar tabelas do Oracle Spatial (classes de recursos de ponto, linha e polígono) ao desktop. As mesmas tabelas que uso no ArcGIS. Consegui fazer a conexão funcionar usando as instruções aqui, mas 2 coisas estão acontecendo:

  1. Nem todas as tabelas em meu banco de dados são preenchidas
  2. Quando eu expando os grupos de proprietários para obter a lista de tabelas, todas as tabelas ficam acinzentadas.

Não sei por que essas coisas estão acontecendo. No primeiro problema, não consigo ver isso como um problema de permissões, pois estou fazendo login na conexão Oracle com minhas credenciais Oracle, que já estão vinculadas à minha conta Oracle e, portanto, devo conceder acesso à tabela, então não tenho certeza do que está acontecendo lá.

Na segunda edição, não consigo descobrir por que as tabelas estão esmaecidas. Tentei definir uma referência espacial no campo SRID, mas não está funcionando. Alguma sugestão?

EDITAR:

Resolvi o problema das tabelas de recursos esmaecidas. Eu defino o campo SRID para uma referência espacial relevante e também, a 'Coluna de chave primária' também precisa ser preenchida. Usei OBJECTID, pois é o campo principal em minhas classes de recursos. Então, agora posso adicionar minhas classes de recursos. Ainda estou tendo problemas para preencher todas as tabelas. Tenho várias centenas e apenas 7 deles estão carregando.


Eu tive o mesmo problema. Especifique SRID como 4326 ou algo relevante. Não tenho certeza se o QGIS não consegue detectar SRID automaticamente.


2 tipos de dados espaciais e metadados

O Oracle Spatial consiste em um conjunto de tipos de dados de objeto, métodos de tipo e operadores, funções e procedimentos que usam esses tipos. Uma geometria é armazenada como um objeto, em uma única linha, em uma coluna do tipo SDO_GEOMETRY. A criação e manutenção de índices espaciais são feitas usando instruções básicas DDL (CREATE, ALTER, DROP) e DML (INSERT, UPDATE, DELETE).

Este capítulo começa com um exemplo simples que insere, indexa e consulta dados espaciais. Você pode achar útil ler este exemplo rapidamente antes de examinar o tipo de dados detalhado e as informações de metadados posteriormente neste capítulo.

Este capítulo contém as seguintes seções principais:


1 resposta 1

irônico, eu estava tendo um erro semelhante hoje ao tentar salvar dados em um geopacote. (Ou seja, não recebo o erro ao inserir, eu o obtenho ao clicar em salvar). Recebi um erro ligeiramente diferente: 'Erro de QGIS ao criar recurso -16: falha ao preparar SQL: INSERT INTO. etc.
No entanto, meu erro estava relacionado ao fato de que o nome do atributo geometry tinha de alguma forma sido criado como 'geom'. e o código GDAL está procurando um atributo de geometry chamado 'geometry'. Recriei minha tabela de geopacote, com o atributo denominado 'geometry' e valores z, e sem mais problemas, (mesmo se os dados de origem não tiverem z).

no entanto, não acho que esse seja o seu problema - pode ser que os dados de origem não tenham um z - você poderia tentar configurar um procedimento em algum lugar ou campo derivado, de modo que o valor z seja preenchido na inserção. O código de erro faz parecer que a origem não tem valor z (ou seja: dimensões geométricas) ou a indexação da camada não está configurada para lidar com z (ou seja: ODCIINDEXINSERT dimensionalidade da camada de rotina). Esse pode ser o ponto de partida para você.


Tipos de dados de geometria

O ArcGIS cria e pode trabalhar com dois tipos de dados de geometria no Oracle: Esri ST_Geometry e Oracle SDO_Geometry.

ST_Geometria

O tipo de dados ST_Geometry implementa a especificação SQL 3 de tipos de dados definidos pelo usuário (UDTs), permitindo criar colunas capazes de armazenar dados espaciais, como a localização de um ponto de referência, uma rua ou um lote de terreno. Ele fornece acesso à linguagem estruturada (SQL) da International Organization for Standards (ISO) e Open Geospatial Consortium, Inc. (OGC) para o geodatabase e o banco de dados. Esse armazenamento estende os recursos do banco de dados, fornecendo armazenamento para objetos (pontos, linhas e polígonos) que representam características geográficas. Ele foi projetado para fazer uso eficiente dos recursos do banco de dados, para ser compatível com os recursos do banco de dados, como replicação e particionamento, e para fornecer acesso rápido aos dados espaciais.

SDO_Geometria

SDO_Geometry é implementado usando um sistema de objeto relacional extensível Oracle. O tipo SDO_Geometry é oferecido pela Oracle usando duas opções principais:

  • O Oracle Spatial é um recurso opcional do Oracle Database Enterprise Edition. Além de fornecer o tipo SDO_Geometry, o Oracle Spatial oferece vários recursos geoespaciais adicionais.
  • O Oracle Locator fornece um subconjunto de recursos do Oracle Spatial. Ele está incluído como um recurso padrão das edições Oracle Database Standard e Enterprise. Entre outros recursos, ele fornece o tipo de geometria Oracle Spatial (referido como SDO_Geometry) e uma API SQL para esse conteúdo.

ArcGIS suporta SDO_Geometry como um método opcional para armazenar dados espaciais. Especificamente, a geometria Oracle Spatial ou Locator pode ser usada para armazenar e gerenciar o recurso e o conteúdo raster de conjuntos de dados em bancos de dados geográficos empresariais ou bancos de dados Oracle.

Para obter informações sobre SDO_Geometry, consulte a documentação do Oracle.


Carregando dados espaciais

A próxima etapa é realmente adicionar ou & # 8220importar & # 8221 algumas tabelas com dados espaciais. Usaremos duas camadas, uma camada de polígono estadual do Censo dos EUA e um arquivo de pontos de localizações de turbinas eólicas do USGS. Com essas camadas, podemos fazer uma consulta clássica & # 8220point em poly & # 8221, encontrando todos os pontos dentro de um polígono de estado. Para começar, baixe o & # 8220cb_2017_us_state_20m.zip & # 8221 arquivo de forma de estado em:

”Descompacte o arquivo e, em seguida, usaremos o shp2pgsql, um utilitário de linha de comando que já foi instalado junto com o Postgis, independentemente do método seguido. Você pode encontrar a documentação sobre esta ferramenta de linha de comando na documentação oficial do Postgis:

O comando que precisaremos para o arquivo de forma de estado no Mac é:

Para Windows, é ligeiramente diferente

Observe que, independentemente de como a saída é exibida, este comando solicita que você insira sua senha, então insira-a e pressione Enter quando solicitado. Observe também que o sinalizador & # 8220-I & # 8221 é usado para criar automaticamente o índice espacial que precisamos para consultar adequadamente esta camada (consulte o link postgis acima para todos os sinalizadores disponíveis).

Projeções

Como soubemos incluir o SRID de 4269 (o sinalizador -s acima)? Se você não sabe o que é SRID ou como encontrá-lo, convém revisar isto:

Para converter rapidamente do .prj (arquivo de projeção) do shapefile para o SRID necessário, você pode usar este site:

Ou importe o arquivo em seu GIS favorito (usamos QGIS) e veja as informações de projeção.

Converter o arquivo de turbinas eólicas

O próximo arquivo de que precisamos é a localização das turbinas eólicas que estão disponíveis aqui:

Mesmo que exista um shapefile disponível, não deixe de fazer o download do arquivo GeoJSON, pois isso nos obrigará a explorar outra ferramenta indispensável para trabalhar com dados geográficos. & # 8220ogr2ogr & # 8221 é uma ferramenta de linha de comando & # 8217s não desenvolvida pela Postgis, mas é instalada como uma dependência. É parte da GDAL (Geospatial Data Abstraction Library), que é usada por muitos projetos de software geoespacial e também pode ser usada diretamente na linha de comando. Para importar o arquivo de ponto em Macs, faça:

para Windows, você deve ser capaz de usar exatamente o mesmo comando, mas parece que a versão atual do instalador EDB Postgres vem com uma versão do ogr2ogr que não tem suporte para Postgres! Portanto, você pode continuar importando o arquivo de forma:

ou instale uma versão diferente do ogr2ogr deste pacote bem conhecido e amado:

Observe que, embora os links acima devam continuar funcionando, os nomes dos arquivos geojson e shp podem mudar, então olhe os nomes dos arquivos que foram baixados e atualize o & # 8220uswtdb _ **** & # 8221 nome do arquivo acima para corresponder ao usar esses comandos.


Seção 2. Interoperabilidade de dados

Nesta seção, você aprenderá como o QGIS lida com vários tipos de dados, como abrir e importar arquivos para o QGIS. Você também pode ver como usar a fonte de dados online usando WMS, serviço WMTS.

  • Se você tiver arquivos espaciais no formato Mapinfo (TAB), você pode facilmente Importar Tabela Mapinfo para QGIS. É muito fácil importar uma tabela Mapinfo para o QGIS sem perder nenhuma informação.
  • Se você não tiver nenhum dado para começar, sem problemas, este tutorial mostrará como criar um novo Shapefile no QGIS. . WMTS (Web Map Tile Service) é um serviço de mapas online. Veja como configurar WMTS no QGIS.
  • Quer exibir seus dados no Google Earth? Bem, leia sobre como Exportar para KML do QGIS que o ajudará a exportar seu arquivo para o formato KML do QGIS. Este tutorial irá guiá-lo sobre como abrir uma tabela PostgreSQL não espacial no QGIS. Se você tiver dados X, Y sem nenhuma informação espacial, pode seguir este tutorial. Podemos então construir ou criar pontos usando esta tabela.

Tipos de dados de texto

Quando você escolhe incluir um campo de texto na tabela que você cria usando ArcGIS, o tipo de dados varchar2 é usado se o banco de dados não estiver configurado para usar codificação Unicode. Se você definir o tamanho do campo de texto maior que 4.000 e o banco de dados não estiver definido para usar a codificação Unicode, o tipo de dados Oracle será CLOB.

Um campo de texto será criado como nvarchar2 se o banco de dados estiver definido para usar codificação Unicode. (Esta é a configuração padrão para bancos de dados geográficos no Oracle.) Se você definir o tamanho do campo de texto maior que 2.000 e o banco de dados estiver definido para usar codificação Unicode, o tipo de dados Oracle será NCLOB.


O documento completo tem mais exemplos, mas aqui está o snippet de que você precisa.

Além de salvar o Lat & ampLng na coluna SDO_GEOMETRY como Kris Rice disse, você pode usar os muitos recursos úteis do Oracle Spatial e do Oracle Locator para obter alguns resultados úteis.

Para usar esses recursos, as etapas abaixo devem ser executadas:

  1. Altere a tabela para adicionar uma coluna de geometria (SDO_GEOMETRY).
  2. Atualize a tabela para preencher os objetos SDO_GEOMETRY usando valores de dados relacionados à localização existentes.
  3. Atualize os metadados espaciais (USER_SDO_GEOM_METADATA).
  4. Crie o índice espacial na tabela.

Os detalhes das etapas acima são explicados aqui.

Após as etapas acima terem sido realizadas, você pode usar operadores úteis fornecidos pelo Oracle Locator. Por exemplo, você pode encontrar os locais que estão a uma distância de X metros de um determinado ponto. Para obter mais detalhes, leia este documento Oracle.


O fluxo de trabalho de transformação de dados

Começamos lendo um arquivo CSV e percorrendo cada linha independentemente. Consultaremos uma API XML para adicionar mais dados a cada elemento em cada linha. Por fim, coletaremos e agregaremos todas as linhas para construir um arquivo GeoJSON e armazená-lo em um banco de dados PostgreSQL. Embora não seja demonstrado, estamos usando a extensão PostGIS para adicionar recursos espaciais ao banco de dados PostgreSQL. A Figura 1 descreve o fluxo de trabalho.

Depois de definir o fluxo de trabalho, usaremos um arquivo Java para implementá-lo com Camel K. Observe que Camel K oferece suporte a muitas linguagens além de Java. Você pode usar qualquer um dos idiomas suportados para implementar este fluxo de trabalho.


O problema

O MySQL 8.0 precisa saber se o índice é cartesiano ou geográfico. Isso depende do SRID dos dados na coluna. Infelizmente, 5.7 e anteriores não restringem um índice a um único SRID, portanto, o índice pode conter dados cartesianos e geográficos. Tudo bem, desde que o MySQL ignore o SRID (como o 5.7 e anteriores fazem), mas não funcionará no 8.0. Portanto, Os índices 5.7 não são usados ​​pelo otimizador 8.0.

Portanto, se tivermos um índice espacial e atualizarmos para 8.0, temos que

  1. Certifique-se de que haja apenas geometrias em um SRID na coluna indexada
  2. Diga ao MySQL qual SRID usar para o índice
  3. Recrie o índice

O primeiro ponto é algo que podemos fazer antes de atualizar. As duas últimas etapas devem ser realizadas após a atualização.


Conclusões

Praticamente todos os bancos de dados de clientes e transações, data warehouses e data marts contêm dados baseados em localização. Ele está em toda parte e pode ser usado para fornecer informações valiosas sobre as tendências do mercado, a disponibilidade de novos mercados e oportunidades, e pode servir como um conjunto de dados comum para entrelaçar diversos conjuntos de dados.

O Oracle RDBMS pode servir como um repositório seguro, escalável e aberto para seus dados baseados em localização, com a maioria das necessidades da organização atendidas pelo recurso de banco de dados Oracle Locator gratuito e com o Oracle Spatial para necessidades de análise espacial mais exigentes. É fácil aprimorar seus conjuntos de dados com dados baseados em localização e, se você licenciou o Oracle Application Server e o JDeveloper, é um processo simples adicionar funcionalidade de mapeamento aos seus aplicativos de business intelligence.

Para obter mais detalhes sobre o Oracle Locator e o Oracle Spatial, não deixe de conferir meu Oracle Weblog e o Oracle GIS Weblog de Justin Lokitz, dê uma olhada nas homepages OTN Locator e Spatial e Map Viewer e confira a variedade de parceiros GIS que oferecem suporte a eles Tecnologias Oracle.

Mark Rittman é um DBA Profissional Certificado Oracle e trabalha como Gerente de Consultoria na SolStonePlus, com especialização no desenvolvimento de aplicativos de BI e DW usando o Oracle Database, Application Server, Discoverer, Warehouse Builder e Oracle OLAP. Fora da Plus Consultancy, Mark preside o UKOUG BI e Reporting Tools SIG e executa um Weblog dedicado ao Oracle BI e tecnologia de Data Warehousing. Mark recentemente foi premiado com o OTN Community Award por contribuições à comunidade de desenvolvedores Oracle e é palestrante regular em eventos de usuários Oracle no Reino Unido e na Europa.

Mark também gostaria de agradecer a Justin Lokitz por sua colaboração com este artigo. Justin é consultor de vendas sênior da Oracle Corporation, especializado em desenvolvimento GIS e J2EE.