Sdílet prostřednictvím


Použití prostorových datových typů

Stáhnout ovladač JDBC

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ů

  1. Prostorové dílčí datové typy CircularString, CompoundCurve, CurvePolygona FullGlobe jsou podporovány pouze od SQL Serveru 2012 a vyšší.

  2. Funkce Always Encrypted se nedá použít s prostorovými datovými typy.

  3. Uložené procedury, TVP a operace BulkCopy v současné době nejsou podporovány s prostorovými datovými typy.

Viz také

Ukázka prostorových datových typů (JDBC)