Udostępnij za pomocą


CircularString

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstancePunkt końcowy analizy SQL w usłudze Microsoft FabricMagazyn w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Element CircularString to zbiór zera lub większej liczby ciągłych segmentów łuku cyklicznego. Segment łuku cyklicznego to zakrzywiony segment zdefiniowany przez trzy punkty w dwuwymiarowej płaszczyźnie; pierwszy punkt nie może być taki sam jak trzeci punkt. Jeśli wszystkie trzy punkty łuku kołowego są kolinearne, łuk jest traktowany jako odcinek liniowy.

Instancje CircularString

Na poniższym rysunku przedstawiono prawidłowe wystąpienia CircularString:

Diagram przykładowych pomiarów przestrzennych „CircularString”.

Zaakceptowane wystąpienia

Wystąpienie CircularString jest akceptowane, jeśli jest puste lub zawiera nieparzystą liczbę punktów, n, gdzie n > 1. Akceptowane są następujące wystąpienia CircularString.

DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';  
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';  
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 2 0, 1 1)';  

@g3 pokazuje, że wystąpienie CircularString może zostać zaakceptowane, ale nieprawidłowe. Następująca deklaracja wystąpienia CircularString nie jest akceptowana. Ta deklaracja zgłasza wyjątek System.FormatException.

DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';  

Prawidłowe wystąpienia

Prawidłowe wystąpienie CircularString musi być puste lub mieć następujące atrybuty:

  • Musi zawierać co najmniej jeden okrągły segment łuku (co najmniej trzy punkty).
  • Ostatni punkt końcowy dla każdego segmentu łuku cyklicznego w sekwencji, z wyjątkiem ostatniego segmentu, musi być pierwszym punktem końcowym dla następnego segmentu w sekwencji.
  • Musi mieć nieparzystą liczbę punktów.
  • Nie może nakładać się na siebie w odstępach czasu.
  • Mimo że wystąpienia CircularString mogą zawierać segmenty linii, te segmenty linii muszą być definiowane przez trzy punkty współliniowe.

W poniższym przykładzie przedstawiono prawidłowe wystąpienia CircularString.

DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';  
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';  
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1, 0 1)';  
DECLARE @g4 geometry = 'CIRCULARSTRING(1 1, 2 2, 2 2)';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(),@g4.STIsValid();  

Wystąpienie circularString musi zawierać co najmniej dwa segmenty łuku cyklicznego, aby zdefiniować pełny okrąg. Wystąpienie CircularString nie może użyć pojedynczego cyklicznego segmentu łuku (takiego jak (1 1, 3 1, 1 1)) w celu zdefiniowania pełnego okręgu. Użyj (1 1, 2 2, 3 1, 2 0, 1 1), aby zdefiniować okrąg.

W poniższym przykładzie przedstawiono instancje CircularString, które są nieprawidłowe.

DECLARE @g1 geometry = 'CIRCULARSTRING(1 1, 2 0, 1 1)';  
DECLARE @g2 geometry = 'CIRCULARSTRING(0 0, 0 0, 0 0)';  
SELECT @g1.STIsValid(), @g2.STIsValid();  

Wystąpienia z punktami współliniowymi

W następujących przypadkach segment łuku cyklicznego będzie traktowany jako segment liniowy:

  • Gdy wszystkie trzy punkty są współliniowe (na przykład (1 3, 4 4, 7 5)).
  • Gdy pierwszy i środkowy punkt są takie same, ale trzeci punkt jest inny (na przykład (1 3, 1 3, 7 5)).
  • Gdy środkowy i ostatni punkt są takie same, ale pierwszy punkt jest inny (na przykład (1 3, 4 4, 4 4 4)).

Examples

A. Tworzenie wystąpienia geometrii przy użyciu pustego ciągu CircularString

W tym przykładzie pokazano, jak utworzyć puste wystąpienie CircularString :

DECLARE @g geometry;  
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');  

B. Tworzenie instancji geometrii przy użyciu CiąguOkrągłego z jednym segmentem łuku kołowego

W poniższym przykładzie pokazano, jak utworzyć wystąpienie CircularString z pojedynczym segmentem łuku o kształcie półkola:

DECLARE @g geometry;  
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);  
SELECT @g.ToString();  

C. Tworzenie instancji geometrii przy użyciu CircularString z wieloma segmentami łuku kołowego

W poniższym przykładzie pokazano, jak utworzyć wystąpienie CircularString z więcej niż jednym segmentem łuku okrągłego (pełny okrąg):

DECLARE @g geometry;  
SET @g = geometry::Parse('CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1)');  
SELECT 'Circumference = ' + CAST(@g.STLength() AS NVARCHAR(10));    

Oto zestaw wyników.

Circumference = 6.28319  

Porównaj dane wyjściowe, gdy funkcja LineString jest używana zamiast elementu CircularString:

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('LINESTRING(2 1, 1 2, 0 1, 1 0, 2 1)', 0);  
SELECT 'Perimeter = ' + CAST(@g.STLength() AS NVARCHAR(10));  

Oto zestaw wyników.

Perimeter = 5.65685  

Wartość przykładu CircularString jest zbliżona do 2∏, czyli rzeczywistego obwodu okręgu.

D. Deklarowanie i tworzenie instancji geometrii z użyciem CircularString w tej samej instrukcji

W tym fragmencie kodu pokazano, jak zadeklarować i utworzyć wystąpienie geometrii za pomocą elementu CircularString w tej samej instrukcji.

DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';  

E. Tworzenie instancji geograficznej za pomocą CircularString

W poniższym przykładzie pokazano, jak zadeklarować i utworzyć wystąpienie geography za pomocą elementu CircularString.

DECLARE @g geography = 'CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';  

F. Tworzenie instancji geometrii z CircularString, który jest linią prostą

W poniższym przykładzie pokazano, jak utworzyć wystąpienie CircularString , które jest linią prostą:

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);