Použití prostorových datových typů
Od verze JDBC Driver Preview verze 6.5.0 se podporují prostorové datové typy (geometrie a geografie). Uložené procedury, parametry TVP (Table Valued Parameters), BulkCopy a Always Encrypted v současné době nepodporují prostorové datové typy. Na této stránce jsou uvedeny různé případy použití datových typů Geometrie a Zeměpis s ovladačem JDBC. Přehled prostorových datových typů najdete na stránce Přehled prostorových datových typů.
Vytvoření geometrie / geografického objektu
Existují dva hlavní způsoby vytvoření objektu Geometrie / Zeměpis – buď převést z Well-Known Text (WKT) nebo interní formát SQL Serveru (CLR).
Vytváření z WKT
String geoWKT = "LINESTRING(1 0, 0 1, -1 0)";
Geometry geomWKT = Geometry.STGeomFromText(geoWKT, 0);
Geography geogWKT = Geography.STGeomFromText(geoWKT, 4326);
Tento kód vytvoří objekt LINESTRING Geometry s prostorovým referenčním systémovým identifikátorem (SRID) 0 a geografický objekt s SRID 4326.
Vytváření z rozhraní CLR
byte[] geomCLR = Hex.decodeHex("00000000010403000000000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F0BF000000000000000001000000010000000001000000FFFFFFFF0000000002".toCharArray());
byte[] geogCLR = Hex.decodeHex("E61000000104030000000000000000000000000000000000F03F000000000000F03F00000000000000000000000000000000000000000000F0BF01000000010000000001000000FFFFFFFF0000000002".toCharArray());
Geometry geomWKT = Geometry.deserialize(geomCLR);
Geography geogWKT = Geography.deserialize(geogCLR);
Tento kód vytvoří objekt Geometrie a Zeměpis, který odpovídá objektům vytvořeným z WKT dříve.
Práce s objektem Geometrie / Zeměpis
Za předpokladu, že má uživatel tabulku na SQL Serveru, jak je znázorněno níže:
CREATE TABLE sampleTable (c1 geometry)
Ukázkový skript pro vložení hodnoty geometrie by byl:
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();
Totéž lze provést u geografie pomocí sloupce Geografie a metody setGeography().
Čtení sloupce Geometrie / Zeměpis:
try(SQLServerResultSet rs = (SQLServerResultSet)stmt.executeQuery("select * from geomTable")) {
while(rs.next()){
rs.getGeometry(1);
}
}
Totéž lze provést pro ekvivalent Geography, pomocí sloupce Geography a metody getGeography().
Nově zavedená rozhraní API
Tyto metody jsou nová veřejná rozhraní API, která byla zavedena s tímto doplňkem, ve třídách SQLServerPreparedStatement, SQLServerResultSet, Geometrya Geography.
SQLServerPreparedStatement
Metoda | Popis |
---|---|
void setGeometry(int n, Geometrie x) | Nastaví určený parametr na daný objekt microsoft.sql.Geometry Class. |
void setGeography(int n, Geography x) | Nastaví určený parametr na daný objekt microsoft.sql.Geography Class. |
SQLServerResultSet
Metoda | Popis |
---|---|
Geometry getGeometry(int columnIndex) | Vrátí hodnotu určeného sloupce v aktuálním řádku tohoto objektu ResultSet jako com.microsoft.sqlserver.jdbc.Geometry objekt v programovacím jazyce Java. |
Geometry getGeometry(String columnName) | Vrátí hodnotu určeného sloupce v aktuálním řádku tohoto objektu ResultSet jako com.microsoft.sqlserver.jdbc.Geometry objekt v programovacím jazyce Java. |
Geografie getGeography(int columnIndex) | Vrátí hodnotu určeného sloupce v aktuálním řádku tohoto objektu ResultSet jako objekt com.microsoft.sqlserver.jdbc.Geography v programovacím jazyce Java. |
Geography getGeography(String columnName) | Vrátí hodnotu určeného sloupce v aktuálním řádku tohoto objektu ResultSet jako objekt com.microsoft.sqlserver.jdbc.Geography v programovacím jazyce Java. |
Geometrie
Metoda | Popis |
---|---|
Geometry STGeomFromText(String wkt , int SRID ) |
Konstruktor geometrické instance z reprezentace Open Geospatial Consortium (OGC) Well-Known Text (WKT) rozšířen o všechny hodnoty Z (výška) a M (měření), které instance obsahuje. |
Geometry STGeomFromWKB(byte[] wkb ) |
Konstruktor instance geometrie z reprezentace Open Geospatial Consortium (OGC) Well-Known Binary (WKB). Poznámka: Tato metoda v současné době používá interní formát SQL Serveru (CLR) k vytvoření instance geometrie, což je známý problém v ovladači a plánuje se změnit tak, aby přijímal data WKB. U stávajících uživatelů, kteří už tuto metodu používají, zvažte místo toho přepnutí na deserializaci (bajt). |
Geometrie deserializovat(byte[] clr) | Konstruktor instance geometrie z interního formátu SQL Serveru pro prostorová data |
Funkce parse pro zpracování geometrie (řetězec wkt) | Konstruktor pro instanci třídy Geometry z textové reprezentace Open Geospatial Consortiumu (OGC) Well-Known Text (WKT). Identifikátor prostorového odkazu je ve výchozím nastavení nastaven na hodnotu 0. |
Geometrický bod(double x, double y, int SRID) | Konstruktor pro instanci geometrie, která představuje instanci bodu z hodnot X a Y a identifikátor prostorového odkazu. |
String STAsText() | Vrátí reprezentaci open Geospatial Consortium (OGC) Well-Known Text (WKT) instance Geometrie. Tento text nebude obsahovat žádné hodnoty Z (nadmořská výška) ani M (měření), které nese instance. |
byte[] STAsBinary() | Vrátí reprezentaci interního formátu SQL Serveru (CLR) instance Geometrie. Tato hodnota nebude obsahovat žádné hodnoty Z ani M přenášené instancí. |
byte[] serialize() | Vrátí bajty, které představují interní formát SQL Serveru typu Geometrie. |
boolean hasM() | Vrátí, pokud objekt obsahuje hodnotu M (míra). |
boolean hasZ() | Vrátí, pokud objekt obsahuje hodnotu Z (nadmořská výška). |
Double getX() | Vrátí hodnotu souřadnic X. |
Double getY() | Vrátí hodnotu souřadnice Y. |
Double getM() | Vrátí hodnotu M (míra) objektu. |
Double getZ() | Vrátí hodnotu Z (výška) objektu. |
int getSrid() | Vrátí hodnotu SRID (Spatial Reference Identifier). |
boolean isNull() | Vrátí, pokud je objekt Geometrie null. |
int STNumPoints() | Vrátí počet bodů v objektu Geometrie. |
String STGeometryType() | Vrátí název typu Open Geospatial Consortium (OGC) reprezentovaný instancí geometrie. |
String asTextZM() | Vrátí reprezentaci objektu geometrie Well-Known Text (WKT). |
String toString() | Vrátí řetězcovou reprezentaci objektu Geometry. |
Zeměpis
Metoda | Popis |
---|---|
Geography STGeomFromText(String wkt, int SRID) | Konstruktor pro geografickou instanci z reprezentace Open Geospatial Consortium (OGC) Well-Known Text (WKT), rozšířen o hodnoty Z (nadmořská výška) a M (měřítko), které jsou přenášeny instancí. |
Geography STGeomFromWKB(byte[] wkb ) |
Konstruktor pro vytvoření geografického objektu z binární reprezentace Open Geospatial Consortium (OGC) Well-Known Binary (WKB). Poznámka: Tato metoda v současné době používá interní formát SQL Serveru (CLR) k vytvoření instance geometrie, ale v budoucnu bude tato metoda změněna tak, aby přijímala data WKB, protože SQL Server protějšku této metody (STGeomFromWKB) používá WKB. U stávajících uživatelů, kteří už tuto metodu používají, zvažte místo toho přepnutí na deserializaci (bajt). |
Zeměpisná deserializace(bajt[] clr) | Konstruktor pro geografickou instanci z interního formátu SQL Serveru pro prostorová data |
Zeměpisné parsování(řetězec wkt) | Konstruktor pro geografickou instanci z reprezentace Open Geospatial Consortium (OGC) Well-Known Text (WKT). Identifikátor prostorového odkazu je ve výchozím nastavení nastaven na hodnotu 0. |
Geografický bod (double zeměpisná délka, double zeměpisná šířka, int SRID) | Konstruktor pro instanci Zeměpis, který představuje instanci bodu z její délky a zeměpisné šířky a identifikátor prostorového odkazu. |
String STAsText() | Vrátí reprezentaci Open Geospatial Consortium (OGC) Well-Known Text (WKT) geografické instance. Tento text nebude obsahovat žádné hodnoty Z (zvýšení) ani M (míra) přenášené instancí. |
byte[] STAsBinary()) | Vrátí interní reprezentaci instance zeměpisu ve formátu SQL Serveru (CLR). Tato hodnota nebude obsahovat žádné hodnoty Z ani M přenášené instancí. |
byte[] serialize() | Vrátí bajty, které představují interní formát SQL Serveru typu Zeměpis. |
boolean hasM() | Vrátí, pokud objekt obsahuje hodnotu M (míra). |
boolean hasZ() | Vrátí, zda objekt obsahuje hodnotu Z (výška). |
Double getLatitude() | Vrátí hodnotu zeměpisné šířky. |
Double getLongitude() | Vrátí hodnotu délky. |
Double getM() | Vrátí hodnotu M (míra) objektu. |
Double getZ() | Vrátí Z (výška) hodnotu objektu. |
int getSrid() | Vrátí hodnotu SRID (Spatial Reference Identifier). |
boolean isNull() | Vrátí, pokud je objekt Geography null. |
int STNumPoints() | Vrátí počet bodů v objektu Geography. |
String STGeographyType() | Vrátí název typu Open Geospatial Consortium (OGC) reprezentovaný geografickou instancí. |
String asTextZM() | Vrátí textovou reprezentaci Well-Known (WKT) objektu Geography. |
String toString() | Vrátí řetězcovou reprezentaci objektu Geography. |
Omezení prostorových datových typů
Prostorové dílčí datové typy CircularString, CompoundCurve, CurvePolygona FullGlobe jsou podporovány pouze od SQL Serveru 2012 a vyšší.
Funkce Always Encrypted se nedá použít s prostorovými datovými typy.
Uložené procedury, TVP a operace BulkCopy v současné době nejsou podporovány s prostorovými datovými typy.