Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Typ danych przestrzennych planarnych, geometria, jest implementowany jako typ danych środowiska uruchomieniowego języka wspólnego (CLR) w programie SQL Server. Ten typ reprezentuje dane w układzie współrzędnych euklidesowych (płaskich).
Program SQL Server obsługuje zestaw metod dla typu danych przestrzennych geometrii . Metody te obejmują metody geometrii zdefiniowane przez standard Open Geospatial Consortium (OGC) i zestaw rozszerzeń firmy Microsoft do tego standardu.
Tolerancja błędów dla metod geometrycznych może być tak duża, jak 1,0e-7 * zakresów. Zakresy odnoszą się do przybliżonej maksymalnej odległości między punktami obiektu geometrii .
Rejestruj typ geometrii
Typ geometrii jest wstępnie zdefiniowany i dostępny w każdej bazie danych. Możesz tworzyć kolumny tabeli geometrii typu i działać na danych geometrycznych w taki sam sposób, jak w przypadku innych typów CLR. Typ ten może być używany zarówno w kolumnach trwałych, jak i nietrwałych.
Conversion
Przekształcenie z geometrii na binarną, warbinarną, char, varchar, nchar i nvarchar musi być jednoznaczne. Użyj CAST lub CONVERT.
Konwersja z binarnych, varbinary, char, varchar, nchar i nvarchar na geometrię może być zarówno domyślna, jak i jawna.
Konwersja między geometrią a wszystkimi innymi typami danych jest zabroniona. Obejmuje to konwersję geometrii i geografii. Aby przenosić dane między tymi dwoma typami, użyj metod Well-Known Binary (WKB) lub Well-Known Text (WKT), na przykład STAsBinary() z .STGeomFromWKB()
Konwersja z typu ciągu do geometrii wykorzystuje te same zasady co geometry::Parse(). Ciąg musi być Well-Known tekstu. SRID tego wyniku wynosi 0.
Konwersja między geometrią a binarną lub varbinarną wykorzystuje SQL Server natywny format serializacji geometrii, a nie Well-Known binarny. Wartość binarna Well-Known powoduje błąd. Aby przeprowadzić konwersję do lub z Well-Known binarnym, użyj STAsBinary() i .STGeomFromWKB()
Jeśli docelowy ciąg lub typ binarny jest zbyt krótki względem wartości geometrycznej , występuje błąd. Wartość nie jest obcięta.
Remarks
W bazie danych SQL w Microsoft Fabric obsługiwane są typy danych geograficzne i geometryczne, ale nie można ich lustrzanego odbicia do Fabric OneLake.
Examples
A. Pokaż, jak dodawać i zapytywać dane geometryczne
W poniższych dwóch przykładach pokazano, jak dodawać dane geometryczne i wykonywać zapytania o nie. Pierwszy przykład tworzy tabelę z kolumną tożsamości i kolumną geometry . GeomCol1 Trzecia kolumna renderuje kolumnę geometry w swojej reprezentacji Open Geospatial Consortium (OGC) Well-Known Text (WKT) i używa STAsText() metody . Następnie wstawiane są dwa wiersze: jeden wiersz zawiera LineString wystąpienie geometry, a jeden wiersz zawiera Polygon wystąpienie.
IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
DROP TABLE dbo.SpatialTable;
GO
CREATE TABLE SpatialTable
(
id INT IDENTITY (1, 1),
GeomCol1 geometry,
GeomCol2 AS GeomCol1.STAsText()
);
GO
INSERT INTO SpatialTable
(
GeomCol1
)
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));
INSERT INTO SpatialTable
(
GeomCol1
)
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));
GO
B. Zwróć przecięcie dwóch instancji geometrycznych
W drugim przykładzie STIntersection() użyto metody , aby zwrócić punkty, w których dwa wcześniej wstawione geometry wystąpienia przecinają się.
DECLARE @geom1 AS geometry;
DECLARE @geom2 AS geometry;
DECLARE @result AS geometry;
SELECT @geom1 = GeomCol1
FROM SpatialTable
WHERE id = 1;
SELECT @geom2 = GeomCol1
FROM SpatialTable
WHERE id = 2;
SELECT @result = @geom1.STIntersection(@geom2);
SELECT @result.STAsText();
C. Użyj geometrii w obliczonej kolumnie
Poniższy przykład tworzy tabelę z utrwałą kolumną obliczeniową przy użyciu typu geometrii .
IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
DROP TABLE dbo.SpatialTable;
GO
CREATE TABLE SpatialTable
(
locationId INT IDENTITY (1, 1),
location geometry,
deliveryArea AS location.STBuffer(10) PERSISTED
);