Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Magazyn w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
CurvePolygon to topologicznie zamknięta powierzchnia zdefiniowana przez zewnętrzny pierścień graniczny oraz zero lub więcej pierścieni wewnętrznych w danych przestrzennych mechanizmu bazy danych SQL.
Important
Aby uzyskać szczegółowy opis i przykłady funkcji przestrzennych wprowadzonych w programie SQL Server 2012 (11.x), w tym podtypu CurvePolygon , pobierz oficjalny dokument New Spatial Features in SQL Server 2012 (Nowe funkcje przestrzenne w programie SQL Server 2012).
Następujące kryteria definiują atrybuty wystąpienia CurvePolygon :
Granica wystąpienia CurvePolygon jest definiowana przez pierścień zewnętrzny i wszystkie pierścienie wewnętrzne.
Wnętrze wystąpienia CurvePolygon to przestrzeń między pierścieniem zewnętrznym a wszystkimi pierścieniami wewnętrznymi.
Wystąpienie CurvePolygon różni się od wystąpienia Polygon w tym, że wystąpienie CurvePolygon może zawierać następujące segmenty łuku cyklicznego: CircularString i CompoundCurve.
Instancje CompoundCurve
Na poniższej ilustracji przedstawiono prawidłowe figury CurvePolygon :
Zaakceptowane wystąpienia
Aby zaakceptować wystąpienie CurvePolygon, musi być ono puste lub zawierać wyłącznie zaakceptowane pierścienie łuku okrągłego. Zaakceptowany pierścień łuku cyklicznego spełnia następujące wymagania.
Jest akceptowanym wystąpieniem LineString, CircularString lub CompoundCurve . Aby uzyskać więcej informacji na temat akceptowanych wystąpień, zobacz LineString, CircularString i CompoundCurve.
Ma co najmniej cztery punkty.
Początek i punkt końcowy mają te same współrzędne X i Y.
Note
Wartości Z i M są ignorowane.
W poniższym przykładzie przedstawiono zaakceptowane wystąpienia CurvePolygon .
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 jest akceptowany, mimo że punkty początkowe i końcowe mają różne wartości Z, ponieważ wartości Z są ignorowane.
@g5 jest akceptowany, mimo że wystąpienie typu geografia jest nieprawidłowe.
W poniższych przykładach jest zgłaszany błąd 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 nie jest akceptowana, ponieważ punkty początkowe i końcowe nie mają tej samej wartości Y.
@g2 nie jest akceptowane, ponieważ pierścień nie ma wystarczającej liczby punktów.
Prawidłowe wystąpienia
Aby wystąpienie CurvePolygon było prawidłowe zarówno zewnętrzne, jak i wewnętrzne pierścienie muszą spełniać następujące kryteria:
- Mogą dotykać tylko w pojedynczych punktach tangensowych.
- Nie mogą się krzyżyć.
- Każdy pierścień musi zawierać co najmniej cztery punkty.
- Każdy pierścień musi być akceptowalnym typem krzywej.
Wystąpienia CurvePolygon muszą również spełniać określone kryteria w zależności od tego, czy są to typy danych geometrycznych, czy geograficznych.
Typ danych geometria
Prawidłowe wystąpienie geometryCurvePolygon musi mieć następujące atrybuty:
- Wszystkie pierścienie wewnętrzne muszą znajdować się w pierścieniu zewnętrznym.
- Może mieć wiele pierścieni wewnętrznych, ale pierścień wewnętrzny nie może zawierać innego pierścienia wewnętrznego.
- Żaden pierścień nie może przecinać samego siebie ani innego pierścienia.
- Pierścienie mogą dotykać tylko w pojedynczych punktach styczności (liczba punktów, w których pierścienie się stykają, musi być skończona).
- Wnętrze wielokąta musi być połączone.
W poniższym przykładzie przedstawiono prawidłowe wystąpienia geometryCurvePolygon .
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();
Wystąpienia CurvePolygon mają te same reguły ważności co instancje Polygon z wyjątkiem, że wystąpienia CurvePolygon mogą akceptować nowe typy okrągłych segmentów łuku. Aby uzyskać więcej przykładów wystąpień, które są prawidłowe lub nieprawidłowe, zobacz Wielokąt.
Typ danych geografii
Prawidłowe wystąpienie geographyCurvePolygon musi mieć następujące atrybuty:
- Wnętrze wielokąta jest połączone przy użyciu lewej reguły.
- Żaden pierścień nie może przecinać samego siebie ani innego pierścienia.
- Pierścienie mogą dotykać tylko w pojedynczych punktach styczności (liczba punktów, w których pierścienie się stykają, musi być skończona).
- Wnętrze wielokąta musi być połączone.
Na poniższym przykładzie przedstawiono prawidłowy przypadek geography CurvePolygon.
DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';
SELECT @g.STIsValid();
Examples
A. Tworzenie wystąpienia geometrii przy użyciu pustego KrzywaPoligon
W tym przykładzie pokazano, jak utworzyć puste wystąpienie CurvePolygon :
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON EMPTY');
B. Deklarowanie i tworzenie wystąpienia geometrii z użyciem CurvePolygon w jednej instrukcji
Ten fragment kodu pokazuje, jak zadeklarować i zainicjować wystąpienie geometryczne za pomocą elementu CurvePolygon w tej samej instrukcji:
DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'
C. Tworzenie obiektu geograficznego za pomocą instancji CurvePolygon
Ten fragment kodu pokazuje, jak zadeklarować i zainicjować wystąpienie geograficzne za pomocą elementu CurvePolygon:
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. Przechowywanie krzywego poligonu jedynie z zewnętrznym pierścieniem granicznym
W tym przykładzie pokazano, jak przechowywać prosty okrąg w instancji CurvePolygon (do zdefiniowania okręgu służy tylko zewnętrzny pierścień ograniczający):
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. Zapisz krzywą polilinie zawierającą pierścienie wewnętrzne.
W tym przykładzie tworzony jest pierścień w instancji CurvePolygon (do zdefiniowania pierścienia używa się zarówno zewnętrznego pierścienia granicznego, jak i wewnętrznego pierścienia):
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;
W tym przykładzie pokazano zarówno przykład prawidłowego wystąpienia CurvePolygon jak i przykład błędnego wystąpienia przy użyciu pierścieni wewnętrznych.
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;
Zarówno @g1, jak i @g2 używają tego samego zewnętrznego ograniczającego pierścienia: okręgu o promieniu 5 jednostek, a także kwadratu jako pierścienia wewnętrznego. Jednak wystąpienie @g1 jest prawidłowe, ale wystąpienie @g2 jest nieprawidłowe. Powodem, dla którego @g2 jest nieprawidłowy, jest to, że pierścień wewnętrzny dzieli przestrzeń wewnętrzną ograniczoną przez pierścień zewnętrzny na cztery oddzielne regiony. Na poniższym rysunku przedstawiono, co się stało: