Uso di tipi di dati spaziali
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 stored procedure, TVP (Table Valued Parameter, parametri con valori di tabella), copia bulk 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 Geometry/Geography
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 crea un oggetto Geometry e Geography equivalente a quelli creati in precedenza da WKT.
Uso di 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)
Di seguito un script di esempio per inserire un valore Geometry:
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 setGeometry(int n, Geometry x) | Imposta il parametro designato per l'oggetto classe microsoft.sql.Geometry. |
void setGeography(int n, Geography 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. |
Geography 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. |
Geography getGeography(String columnName) | 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 |
---|---|
Geometry STGeomFromText(String wkt , int SRID ) |
Costruttore per un'istanza Geometry da una rappresentazione WKT (Well-Known Text) OGC (Open Geospatial Consortium) integrata con qualsiasi valore Z (innalzamento) e M (misura) appartenente all'istanza. |
Geometry STGeomFromWKB(byte[] wkb ) |
Costruttore per un'istanza Geometry di una rappresentazione WKB (Well-Known Binary) OGC (Open Geospatial Consortium). 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). |
Geometries deserialize(byte[] clr) | Costruttore per un'istanza Geometry da un formato di SQL Server interno per dati spaziali. |
Geometry parse(String wkt) | Costruttore per un'istanza Geometry da una rappresentazione WKT (Well-Known Text) OGC (Open Geospatial Consortium). Il valore predefinito per l'identificatore SRID è 0. |
Geometry point(double x, double y, int SRID) | Costruttore per un'istanza Geometry che rappresenta un'istanza Point dai relativi valori X e Y e un identificatore SRID. |
String STAsText() | Restituisce una rappresentazione WKT (Well-Known Text) OGC (Open Geospatial Consortium) di un'istanza 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 WKT (well-known text) dell'oggetto Geometry. |
String toString() | Restituisce la rappresentazione stringa dell'oggetto Geometry. |
Geografia
metodo | Descrizione |
---|---|
Geography STGeomFromText(String wkt, int SRID) | Costruttore per un'istanza Geography da una rappresentazione WKT (Well-Known Text) OGC (Open Geospatial Consortium) integrata con qualsiasi valore Z (innalzamento) e M (misura) appartenente all'istanza. |
Geography STGeomFromWKB(byte[] wkb ) |
Costruttore per un'istanza Geography di una rappresentazione WKB (Well-Known Binary) OGC (Open Geospatial Consortium). 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). |
Geography deserialize(byte[] clr) | Costruttore per un'istanza Geography da un formato di SQL Server interno per dati spaziali. |
Geography parse(String wkt) | Costruttore per un'istanza Geography da una rappresentazione WKT (Well-Known Text) OGC (Open Geospatial Consortium). Il valore predefinito per l'identificatore SRID è 0. |
Geography point(double lon, double lat, int SRID) | Costruttore per un'istanza Geography che rappresenta un'istanza Point dalla latitudine e longitudine e un identificatore SRID. |
String STAsText() | Restituisce una rappresentazione WKT (Well-Known Text) OGC (Open Geospatial Consortium) di un'istanza 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 WKT (well-known text) dell'oggetto Geography. |
String toString() | Restituisce la rappresentazione stringa dell'oggetto Geography. |
Limitazioni dei tipi di dati spaziali
I tipi di dati spaziali secondari CircularString, CompoundCurve, CurvePolygon e FullGlobe sono supportati solo a partire da SQL Server 2012 e versioni successive.
Non è possibile usare Always Encrypted con i tipi di dati spaziali.
Stored procedure, TVP e operazioni di copia bulk non sono attualmente supportati con i tipi di dati spaziali.