Prostorové typy – geografie

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Geografický prostorový datový typ, zeměpis, je implementován jako datový typ CLR (Common Language Runtime) .NET v SQL Serveru. Tento typ představuje data v souřadnicovém systému s kruhovou zemí. Datový typ SQL Serveru geography ukládá elipsoidní data (kulová Země), například souřadnice zeměpisné šířky a délky GPS.

Note

V databázi SQL fabric je možné použít sloupce prostorových typů, ale nebudou zrcadlené na Fabric OneLake.

SQL Server podporuje sadu metod pro geografický prostorový datový typ. To zahrnuje metody v zeměpisné oblasti , které jsou definovány standardem Open Geospatial Consortium (OGC) a sadou rozšíření Microsoftu pro tento standard.

Odolnost proti chybám pro zeměpisné metody může být tak velká jako 1,0e-7 * rozsahů. Rozsahy odkazují na přibližnou maximální vzdálenost mezi body zeměpisného objektu.

Zaregistrujte geografický typ

Zeměpisný typ je předdefinovaný a dostupný v každé databázi. Sloupce tabulky typu geografie můžete vytvářet a pracovat se zeměpisnými daty stejným způsobem, jako byste používali jiné typy zadané systémem. Tento typ lze použít v persistovaných i nepersistovaných vypočtených sloupcích.

Conversion

Převod z geografie do binární, varbinární, char, varchar, nchar a nvarchar musí být explicitní. Použijte CAST nebo CONVERT.

Převod z binárního, varbinárního, char, varchar, nchara a nvarchara na geografii může být implicitní nebo explicitní.

Převod mezi geografií a všemi ostatními datovými typy není povolen. To zahrnuje i převod mezi geografií a geometrií. Pro přesun dat mezi těmito dvěma typy použijte metody Well-Known Binary (WKB) nebo Well-Known Text (WKT), například STAsBinary() s .STGeomFromWKB()

Převod z typu řetězce na geografii používá stejná pravidla jako geography::Parse(). Řetězec musí být Well-Known textu. SRID výsledku je 4326.

Převod mezi geografií a binární nebo varbinární používá SQL Server nativní formát serializace geografie, nikoli Well-Known binární. Binární hodnota Well-Known způsobuje chybu. Pro převod do nebo z Well-Known binárního systému použijte STAsBinary() a STGeomFromWKB().

Pokud je cílový řetězec nebo binární typ příliš krátký pro hodnotu geografie , dochází k chybě. Hodnota není zkrácena.

Remarks

V SQL databázích v Microsoft Fabric jsou podporovány geografické a geometrické datové typy, ale nelze je zrcadlit do Fabric OneLake.

Examples

A. Ukažte, jak přidávat a dotazovat geografická data

Následující příklady ukazují, jak přidat a dotazovat se na zeměpisná data. První příklad vytvoří tabulku se sloupcem identity a sloupcem geography . GeogCol1 Třetí sloupec převede sloupec geography na jeho reprezentaci Open Geospatial Consortium (OGC) Well-Known Text (WKT) a použije metodu STAsText(). Pak se vloží dva řádky: jeden řádek obsahuje LineString instanci geographya jeden řádek obsahuje Polygon instanci.

IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable
(
    id INT IDENTITY (1, 1),
    GeogCol1 geography,
    GeogCol2 AS GeogCol1.STAsText()
);
GO

INSERT INTO SpatialTable
(
    GeogCol1
)
VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656 )', 4326));

INSERT INTO SpatialTable
(
    GeogCol1
)
VALUES (geography::STGeomFromText('POLYGON((-122.358 47.653 , -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326));
GO

B. Vraťte průnik dvou geografických instancí

Následující příklad používá metodu STIntersection() k vrácení bodů, kde dva dříve vložené geography instance protínají.

DECLARE @geog1 AS geography;

DECLARE @geog2 AS geography;

DECLARE @result AS geography;

SELECT @geog1 = GeogCol1
FROM SpatialTable
WHERE id = 1;

SELECT @geog2 = GeogCol1
FROM SpatialTable
WHERE id = 2;

SELECT @result = @geog1.STIntersection(@geog2);

SELECT @result.STAsText();

C. Použijte geografii ve vypočteném sloupci

Následující příklad vytvoří tabulku s trvalým počítaným sloupcem pomocí zeměpisného typu.

IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable
(
    locationId INT IDENTITY (1, 1),
    location geography,
    deliveryArea AS location.STBuffer(10) PERSISTED
);