Delen via


Instanties voor geometrie maken, construeren en er query's op uitvoeren

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

Het ruimtelijke gegevenstype planar, geometrie, vertegenwoordigt gegevens in een Euclidean (plat) coördinaatsysteem. Dit type wordt geïmplementeerd als een CLR-gegevenstype (Common Language Runtime) in SQL Server.

Het geometrietype is vooraf gedefinieerd en beschikbaar in elke database. U kunt tabelkolommen van typegeometrie maken en op geometriegegevens werken op dezelfde manier als andere CLR-typen.

Het geometriegegevenstype (planar) dat wordt ondersteund door SQL Server, voldoet aan de Eenvoudige functies van het Open Georuimteal Consortium (OGC) voor VERSIE 1.1.0 van SQL-specificatie.

Zie het volgende voor meer informatie over OGC-specificaties:

SQL Server ondersteunt een subset van de bestaande GML 3.1-standaard die is gedefinieerd in het volgende schema: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd

Een nieuw geometrie-exemplaar maken of construeren

Een nieuw geometrie-exemplaar maken op basis van een bestaand exemplaar

Het gegevenstype geometrie biedt tal van ingebouwde methoden die u kunt gebruiken om nieuwe geometrie-exemplaren te maken op basis van bestaande exemplaren.

Een buffer rond een geometrie maken
STBuffer (geometriegegevenstype)

BufferWithTolerance (geometriegegevenstype)

Een vereenvoudigde versie van een geometrie maken
Reduce (geometriegegevenstype)

De convex omhulling van een geometrie maken
STConvexHull (geometriegegevenstype)

Een geometrie maken op basis van het snijpunt van twee geometrieën
STIntersection (geometriegegevenstype)

Een geometrie maken op basis van de samenvoeging van twee geometrieën
STUnion (geometriegegevenstype)

Een geometrie maken op basis van de punten waar de ene geometrie geen andere overlapt
STDifference (geometriegegevenstype)

Een geometrie maken op basis van de punten waar twee geometrieën elkaar niet overlappen
STSymDifference (geometriegegevenstype)

Om een willekeurige Punt instantie te maken die op een bestaande geometrie ligt
STPointOnSurface (geometriegegevenstype)

Een geometrie-exemplaar maken op basis van Well-Known Tekstinvoer

Het gegevenstype geometrie biedt verschillende ingebouwde methoden waarmee een geometrie wordt gegenereerd op basis van de OPEN Geospatial Consortium (OGC) WKT-weergave. De WKT-standaard is een tekenreeks waarmee geometriegegevens in tekstvorm kunnen worden uitgewisseld.

Elk type geometrie-exemplaar maken op basis van WKT-invoer
STGeomFromText (geometriegegevenstype)

Parseren (geometriegegevenstype)

Een geometriepuntexemplaar uit WKT-invoer maken
STPointFromText (geometriegegevenstype)

Een geometrie MultiPoint-exemplaar maken op basis van WKT-invoer
STMPointFromText (geometriegegevenstype)

Een LineString-geometrie-exemplaar maken vanuit WKT-invoer
STLineFromText (geometriegegevenstype)

Een geometrie MultiLineString-exemplaar maken op basis van WKT-invoer
STMLineFromText (geometriegegevenstype)

Een geometrie Polygon-exemplaar construeren op basis van WKT-invoer
STPolyFromText (geometriegegevenstype)

Een geometrie-multipolygonexemplaar construeren op basis van WKT-invoer
STMPolyFromText (geometriegegevenstype)

Een geometry GeometryCollection-exemplaar maken op basis van WKT-invoer
STGeomCollFromText (geometriegegevenstype)

Een geometrie-exemplaar maken op basis van Well-Known Binaire invoer

WKB is een binaire indeling die is opgegeven door het Open Georuimteal Consortium (OGC) waarmee geometriegegevens kunnen worden uitgewisseld tussen een clienttoepassing en een SQL-database. De volgende functies accepteren WKB-invoer om geometrieën te bouwen:

Elk type geometrie-exemplaar maken op basis van WKB-invoer
STGeomFromWKB (geometriegegevenstype)

Een geometriepuntexemplaren maken op basis van WKB-invoer
STPointFromWKB (geometriegegevenstype)

Een geometrie MultiPoint-exemplaar maken vanuit WKB-invoer
STMPointFromWKB (geometriegegevenstype)

Een geometrie LineString-exemplaar maken op basis van WKB-invoer
STLineFromWKB (geometriegegevenstype)

Een geometrie MultiLineString-exemplaar maken op basis van WKB-invoer
STMLineFromWKB (geometriegegevenstype)

Om een geometrie-polygoonexemplaar te construeren op basis van WKB-invoer
STPolyFromWKB (geometriegegevenstype)

Een geometrie MultiPolygon-exemplaar construeren uit WKB-invoer
STMPolyFromWKB (geometriegegevenstype)

Een geometry GeometryCollection-exemplaar maken op basis van WKB-invoer
STGeomCollFromWKB (geometriegegevenstype)

Een geometrie-exemplaar maken van GML-tekstinvoer

Het gegevenstype geometrie biedt een methode waarmee een geometrie-exemplaar van GML wordt gegenereerd, een XML-weergave van geometrische objecten. SQL Server ondersteunt een subset van GML.

Elk type geometrie-exemplaar maken op basis van GML-invoer
GeomFromGml (geometriegegevenstype)

Geef Bekende Tekst en Bekende Binaire Weergave terug vanuit een geometrie-instantie

U kunt de volgende methoden gebruiken om de WKT- of WKB-indeling van een geometrie-exemplaar te retourneren:

Om de WKT-weergave van een geometrie-exemplaar te retourneren
STAsText (geometriegegevenstype)

ToString (geometriegegevenstype)

Om de WKT-weergave van een geometrie-exemplaar, inclusief Z- en M-waarden, te retourneren
AsTextZM (geometriegegevenstype)

De WKB-weergave van een geometrie-exemplaar retourneren
STAsBinary (geometriegegevenstype)

Een GML-weergave van een geometrie-exemplaar retourneren
AsGml (geometriegegevenstype)

Query's uitvoeren op de eigenschappen en het gedrag van geometrie-exemplaren

Alle geometrie-exemplaren hebben een aantal eigenschappen die kunnen worden opgehaald via methoden die SQL Server biedt. In de volgende onderwerpen worden de eigenschappen en het gedrag van geometrietypen en de methoden voor het uitvoeren van query's op elk type gedefinieerd.

Informatie over geldigheid, instantietype en GeometryCollection

Zodra een geometrie-exemplaar is samengesteld, kunt u de volgende methoden gebruiken om te bepalen of deze goed is gevormd, het exemplaartype retourneert of, als het een verzamelingsexemplaren is, een specifiek geometrie-exemplaar retourneert .

Het exemplaartype van een geometrie retourneren
STGeometryType (geometriegegevenstype)

Bepalen of een geometrie een bepaald exemplaartype is
InstanceOf (geometriegegevenstype)

Bepalen of een geometrie-exemplaar goed is gevormd voor het exemplaartype
STIsValid (geometriegegevenstype)

Een geometrie-exemplaar converteren naar een correct gevormd geometrie-exemplaar met een exemplaartype
MakeValid (geometriegegevenstype)

Het aantal geometrieën in een instantie van de geometrieverzameling retourneren
STNumGeometries (geometriegegevenstype)

Een specifieke geometrie retourneren in een instantie van de geometrieverzameling
STGeometryN (Geometriegegevenstype) STGeometryN (Geometriegegevenstype)

Aantal punten

Alle niet-lege geometrie-exemplaren bestaan uit punten. Deze punten vertegenwoordigen de X- en Y-coördinaten van het vlak waarop de geometrieën worden getekend. geometrie biedt talloze ingebouwde methoden voor het uitvoeren van query's op de punten van een exemplaar.

Geef het aantal punten dat een exemplaar vormen terug
STNumPoints (geometriegegevenstype)

Een specifiek punt in een exemplaar teruggeven
STPointN (geometriegegevenstype)

Een willekeurig punt retourneren dat zich op een instantie bevindt
STPointOnSurface (geometriegegevenstype)

Het beginpunt van een instantie retourneren
STStartPoint (geometriegegevenstype)

Het eindpunt van een exemplaar retourneren
STEndpoint (geometriegegevenstype)

X-coördinaat van een Point-instantie retourneren
STX- (geometriegegevenstype)

Retourneer de Y-coördinaat van een Point-instantie
STY (geometriegegevenstype)

Het geometrische middelpunt van een polygon-, CurvePolygon- of MultiPolygon-exemplaar retourneren
STCentroid (geometriegegevenstype)

Dimension

Een instantie van een niet-lege geometrie kan 0-, 1- of 2-dimensionaal zijn. Nuldimensionale geometrieën, zoals Punt en MultiPoint, hebben geen lengte of vlak. Eendimensionale objecten, zoals LineString, CircularString, CompoundCurve en MultiLineString, hebben lengte. Tweedimensionale exemplaren, zoals Veelhoek, CurvePolygon en MultiPolygon, hebben gebied en lengte. Lege exemplaren rapporteren een dimensie van -1 en een GeometryCollection rapporteert een gebied dat afhankelijk is van de typen inhoud.

De dimensie van een instantie retourneren
STDimension (geometriegegevenstype)

De lengte van een object retourneren
STLength (geometriegegevenstype)

De oppervlakte van een exemplaar retourneren
STArea (geometriegegevenstype)

Empty

Een leeggeometrie-exemplaar heeft geen punten. De lengte van lege LineString- en CircularString-exemplaren, van CompoundCurve en van MultiLineString is nul. Het gebied van lege polygoon-, CurvePolygon- en MultiPolygon-exemplaren is 0.

Bepalen of een exemplaar leeg is
STIsEmpty (geometriegegevenstype).

Simple

Om een geometrie van het exemplaar eenvoudig te maken, moet deze voldoen aan beide vereisten:

  • Elke figuur van het object mag zichzelf niet kruisen, behalve op de eindpunten.

  • Er kunnen geen twee figuren van het voorbeeld elkaar kruisen op een punt dat zich niet in beide van hun grenzen bevindt.

Note

Lege geometrieën zijn altijd eenvoudig.

Bepalen of een exemplaar eenvoudig is
STIsSimple (geometriegegevenstype).

Grens, interieur en buitenkant

Het interieur van een geometrie-exemplaar is de door het exemplaar bezette ruimte, en de buitenkant is de ruimte die niet bezet is.

Grens wordt als volgt gedefinieerd door de OGC:

  • Punt - en MultiPoint-exemplaren hebben geen grens.

  • LineString- en MultiLineString-grenzen worden gevormd door de begin- en eindpunten waarbij diegene die een even aantal keren voorkomen worden verwijderd.

DECLARE @g geometry;  
SET @g = geometry::Parse('MULTILINESTRING((0 1, 0 0, 1 0, 0 1), (1 1, 1 0))');  
SELECT @g.STBoundary().ToString();  

De grens van een polygoon of multipolygon exemplaar is de verzameling van zijn ringen.

DECLARE @g geometry;  
SET @g = geometry::Parse('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))');  
SELECT @g.STBoundary().ToString();  

De begrenzing van een instantie ophalen
STBoundary (geometriegegevenstype)

Envelope

De envelop van een geometrie-exemplaar , ook wel bekend als het begrenzingsvak, is de rechthoek met de as uitgelijnde rechthoek die wordt gevormd door de minimum- en maximumcoördinaten (X,Y) van het exemplaar.

De envelop van een instantie retourneren
STEnvelope (geometriegegevenstype)

Closure

Een geslotengeometrie-exemplaar is een afbeelding waarvan de beginpunten en eindpunten hetzelfde zijn. Veelhoekobjecten worden als gesloten beschouwd. Point-exemplaren zijn niet afgesloten.

Een ring is een eenvoudig, gesloten LineString-exemplaar .

Bepalen of een exemplaar is gesloten
STIsClosed (geometriegegevenstype)

Bepalen of een exemplaar een ring is
STIsRing (geometriegegevenstype)

Om de buitenring van een Polygon instantie te retourneren
STExteriorRing (geometriegegevenstype)

Het aantal binnenste ringen in een veelhoek teruggeven
STNumInteriorRing (geometriegegevenstype)

Een opgegeven binnenring van een veelhoek retourneren
STInteriorRingN (geometriegegevenstype)

Ruimtelijke referentie-id (SRID)

De ruimtelijke referentie-id (SRID) is een id die aangeeft in welk coördinaatsysteem het geometrie-exemplaar wordt weergegeven. Twee exemplaren met verschillende SRID's kunnen niet worden gecompareerd.

De SRID van een exemplaar instellen of retourneren
STSrid (geometriegegevenstype)

Note

Deze eigenschap kan worden gewijzigd.

Relaties tussen geometrie-exemplaren bepalen

Het gegevenstype geometrie biedt veel ingebouwde methoden die u kunt gebruiken om relaties tussen twee geometrie-exemplaren te bepalen.

Bepalen of twee exemplaren dezelfde puntenset vormen
STEquals (geometriegegevenstype)

Bepalen of twee instanties niet overlappen
STDisjoint (geometriegegevenstype)

Bepalen of twee exemplaren elkaar kruisen
STIntersects (geometriegegevenstype)

Bepalen of twee exemplaren aanraken
STTouches (geometriegegevenstype)

Bepalen of twee exemplaren elkaar overlappen
STOverlaps (geometriegegevenstype)

Bepalen of twee exemplaren elkaar kruisen
STCrosses (geometriegegevenstype)

Bepalen of het ene exemplaar zich in een ander exemplaar bevindt
STWithin (geometriegegevenstype)

Bepalen of het ene exemplaar een ander exemplaar bevat
STContains (geometriegegevenstype)

Bepalen of het ene instantie de andere overlapt
STOverlaps (geometriegegevenstype)

Bepalen of twee exemplaren ruimtelijk gerelateerd zijn
STRelate (geometriegegevenstype)

De kortste afstand tussen punten in twee geometrieën bepalen
STDistance (geometriegegevenstype)

** Geometrie-instanties standaard ingesteld op SRID nul

De standaard-SRID voor geometrie-exemplaren in SQL Server is 0. Met ruimtelijke geometriegegevens is de specifieke SRID van het ruimtelijke exemplaar niet vereist om berekeningen uit te voeren; Instanties kunnen zich dus in niet-gedefinieerde planaire ruimte bevinden. De SQL Server-database-engine maakt gebruik van SRID om niet-gedefinieerde planaire ruimte in de berekeningen van 0 aan te geven.

Remarks

Geometrie - en geografietypen kunnen niet worden gebruikt als tabelkolommen in het SQL Analytics-eindpunt in Microsoft Fabric of Warehouse in Microsoft Fabric.

Examples

In de volgende twee voorbeelden ziet u hoe u geometriegegevens toevoegt en opvraagt.

Example A.

In dit voorbeeld wordt een tabel gemaakt met een identiteitskolom en een geometry kolom GeomCol1. In een derde kolom wordt de geometry kolom weergegeven in de WEERGAVE OPEN Georuimteal Consortium (OGC) Well-Known Text (WKT) en wordt de STAsText() methode gebruikt. Er worden vervolgens twee rijen ingevoegd: één rij bevat een LineString exemplaar van geometryen één rij bevat een Polygon exemplaar.

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  

Example B.

In dit voorbeeld wordt de STIntersection() methode gebruikt om de punten te retourneren waarin de twee eerder ingevoegde geometry exemplaren elkaar kruisen.

DECLARE @geom1 geometry;  
DECLARE @geom2 geometry;  
DECLARE @result 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();