Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
En az bir CircularString veya LineString örneği içermelidir.
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.
Kabul edilen örnekler
CompoundCurve örneği boş bir örnekse veya aşağıdaki ölçütleri karşılıyorsa kabul edilir.
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.
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.
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.FormatException
oluş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.
CompoundCurve örneği kabul edilir.
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 CircularString
baş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.5663706143592
eşdeğeri olan çıkış üretir. Örnekteki CompoundCurve
örneği, yarıçapı 2 olan bir daire depolar. Önceki kod örneklerinin her ikisi de CompoundCurve
kullanmak 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 CircularString
kullanı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 CircularString
içinde açıkça bir CompoundCurve
örneği bildirmeniz gerekir.