Partilhar via


Usando tipos de dados espaciais

Baixar driver JDBC

Os tipos de dados espaciais (Geometria e Geografia) são suportados a partir da versão de pré-visualização 6.5.0 do Driver JDBC. Atualmente, os tipos de dados espaciais não são suportados com procedimentos armazenados, parâmetros com valor de tabela (TVP), BulkCopy e Always Encrypted. Esta página mostra vários casos de uso de tipos de dados de Geometria e Geografia com o JDBC Driver. Para obter uma visão geral sobre os tipos de dados espaciais, verifique a página Visão Geral dos Tipos de Dados Espaciais.

Criando um objeto de geometria/geografia

Há duas maneiras principais de criar um objeto Geometry / Geography: converter a partir de um texto Well-Known (WKT) ou usar um formato interno do SQL Server (CLR).

Criar a partir de WKT

String geoWKT = "LINESTRING(1 0, 0 1, -1 0)";
Geometry geomWKT = Geometry.STGeomFromText(geoWKT, 0);
Geography geogWKT = Geography.STGeomFromText(geoWKT, 4326);

Esse código criará um objeto LINESTRING Geometry com SRID (Spatial Reference System Identifier) 0 e um objeto Geography com SRID 4326.

Criando a partir do CLR

byte[] geomCLR = Hex.decodeHex("00000000010403000000000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F0BF000000000000000001000000010000000001000000FFFFFFFF0000000002".toCharArray());
byte[] geogCLR = Hex.decodeHex("E61000000104030000000000000000000000000000000000F03F000000000000F03F00000000000000000000000000000000000000000000F0BF01000000010000000001000000FFFFFFFF0000000002".toCharArray());

Geometry geomWKT = Geometry.deserialize(geomCLR);
Geography geogWKT = Geography.deserialize(geogCLR);

Este código criará um objeto Geometry and Geography equivalente aos criados a partir do WKT anteriormente.

Trabalho com um objeto de Geometria/Geografia

Supondo que o usuário tenha uma tabela no SQL Server como abaixo:

CREATE TABLE sampleTable (c1 geometry)  

Um exemplo de script para inserir um valor de geometria seria:

String geoWKT = "LINESTRING(1 0, 0 1, -1 0)";
Geometry geomWKT = Geometry.STGeomFromText(geoWKT, 0);
SQLServerPreparedStatement pstmt = (SQLServerPreparedStatement) connection.prepareStatement("insert into sampleTable values (?)");
pstmt.setGeometry(1, geomWKT);  
pstmt.execute();

O mesmo pode ser feito para a contraparte Geography, usando uma coluna Geography e método setGeography().

Para ler uma coluna Geometria/Geografia:

try(SQLServerResultSet rs = (SQLServerResultSet)stmt.executeQuery("select * from geomTable")) {
    while(rs.next()){
        rs.getGeometry(1);
    }
}

O mesmo pode ser feito para o equivalente de Geografia, utilizando uma coluna de Geografia e o método getGeography().

APIs recém-introduzidas

Esses métodos são as novas APIs públicas que foram introduzidas com essa adição, nas classes SQLServerPreparedStatement, SQLServerResultSet, Geometrye Geography.

SQLServerPreparedStatement

Método Descrição
void setGeometry(int n, Geometria x) Define o parâmetro designado para o objeto microsoft.sql.Geometry Class fornecido.
void setGeography(int n, Geografia x) Define o parâmetro designado para o objeto microsoft.sql.Geography Class fornecido.

SQLServerResultSet

Método Descrição
Geometria getGeometry(int columnIndex) Retorna o valor da coluna designada na linha atual deste objeto ResultSet como um objeto com.microsoft.sqlserver.jdbc.Geometry na linguagem de programação Java.
Geometria getGeometry(String columnName) Retorna o valor da coluna designada na linha atual deste objeto ResultSet como um objeto com.microsoft.sqlserver.jdbc.Geometry na linguagem de programação Java.
Geografia getGeography(int columnIndex) Retorna o valor da coluna designada na linha atual deste objeto ResultSet como um objeto com.microsoft.sqlserver.jdbc.Geography na linguagem de programação Java.
Geografia getGeography(String columnName) Retorna o valor da coluna designada na linha atual deste objeto ResultSet como um objeto com.microsoft.sqlserver.jdbc.Geography na linguagem de programação Java.

Geometria

Método Descrição
Geometria STGeomFromText(String wkt, int SRID) Construtor para uma instância de Geometria de um Open Geospatial Consortium (OGC) Well-Known representação de texto (WKT) aumentada com quaisquer valores Z (elevação) e M (medida) transportados pela instância.
Geometria STGeomFromWKB(byte[] wkb) Construtor para uma instância de Geometria de uma representação Open Geospatial Consortium (OGC) Well-Known Binário (WKB). Nota: Este método atualmente usa o formato interno do SQL Server (CLR) para criar uma instância de Geometria, que é um problema conhecido no driver e está planejado para ser alterado para aceitar dados WKB. Para usuários existentes que já estão usando esse método, considere alternar para deserialize(byte) em vez disso.
Geometrias desserializar(byte[] clr) Construtor para uma instância de _Geometry_ a partir de um formato interno do SQL Server para informação espacial.
Análise de geometria (String wkt) Construtor para uma instância Geometry de uma representação Open Geospatial Consortium (OGC) Well-Known Text (WKT). O Identificador de Referência Espacial tem como padrão 0.
Ponto de geometria (duplo x, duplo y, int SRID) Construtor para uma instância de Geometry que representa uma instância Point dos seus valores X e Y e um Identificador de Referência Espacial.
String STAsText() Devolve a representação de texto Well-Known do Open Geospatial Consortium (OGC) (WKT) de uma instância de geometria. Este texto não conterá nenhum valor Z (elevação) ou M (medida) transportado pela instância.
byte[] STAsBinary() Retorna a representação interna do formato CLR (SQL Server) de uma instância de Geometria. Esse valor não conterá nenhum valor Z ou M transportado pela instância.
byte[] serialize() Retorna os bytes que representam um formato interno do SQL Server do tipo Geometria.
boolean hasM() Retorna se o objeto contiver um valor M (medida).
boolean hasZ() Devolve se o objeto possui um valor Z (elevação).
Double getX() Retorna o valor da coordenada X.
Duplo getY() Retorna o valor da coordenada Y.
Duplo getM() Retorna o valor M (medida) do objeto.
Duplo getZ() Retorna o valor Z (elevação) do objeto.
int getSrid() Retorna o valor SRID (Spatial Reference Identifier).
boolean isNull() Retorna se o objeto Geometry estiver nulo.
int STNumPoints() Retorna o número de pontos no objeto Geometry.
String STGeometryType() Retorna o nome do tipo Open Geospatial Consortium (OGC) representado por uma instância de geometria.
String asTextZM() Retorna a representação Well-Known Text (WKT) do objeto de geometria.
String toString() Retorna a representação String do objeto Geometry.

Geografia

Método Descrição
Geografia STGeomFromText(String wkt, int SRID) Construtor para uma instância de Geography a partir de uma representação em texto (WKT) do Open Geospatial Consortium (OGC) Well-Known, enriquecida com quaisquer valores Z (elevação) e M (medida) associados à instância.
Geografia STGeomFromWKB(byte[] wkb) Construtor para uma instância Geography de um Open Geospatial Consortium (OGC) Well-Known representação binária (WKB). Nota: Este método atualmente usa o formato interno do SQL Server (CLR) para criar uma instância de Geometria, mas no futuro esse método será alterado para aceitar dados WKB em vez disso, como a contraparte do SQL Server desse método (STGeomFromWKB) usa WKB. Para usuários existentes que já estão usando esse método, considere alternar para deserialize(byte) em vez disso.
Geografia desserializar(byte[] clr) Construtor para uma instância Geography a partir de um formato interno do SQL Server para dados espaciais.
Análise de geografia (String wkt) Construtor para uma instância de Geography de uma representação Open Geospatial Consortium (OGC) Well-Known Text (WKT). O Identificador de Referência Espacial tem como padrão 0.
Ponto geográfico (double lon, double lat, int SRID) Construtor para uma instância de Geography que representa uma instância de Point a partir da sua longitude e latitude e um Identificador de Referência Espacial.
String STAsText() Retorna a representação Open Geospatial Consortium (OGC) Well-Known Text (WKT) de uma instância de Geography. Este texto não conterá nenhum valor Z (elevação) ou M (medida) transportado pela instância.
byte[] STAsBinary()) Retorna a representação interna do formato CLR (SQL Server) de uma instância Geography. Esse valor não conterá nenhum valor Z ou M transportado pela instância.
byte[] serialize() Retorna os bytes que representam um formato interno do SQL Server do tipo Geography.
boolean hasM() Retorna se o objeto contiver um valor M (medida).
boolean hasZ() Indica se o objeto contém um valor Z (elevação).
Duplo getLatitude() Devolve o valor da latitude.
Duplo getLongitude() Devolve o valor da longitude.
Duplo getM() Retorna o valor M (medida) do objeto.
Duplo getZ() Retorna o valor Z (elevação) do objeto.
int getSrid() Retorna o valor SRID (Spatial Reference Identifier).
booleano isNull() Retorna se o objeto Geography for nulo.
int STNumPoints() Retorna o número de pontos no objeto Geography.
String STGeographyType() Retorna o nome do tipo Open Geospatial Consortium (OGC) representado por uma instância geográfica.
String asTextZM() Retorna a representação Well-Known Text (WKT) do objeto Geography.
String toString() Retorna a representação String do objeto Geography.

Limitações dos tipos de dados geográficos

  1. Os tipos de subdados espaciais CircularString, CompoundCurve, CurvePolygone FullGlobe só são suportados a partir do SQL Server 2012 e superior.

  2. Always Encrypted não pode ser usado com tipos de dados espaciais.

  3. Atualmente, não há suporte para procedimentos armazenados, operações TVP e BulkCopy com tipos de dados espaciais.

Ver também

Exemplo de tipos de dados espaciais (JDBC)