Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
A CurvePolygon egy topológiailag zárt felület, amelyet egy külső határoló gyűrű és nulla vagy több belső gyűrű határoz meg az SQL Database Engine térbeli adataiban.
Fontos
Az SQL Server 2012-ben (11.x) bevezetett térbeli funkciók részletes leírásáért és példáiért, beleértve a CurvePolygon altípust, töltse le az SQL Server 2012 Új térbeli funkciói című tanulmányt.
A CurvePolygon-példány attribútumait a következő feltételek határozzák meg:
A CurvePolygon-példány határát a külső gyűrű és az összes belső gyűrű határozza meg.
A CurvePolygon példány belső tere a külső gyűrű és az összes belső gyűrű közötti hely.
A CurvePolygon-példányok abban különböznek a sokszögpéldányoktól , hogy a CurvePolygon-példányok a következő körívszegmenseket tartalmazhatják: CircularString és CompoundCurve.
CompoundCurve-példányok
Az alábbi ábrán érvényes CurvePolygon-ábrák láthatók:
Elfogadott esetek
Ahhoz, hogy egy CurvePolygon-példányt elfogadjon, üresnek kell lennie, vagy csak elfogadott körkörös ívgyűrűket kell tartalmaznia. Az elfogadott körívgyűrű megfelel az alábbi követelményeknek.
Elfogadott LineString-, CircularString- vagy CompoundCurve-példány. Az elfogadott példányokról további információért lásd a LineString, CircularString és CompoundCurve elemeket.
Legalább négy ponttal rendelkezik.
A kezdő és a végpont azonos X és Y koordinátákkal rendelkezik.
Megjegyzés:
A Z és az M értékek figyelmen kívül lesznek hagyva.
Az alábbi példa az elfogadott CurvePolygon-példányokat mutatja be.
DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0, 0 0))';
DECLARE @g3 geometry = 'CURVEPOLYGON((0 0 1, 0 0 2, 0 0 3, 0 0 3))'
DECLARE @g4 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';
DECLARE @g5 geography = 'CURVEPOLYGON((-122.3 47, 122.3 -47, 125.7 -49, 121 -38, -122.3 47))';
@g3 akkor is elfogadott, ha a kezdő és a végpont eltérő Z értékkel rendelkezik, mert a Z értékek figyelmen kívül maradnak.
@g5 akkor is elfogadott, ha a földrajzi típuspéldány érvénytelen.
Az alábbi példák dobnak System.FormatException.
DECLARE @g1 geometry = 'CURVEPOLYGON((0 5, 0 0, 0 0, 0 0))';
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0))';
@g1 nem fogadható el, mert a kezdő és a végpont nem ugyanazzal az Y értékkel rendelkezik.
@g2 nem fogadható el, mert a gyűrű nem rendelkezik elegendő ponttal.
Érvényes példányok
Ahhoz, hogy egy CurvePolygon-példány érvényes legyen, mind a külső, mind a belső gyűrűknek meg kell felelniük a következő feltételeknek:
- Csak egyetlen érintési ponton érinthetik egymást.
- Nem tudják keresztezni egymást.
- Minden gyűrűnek legalább négy pontot kell tartalmaznia.
- Minden gyűrűnek elfogadható görbetípusnak kell lennie.
A CurvePolygon-példányoknak adott feltételeknek is meg kell felelniük attól függően, hogy geometriai vagy földrajzi adattípusokról van-e szó.
Geometriai adattípus
Egy érvényes GeometryCurvePolygon-példánynak a következő attribútumokkal kell rendelkeznie:
- Minden belső gyűrűnek a külső gyűrűn belül kell lennie.
- Több belső gyűrű is lehet, de egy belső gyűrű nem tartalmazhat másik belső gyűrűt.
- Egyetlen gyűrű sem keresztezheti önmagát vagy egy másik gyűrűt.
- A gyűrűk csak egyedi érintési pontokon érinthetnek (azoknak a pontoknak a száma, ahol a gyűrűk érintkeznek, véges kell, hogy legyen).
- A sokszög belső részét össze kell kapcsolni.
Az alábbi példa érvényes geometriaCurvePolygon-példányokat mutat be.
DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';
DECLARE @g2 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';
SELECT @g1.STIsValid(), @g2.STIsValid();
A CurvePolygon-példányok érvényességi szabályai megegyeznek a sokszögpéldányokkal, azzal a kivétellel, hogy a CurvePolygon-példányok elfogadhatják az új körívszegmens-típusokat. Az érvényes vagy érvénytelen példányokra további példákat a Sokszög című témakörben talál.
Földrajzi adattípus
Egy érvényes geographyCurvePolygon-példánynak a következő attribútumokkal kell rendelkeznie:
- A sokszög belső része a bal oldali szabály használatával csatlakozik.
- Egyetlen gyűrű sem keresztezheti önmagát vagy egy másik gyűrűt.
- A gyűrűk csak egyetlen érintőponton érintkezhetnek (a gyűrűk érintkezési pontjainak száma véges kell, hogy legyen).
- A sokszög belső részét össze kell kapcsolni.
Az alábbi példa egy érvényes földrajzi Görbepolygon-példányt mutat be.
DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';
SELECT @g.STIsValid();
Példák
A. Geometriai példány létrehozása üres CurvePolygonnal
Ez a példa egy üres CurvePolygon-példány létrehozását mutatja be:
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON EMPTY');
B. Geometriai példány deklarálása és példányosítása egy CurvePolygonnal ugyanabban az utasításban
Ez a kódrészlet bemutatja, hogyan deklarálhat és inicializálhat geometriai példányokat egy CurvePolygonnal ugyanabban az utasításban:
DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'
C. Földrajzi példány létrehozása CurvePolygonnal
Ez a kódrészlet bemutatja, hogyan deklarálhat és inicializálhat földrajzi példányokat CurvePolygonnal:
DECLARE @g geography = 'CURVEPOLYGON(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';
D. Csak külső határológyűrűvel rendelkező CurvePolygon tárolása
Ez a példa bemutatja, hogyan tárolhat egy egyszerű kört egy CurvePolygon-példányban (a kör meghatározásához csak külső határológyűrűt használunk):
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');
SELECT @g.STArea() AS Area;
E. Belső gyűrűket tartalmazó "CurvePolygon" tárolása
Ez a példa létrehoz egy fánkot egy CurvePolygon-példányban (a külső határoló gyűrű és a belső gyűrű is a fánk meghatározására szolgál):
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 4, 4 0, 8 4, 4 8, 0 4), CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');
SELECT @g.STArea() AS Area;
Ebben a példában egy érvényes CurvePolygon-példány és egy érvénytelen példány is látható belső gyűrűk használatakor:
DECLARE @g1 geometry, @g2 geometry;
SET @g1 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (-2 2, 2 2, 2 -2, -2 -2, -2 2))');
IF @g1.STIsValid() = 1
BEGIN
SELECT @g1.STArea();
END
SET @g2 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (0 5, 5 0, 0 -5, -5 0, 0 5))');
IF @g2.STIsValid() = 1
BEGIN
SELECT @g2.STArea();
END
SELECT @g1.STIsValid() AS G1, @g2.STIsValid() AS G2;
Mindkettő @g1 és @g2 ugyanazt a külső határoló gyűrűt használja: egy 5 sugarú kör, és mindkettő négyzetet használ egy belső gyűrűhöz. A példány @g1 azonban érvényes, de a példány @g2 érvénytelen. A @g2 azért érvénytelen, mert a belső gyűrű négy különálló régióra osztja a külső gyűrű által határolt belső teret. Az alábbi rajz a történteket mutatja be: