Uso di tipi di dati spaziali

Scaricare il driver JDBC

I tipi di dati spaziali (Geometry e Geography) sono supportati a partire dalla versione di anteprima di JDBC Driver 6.5.0. I tipi di dati spaziali non sono attualmente supportati con le stored procedure, i parametri con valori di tabella (TVP), BulkCopy e Always Encrypted. Questa pagina illustra diversi casi d'uso dei tipi di dati Geometry e Geography con JDBC Driver. Per una panoramica dei tipi di dati spaziali, vedere Panoramica dei tipi di dati spaziali.

Creazione di un oggetto geometria / geografia

Esistono due modi principali per creare un oggetto Geometry/Geography. È possibile eseguire la conversione da WKT (well-known text) o da un formato interno di SQL Server (CLR).

Creazione da WKT

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

Questo codice crea un oggetto Geometry LINESTRING con identificatore SRID 0 (Spatial Reference System Identifier) e un oggetto Geography con identificatore SRID 4326.

Creazione da CLR

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

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

Questo codice creerà oggetti Geometry e Geography equivalenti a quelli creati in precedenza a partire dal WKT.

Lavorare con un oggetto Geometry / Geography

Si supponga che l'utente disponga di una tabella in SQL Server come riportato di seguito:

CREATE TABLE sampleTable (c1 geometry)  

Uno script di esempio per inserire un valore Geometry sarebbe:

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();

È possibile eseguire la stessa operazione per la controparte Geography, usando una colonna Geography e il metodo setGeography().

Per leggere una colonna Geometry/Geography:

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

È possibile eseguire la stessa operazione per la controparte Geography, usando una colonna Geography e il metodo getGeography().

Nuove API introdotte

Questi metodi sono le nuove API pubbliche che sono state introdotte nelle classi SQLServerPreparedStatement, SQLServerResultSet, Geometry e Geography.

SQLServerPreparedStatement

Metodo Descrizione
void setGeometria(int n, Geometria x) Imposta il parametro designato per l'oggetto classe microsoft.sql.Geometry.
void setGeografia(int n, Geografia x) Imposta il parametro designato per l'oggetto classe microsoft.sql.Geography.

SQLServerResultSet

Metodo Descrizione
Geometria getGeometry(int columnIndex) Restituisce il valore della colonna designata nella riga corrente di questo oggetto ResultSet come oggetto com.microsoft.sqlserver.jdbc.Geometry nel linguaggio di programmazione Java.
Geometry getGeometry(String columnName) Restituisce il valore della colonna designata nella riga corrente di questo oggetto ResultSet come oggetto com.microsoft.sqlserver.jdbc.Geometry nel linguaggio di programmazione Java.
Geografia getGeography(int columnIndex) Restituisce il valore della colonna designata nella riga corrente di questo oggetto ResultSet come oggetto com.microsoft.sqlserver.jdbc.Geography nel linguaggio di programmazione Java.
Geografia getGeography(StringColumnName) Restituisce il valore della colonna designata nella riga corrente di questo oggetto ResultSet come oggetto com.microsoft.sqlserver.jdbc.Geography nel linguaggio di programmazione Java.

Geometria

Metodo Descrizione
Geometria STGeomFromText(String wkt, int SRID) Costruttore di un'istanza di Geometry a partire da una rappresentazione in formato Well-Known Text (WKT) dell'Open Geospatial Consortium (OGC), arricchita da eventuali valori Z (elevazione) e M (misura) contenuti nell'istanza.
Geometria STGeomFromWKB(byte[] wkb) Costruttore di un'istanza di Geometry a partire da una rappresentazione Well-Known Binary (WKB) dell'Open Geospatial Consortium (OGC). Nota: questo metodo usa attualmente il formato interno di SQL Server (CLR) per creare un'istanza Geometry. Il problema nel driver è noto ed è pianificata la modifica in modo che siano accettati i dati WKB. Per gli utenti esistenti che usano già questo metodo, provare a passare a deserialize(byte).
Geometrie deserialize(byte[] clr) Costruttore per un'istanza di Geometry a partire da un formato interno di SQL Server per i dati spaziali.
Analisi geometry (String wkt) Costruttore per un'istanza di Geometry a partire da una rappresentazione Well-Known Text (WKT) dell'Open Geospatial Consortium (OGC). Il valore predefinito per l'identificatore SRID è 0.
Punto geometria(double x, double y, int SRID) Costruttore di un'istanza di Geometry che rappresenta un'istanza di Point a partire dai relativi valori X e Y e da un identificatore di riferimento spaziale.
String STAsText() Restituisce la rappresentazione OGC (Open Geospatial Consortium) Well-Known Text (WKT) di un'istanza di Geometry. Il testo non conterrà alcun valore Z (innalzamento) o M (misura) appartenente all'istanza.
byte[] STAsBinary() Restituisce la rappresentazione di un'istanza Geometry nel formato interno di SQL Server (CLR). Il valore non conterrà alcun valore Z o M appartenente all'istanza.
byte[] serialize() Restituisce i byte che rappresentano un formato SQL Server interno di tipo Geometry.
boolean hasM() Restituisce se l'oggetto contiene un valore M (misura).
boolean hasZ() Restituisce se l'oggetto contiene un valore Z (innalzamento).
double getX() Restituisce il valore della coordinata X.
double getY() Restituisce il valore della coordinata Y.
double getM() Restituisce il valore M (misura) dell'oggetto.
Double getZ() Restituisce il valore Z (innalzamento) dell'oggetto.
int getSrid() Restituisce il valore dell'identificatore SRID.
boolean isNull() Restituisce se l'oggetto Geometry è Null.
int STNumPoints() Restituisce il numero di punti nell'oggetto Geometry.
String STGeometryType() Restituisce il nome del tipo OGC (Open Geospatial Consortium) rappresentato da un'istanza di geometria.
String asTextZM() Restituisce la rappresentazione Well-Known Text (WKT) dell'oggetto Geometry.
String toString() Restituisce la rappresentazione stringa dell'oggetto Geometry.

Geografia

Metodo Descrizione
Geografia STGeomFromText(Stringa wkt, int SRID) Costruttore di un'istanza di Geography a partire da una rappresentazione Well-Known Text (WKT) dell'Open Geospatial Consortium (OGC), arricchita con eventuali valori Z (elevazione) e M (misura) contenuti nell'istanza.
Geografia STGeomFromWKB(byte[] wkb) Costruttore per un'istanza di Geography a partire da una rappresentazione Well-Known Binary (WKB) di Open Geospatial Consortium (OGC). Nota: questo metodo usa attualmente il formato interno di SQL Server (CLR) per creare un'istanza Geometry. Per il futuro è tuttavia prevista una modifica in modo che siano accettati i dati WKB, poiché la controparte di SQL Server di questo metodo (STGeomFromWKB) usa WKB. Per gli utenti esistenti che usano già questo metodo, provare a passare a deserialize(byte).
Deserializzazione geografica(byte[] clr) Costruttore per un'istanza Geography da un formato di SQL Server interno per dati spaziali.
Analisi geografica (String wkt) Costruttore per un'istanza di Geography a partire da una rappresentazione Well-Known Text (WKT) dell'Open Geospatial Consortium (OGC). Il valore predefinito per l'identificatore SRID è 0.
Punto di geografia(double lon, double lat, int SRID) Costruttore di un'istanza di Geography che rappresenta un'istanza di Point a partire da longitudine, latitudine e un identificatore di riferimento spaziale (SRID).
String STAsText() Restituisce la rappresentazione Well-Known Text (WKT) dell'Open Geospatial Consortium (OGC) di un'istanza di Geography. Il testo non conterrà alcun valore Z (innalzamento) o M (misura) appartenente all'istanza.
byte[] STAsBinary()) Restituisce la rappresentazione di un'istanza Geography nel formato interno di SQL Server (CLR). Il valore non conterrà alcun valore Z o M appartenente all'istanza.
byte[] serialize() Restituisce i byte che rappresentano un formato SQL Server interno di tipo Geography.
boolean hasM() Restituisce se l'oggetto contiene un valore M (misura).
boolean hasZ() Restituisce se l'oggetto contiene un valore Z (innalzamento).
double getLatitude() Restituisce il valore di latitudine.
double getLongitude() Restituisce il valore di longitudine.
double getM() Restituisce il valore M (misura) dell'oggetto.
Double getZ() Restituisce il valore Z (innalzamento) dell'oggetto.
int getSrid() Restituisce il valore dell'identificatore SRID.
boolean isNull() Restituisce se l'oggetto Geography è Null.
int STNumPoints() Restituisce il numero di punti nell'oggetto Geography.
String STGeographyType() Restituisce il nome del tipo OGC (Open Geospatial Consortium) rappresentato da un'istanza di geografia.
String asTextZM() Restituisce la rappresentazione Well-Known Text (WKT) dell'oggetto Geography.
String toString() Restituisce la rappresentazione stringa dell'oggetto Geography.

Limitazioni dei tipi di dati spaziali

  1. I tipi di dati spaziali secondari CircularString, CompoundCurve, CurvePolygon e FullGlobe sono supportati solo a partire da SQL Server 2012 e versioni successive.

  2. Non è possibile usare Always Encrypted con i tipi di dati spaziali.

  3. Le stored procedure, i TVP e le operazioni BulkCopy non sono attualmente supportati per i tipi di dati spaziali.