Aracılığıyla paylaş


CompoundCurve

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft FabricAmbarı'nda SQL analiz uç noktasıMicrosoft Fabric'te SQL veritabanıMicrosoft Fabric

CompoundCurve, geometri veya coğrafya türlerinin sıfır veya daha fazla sürekli CircularString veya LineString örneklerinden oluşan bir koleksiyondur.

Boş bir CompoundCurve örneği oluşturulabilir, ancak bir CompoundCurve geçerli olması için aşağıdaki ölçütleri karşılaması gerekir.

  1. En az bir CircularString veya LineString örneği içermelidir.

  2. CircularString veya LineString örneklerinin dizisi sürekli olmalıdır.

CompoundCurve birden çok CircularString ve LineString örneği içeriyorsa, son örnek dışındaki her örneğin bitiş uç noktası, dizideki sonraki örneğin başlangıç uç noktası olmalıdır. Bu, dizideki önceki bir örneğin bitiş noktası (4 3 7 2) ise, dizideki sonraki örneğin başlangıç noktasının (4 3 7 2) olması gerektiği anlamına gelir. Nokta için Z(yükseltme) ve M(ölçü) değerleri de aynı olmalıdır. İki nokta arasında bir fark varsa, bir System.FormatException fırlatılır. CircularString noktaların Z veya M değerine sahip olması gerekmez. Önceki örneğin bitiş noktası için Z veya M değerleri verilmezse, sonraki örneğin başlangıç noktası Z veya M değerlerini içeremez. Önceki sıranın bitiş noktası (4 3) ise, sonraki sıranın başlangıç noktası (4 3) olmalıdır; olamaz (4 3 7 2). CompoundCurve örneğindeki tüm noktaların ya Z değeri olmamalı ya da aynı Z değeri olmalıdır.

CompoundCurve örnekleri

Aşağıdaki çizimde geçerli CompoundCurve türleri gösterilmektedir.

CompoundCurve örnekleri diyagramı.

Kabul edilen örnekler

CompoundCurve örneği boş bir örnekse veya aşağıdaki ölçütleri karşılıyorsa kabul edilir.

  1. CompoundCurve örneğinin içerdiği tüm örnekler döngüsel yay segmenti örnekleri kabul edilir. Kabul edilen dairesel yay segmenti örnekleri hakkında daha fazla bilgi için bkz. LineString ve CircularString.

  2. CompoundCurve örneğindeki tüm dairesel yay kesimleri birbirine bağlıdır. Her bir döngüsel yay kesimi için ilk nokta, önceki dairesel yay segmentindeki son noktayla aynıdır.

    Not

    Buna Z ve M koordinatları dahildir. Bu nedenle, X, Y, Z ve M'nin dört koordinatı da aynı olmalıdır.

  3. Kapsanan örneklerin hiçbiri boş örnek değil.

Aşağıdaki örnekte, kabul edilen CompoundCurve örnekleri gösterilmektedir.

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

Aşağıdaki örnekte, kabul edilmeyen CompoundCurve örnekleri gösterilmektedir. Bu örnekler System.FormatExceptionoluşturur.

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

Geçerli örnekler

CompoundCurve örneği, aşağıdaki ölçütleri karşılıyorsa geçerlidir.

  1. CompoundCurve örneği kabul edilir.

  2. CompoundCurve örneği tarafından kapsanan tüm dairesel yay segmenti örnekleri geçerli örneklerdir.

Aşağıdaki örnekte geçerli CompoundCurve örnekleri gösterilmektedir.

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

@g3 örneği geçerli olduğundan geçerlidir. CircularString örneğinin geçerliliği hakkında daha fazla bilgi için bkz. CircularString.

Aşağıdaki örnekte, geçerli olmayan CompoundCurve örnekleri gösterilmektedir.

DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4, 3 5))';  
DECLARE @g2 geometry = 'COMPOUNDCURVE((1 1, 1 1))';  
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 2 3, 1 1))';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();  

İkinci örnek geçerli bir LineString örneği olmadığından @g1 geçerli değil. @g2 örneği geçerli olmadığından geçerli değil. @g3 örneği geçerli olmadığından geçerli değil. Geçerli CircularString ve LineString örnekleri hakkında daha fazla bilgi için bkz. CircularString ve LineString.

Örnekler

A. Boş bir CompoundCurve ile geometri örneği oluşturma

Aşağıdaki örnekte boş bir CompoundCurve örneğinin nasıl oluşturulacağı gösterilmektedir:

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

B. Aynı ifade içinde CompoundCurve kullanarak bir geometri örneğini bildirme ve oluşturma.

Aşağıdaki örnek, geometry örneğini CompoundCurve ile aynı deyimde nasıl bildireceğinizi ve başlatacağınızı göstermektedir:

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

C. CompoundCurve ile coğrafya örneği örneği oluşturma

Aşağıdaki örnek, ile CompoundCurve örneği bildirme ve başlatma işlemini göstermektedir.

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

D. CompoundCurve örneğinde kare depolama

Aşağıdaki örnek, kare depolamak için CompoundCurve örneği kullanmanın iki farklı yolunu kullanır.

DECLARE @g1 geometry, @g2 geometry;  
SET @g1 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3), (1 3, 3 3),(3 3, 3 1), (3 1, 1 1))');  
SET @g2 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3, 3 3, 3 1, 1 1))');  
SELECT @g1.STLength(), @g2.STLength();  

Hem @g1 hem de @g2 uzunlukları aynıdır. Örnekten bir CompoundCurve örneğinin bir veya daha fazla LineStringörneğini depoabildiğine dikkat edin.

E. Birden çok CircularString içeren bir CompoundCurve kullanarak geometri örneği oluşturma

Aşağıdaki örnekte, bir CircularStringbaşlatmak için iki farklı CompoundCurve örneğinin nasıl kullanılacağı gösterilmektedir.

DECLARE @g geometry;  
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');  
SELECT @g.STLength();  

Bu, 412.5663706143592eşdeğeri olan çıkış üretir. Örnekteki CompoundCurve örneği, yarıçapı 2 olan bir daire depolar. Önceki kod örneklerinin her ikisi de CompoundCurvekullanmak zorunda değildi. İlk örnekte bir LineString örneği daha basit ve ikinci örnek için CircularString bir örnek daha basit olurdu. Ancak sonraki örnek, bir CompoundCurve'ın daha iyi bir alternatif sağladığını gösterir.

F. Yarım daire depolamak için CompoundCurve kullanın

Aşağıdaki örnek, yarım daireyi depolamak için bir CompoundCurve örneği kullanır.

DECLARE @g geometry;  
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 0 2))');  
SELECT @g.STLength();  

G. Birden çok CircularString ve LineString örneğini bir CompoundCurve içinde depolama

Aşağıdaki örnekte, bir CircularStringkullanılarak birden çok LineString ve CompoundCurve örneğinin nasıl depolanabileceği gösterilmektedir.

DECLARE @g geometry  
SET @g = geometry::Parse('COMPOUNDCURVE((3 5, 3 3), CIRCULARSTRING(3 3, 5 1, 7 3), (7 3, 7 5), CIRCULARSTRING(7 5, 5 7, 3 5))');  
SELECT @g.STLength();  

H. Z ve M değerleriyle örnekleri depolama

Aşağıdaki örnekte, hem Z hem de M değerlerine sahip CompoundCurve ve CircularString örneklerini depolamak için bir LineString örneğinin nasıl kullanılacağı gösterilmektedir.

SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(7 5 4 2, 5 7 4 2, 3 5 4 2), (3 5 4 2, 8 7 4 2))');  

Ben. CircularString örneklerinin neden açıkça bildirilmesi gerekir?

Aşağıdaki örnekte, CircularString örneklerin neden açıkça bildirilmesi gerektiği gösterilmektedir. Programcı bir daireyi CompoundCurve bir örnekte depolamaya çalışıyor.

DECLARE @g1 geometry;    
DECLARE @g2 geometry;  
SET @g1 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 2 4, 0 2))');  
SELECT 'Circle One', @g1.STLength() AS Perimeter;  -- gives an inaccurate amount  
SET @g2 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');  
SELECT 'Circle Two', @g2.STLength() AS Perimeter;  -- now we get an accurate amount  

Sonuç kümesi aşağıdadır.

Circle One11.940039...  
Circle Two12.566370...  

Daire İki için çevre yaklaşık 4piolup bu, çevrenin gerçek değeridir. Ancak, Daire Bir'in çevresinin ölçümü önemli ölçüde hatalıdır. Circle One'ın CompoundCurve örneği bir dairesel yay kesimi (ABC) ve iki çizgi kesimi (CD, DA) depolar. CompoundCurve örneğin bir daire tanımlamak için iki dairesel yay kesimi (ABC, CDA) depolaması gerekir. LineString örneği, Daire Bir'in CompoundCurve örneğindeki ikinci nokta kümesini (4 2, 2 4, 0 2) tanımlar. Bir CircularStringiçinde açıkça bir CompoundCurve örneği bildirmeniz gerekir.