Usando tipos de dados espaciais
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
Os tipos de subdados espaciais CircularString, CompoundCurve, CurvePolygone FullGlobe só são suportados a partir do SQL Server 2012 e superior.
Always Encrypted não pode ser usado com tipos de dados espaciais.
Atualmente, não há suporte para procedimentos armazenados, operações TVP e BulkCopy com tipos de dados espaciais.