Przestrzenne typy danych w SQL Server 2008, cz. 4/4 Udostępnij na: Facebook

Opublikowano: 2010-10-25

 

STInteriorRingN – zwraca wewnętrzny pierścień figury.

Przykład 28. STInteriorRing

DECLARE @c GEOMETRY =' LINESTRING (80 100, 40 100, 40 50, 100 50, 100 80)'

SELECT @c.STBuffer(20).STInteriorRingN(1).ToString() AS STInterioring

STIntersection – zwraca figurę zawierającą punkty współdzielone przez podane figury.

Przykład 29. STIntersection

DECLARE @kwadrat1 geometry='POLYGON((30 30, 60 30, 60 60, 30 60, 30 30))'

DECLARE @kwadrat2 geometry='POLYGON((45 45, 45 75, 75 75, 75 45, 45 45))'

SELECT @kwadrat1.STIntersection(@kwadrat2).ToString() AS STIntersection

STIntersects – zwraca 1, jeśli podana figura przecina się z drugą figurą. W przeciwnym wypadku zwracana jest wartość 0.

Przykład 30. STIntersects

DECLARE @kwadrat1 geometry='POLYGON((30 30, 60 30, 60 60, 30 60, 30 30))'

DECLARE @kwadrat2 geometry='POLYGON((45 45, 45 75, 75 75, 75 45, 45 45))'

SELECT @kwadrat1.STIntersects(@kwadrat2) AS STIntersects

STIsClosed – zwraca 1, jeśli w figurze punkt początkowy jest jednocześnie punktem końcowym. W przeciwnym wypadku zwraca 0.

Przykład 31. STIsClosed

DECLARE @czworokat GEOMETRY ='POLYGON ((40 80, 40 40, 90 40,90 80, 40 80))'

SELECT @czworokat.STIsClosed() AS STIsClosed

STIsEmpty – zwraca 1, jeśli figura jest pusta (nie zawiera żadnego punktu). W przeciwnym wypadku zwraca 0.

Przykład 32. STIsEmpty

DECLARE @czworokat GEOMETRY ='POLYGON ((40 80, 40 40, 90 40,90 80, 40 80))'

SELECT @czworokat.STIsEmpty() AS STIsEmpty

IsNull – zwraca 'NULL', jeśli obiekt jest NULL . W przeciwnym przypadku zwraca 0.

Przykład 33. IsNull

DECLARE @c GEOMETRY =' LINESTRING (80 100, 40 100, 40 50, 100 50, 100 80)'

SELECT @c.IsNull AS 'IsNull'

STIsRing – zwraca 1, jeśli figura spełnia założenia STIsClosed i STIsSimple.

Przykład 34.STIsRing

DECLARE @c GEOMETRY =' LINESTRING (80 100, 40 100, 40 50, 100 50, 100 80)'

SELECT @c.STIsRing() AS STIsRing

STIsSimple – funkcja zwraca 1, gdy figura spełnia warunek, że idąc od punktu początkowego do punktu końcowego przechodzimy przez każdy punkt tylko jeden raz (wyjątkiem są figury, gdzie punkt końcowy jest jednocześnie punktem startowym). W przeciwnym wypadku zwracana jest wartość 0.

Przykład 35. STIsSimple

DECLARE @czworokat GEOMETRY ='POLYGON ((40 80, 40 40, 90 40,90 80, 40 80))'

SELECT @czworokat.STIsSimple() AS STIsSimple

STIsValid – zwraca 1, gdy w figurze linie nie nakładają się na siebie. Dopuszczalne są tylko przecięcia linii. W przeciwnym wypadku zwracana jest wartość 0.

Przykład 36. STIsValid

DECLARE @czworokat GEOMETRY ='POLYGON ((40 80, 40 40, 90 40,90 80, 40 80))'

SELECT @czworokat.STIsValid() AS STIsValid

 STLength – zwraca długość linii bądź obwód figury.

Przykład 37. STLength

DECLARE @czworokat GEOMETRY ='POLYGON ((40 80, 40 40, 90 40,90 80, 40 80))'

SELECT @czworokat.STLength() AS STLength

M – zwraca wartość M danego punktu.

Przykład 38. M

DECLARE @g geometry='POINT(1 2 3 4)'

SELECT @g.M AS M

 Make Valid – zwraca poprawnie skonstruowaną figurę na podstawie figury podanej przez użytkownika.

Przykład 39. Make Valid

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

SELECT @g.STIsValid()AS STIsValid

SET @g=@g.MakeValid()

SELECT @g.STIsValid()AS STIsValid, @g.ToString() AS g

STNumGeometries – zwraca liczbę figur znajdujących się w zbiorze figur.

Przykład 40. STNumGeometries

DECLARE @multi GEOMETRY

SET @multi ='MULTIPOLYGON (((40 80, 40 40, 90 40,90 80, 40 80)),((10 10, 20 10, 20 50, 10 10)))'

SELECT @multi.STNumGeometries() AS STNumGeometries

STNumInteriorRing– zwraca liczbę wewnętrznych pierścieni w obiektach typu Polygon.

Przykład 41. STNumInteriorRing

DECLARE @multi GEOMETRY

SET @multi ='POLYGON ((20 20, 50 20, 50 50, 20 50, 20 20), (40 40, 40 30, 30 30, 30 40, 40 40))'

SELECT @multi.STNumInteriorRing() AS STNumInteriorRing


STNumPoints – zwraca liczbę punktów charakterystycznych z danej figury.

Przykład 42. STNumPoints

DECLARE @c GEOMETRY =' LINESTRING (80 100, 40 100, 40 50, 100 50, 100 80)'

SELECT @c.STNumPoints() AS STNumPoints

STOverlaps – zwraca 1, jeśli dana figura nakłada się na inną figurę.

Przykład 43. STOverlaps

DECLARE @kwadrat1 geometry='POLYGON((30 30, 60 30, 60 60, 30 60, 30 30))'

DECLARE @kwadrat2 geometry='POLYGON((45 45, 45 75, 75 75, 75 45, 45 45))'

SELECT @kwadrat1.STOverlaps(@kwadrat2) AS STOverlaps

STPointN – zwraca konkretny punkt z danej figury.

Przykład 44. STPointN

DECLARE @c GEOMETRY =' LINESTRING (80 100, 40 100, 40 50, 100 50, 100 80)'

SELECT @c.STPointN(2).ToString() AS STPointN

STPointOnSurface – zwraca dowolny punkt znajdujący się wewnątrz podanej figury.

Przykład 45. STPointOnSurface

DECLARE @czworokat GEOMETRY ='POLYGON ((40 80, 40 40, 90 40,90 80, 40 80))'

SELECT @czworokat.STPointOnSurface().ToString() AS PointOnSurface


 

Reduce – zwraca figurę zbliżoną do tej podanej przez użytkownika, z tym że prostszą, składającą się z mniejszej liczby punktów. Wykorzystywany jest przy tym algorytm Douglas-Peucker'a.

Przykład 46. Reduce

Tworzymy niebanalną figurę:

DECLARE @r GEOMETRY

SET @r ='LINESTRING (150 310, 140 310, 130 310, 120 310, 110 300, 100 300, 90 290, 80 280, 80 270, 80 260, 80 250, 80 240, 80 230, 90 230, 90 220, 100 220, 110 220, 120 220, 130 220, 160 220, 170 230, 180 230, 180 240, 190 250, 190 260, 190 270, 200 280, 200 290, 190 300, 180 300, 180 310, 170 310, 170 320, 160 320, 150 320, 150 310)'

a następnie za pomocą metody Reduce otrzymujemy figurę podobną do naszej, ale znacznie uproszczoną.

SELECT @r.Reduce(10).ToString() AS Reduce


STSrid – ustawia wartość Spatial Reference ID. Domyślnie wartość ta wynosi 0.

Przykład 47.STSrid

DECLARE @czworokat GEOMETRY ='POLYGON ((40 80, 40 40, 90 40,90 80, 40 80))'

SET @czworokat.STSrid = 43

STStartPoint – zwraca punkt początkowy z danej figury.

Przykład 48. STStartPoint

DECLARE @c GEOMETRY =' LINESTRING (80 100, 40 100, 40 50, 100 50, 100 80)'

SELECT @c.STStartPoint().ToString() AS STStartPoint

STSymDifference – zwraca figurę zawierającą punkty znajdujące się jednocześnie w jednej i w drugiej figurze, ale nie zawiera ich współdzielonych punktów.

Przykład 49. STSymDifference

DECLARE @kwadrat1 geometry='POLYGON((30 30, 60 30, 60 60, 30 60, 30 30))'

DECLARE @kwadrat2 geometry='POLYGON((45 45, 45 75, 75 75, 75 45, 45 45))'

SELECT @kwadrat1.STSymDifference(@kwadrat2).ToString() AS STSymDifference


ToString – zwraca ciąg znaków reprezentujący daną figurę w postaci OGC WKT.

Przykład 50. ToString

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

SELECT @g.ToString() AS g

STTouches – zwraca 1, jeśli podana figura styka się z inną figurą.

Przykład 51. STTouches

DECLARE @l geometry;

DECLARE @p geometry;

SET @l = 'LINESTRING(0 0,0 2)';

SET @p = 'LINESTRING(0 2,0 4)';

SELECT @l.STTouches(@p) AS STTouches

STUnion – zwraca figurę zawierającą punkty należące do jednej i do drugiej figury.

Przykład 52. STUnion

DECLARE @kwadrat1 geometry='POLYGON((30 30, 60 30, 60 60, 30 60, 30 30))'

DECLARE @kwadrat2 geometry='POLYGON((45 45, 45 75, 75 75, 75 45, 45 45))'

SELECT @kwadrat1.STUnion(@kwadrat2).ToString() AS STUnion


STWithin – zwraca 1, jeśli figura, na której wykonywana jest funkcja, znajduje się wewnątrz figury podanej jako argument funkcji. W przeciwnym wypadku zwracane jest 0.

Przykład 53. STWithin

DECLARE @czworokat GEOMETRY

DECLARE @punkt GEOMETRY

SET @czworokat ='POLYGON ((40 80, 40 40, 90 40,90 80, 40 80))'

SET @punkt='POINT(50 50)'

SELECT @czworokat.STWithin(@punkt) AS STWithin1 , @punkt.STWithin(@czworokat) AS STWithin2


STX – zwraca położenie punktu na osi X.

Przykład 54. STX

DECLARE @point geometry = 'POINT(3 2)'

SELECT @point.STX AS X, @point.STY AS Y

STY – zwraca położenie punktu na osi Y.

Przykład 55. STY

DECLARE @point geometry = 'POINT(3 2)'

SELECT @point.STX AS X, @point.STY AS Y

Z – zwraca wartość Z danego punktu.

Przykład 56. Z

DECLARE @g geometry='POINT(1 2 3 4)'

SELECT @g.Z AS Z

            Dla danych typu geography dostępnych jest wiele tych samych funkcji, co dla danych typu geometry. Należy jednak pamiętać, że mimo iż funkcje te pełnią dla obu typów podobną rolę, to jednak ich działanie odbywa się w zupełnie inny sposób. Jako przykład weźmy funkcję STDistance, liczącą odległość między dwiema figurami. Odległość ta jest liczona zupełnie inaczej dla danych typu geometry (gdzie jest długością linii prostej łączącej obie figury), a inaczej dla geography (gdzie jest długością łuku ze względu na krzywiznę powierzchni).

Funkcje dla typu geography znane nam już z funkcji geometry to:

-STArea

-STAsBinary

-STAsText

-STBuffer

-STDimension

-STDisjoint

-STDistance

-STEndpoint

-STGeometryN

-STGeometryType

-STIntersection

-STIntersects

-STIsClosed

-STIsEmpty

-STLength

-STNumGeometries

-STNumPoints

-STPointN

-STSrid

-STStartPoint

-STUnion

-AsGml

-AsTextZM

-BufferWithTolerance

-InstanceOf

-IsNull

-M

-ToString

-Z

Dochodzą również cztery nowe funkcje niedostępne dla typu geometry:

Lat – zwraca szerokość geograficzną podanego punktu.

Przykład 57.  Lat

DECLARE @point GEOGRAPHY = 'POINT(-5.67890 10.12345)'

SELECT @point.Lat AS Lat

Long – zwraca długość geograficzną podanego punktu.

Przykład 58. Long

DECLARE @point GEOGRAPHY = 'POINT(-5.67890 10.12345)'

SELECT @point.Long AS Long

NumRing – zwraca liczbę pierścieni w obiekcie typu Polygon.

Przykład 59. NumRing

DECLARE @polygon geography;

SET @polygon = geography::STGeomFromText('POLYGON((52.150 21.000, 48.080 11.340, 50.060 08.410, 52.150 21.000))',4326)

SELECT @polygon.NumRings() AS NumRings

RingN – zwraca wybrany pierścień z podanej figury.

Przykład 60. RingN

DECLARE @polygon geography;

SET @polygon = geography::STGeomFromText('POLYGON((52.150 21.000, 48.080 11.340, 50.060 08.410, 52.150 21.000))',4326)

SELECT @polygon.RingN(1).ToString() AS RingN

            Wprowadzenie typów przestrzennych w SQL Server 2008 było z pewnością dobrym pomysłem. Otrzymaliśmy dzięki temu dwa nowe typy danych do przechowywania informacji o obiektach w dowolnym, dwuwymiarowym układzie współrzędnych. Szeroka gama dostarczonych funkcji pozwala nam na wykonanie wszelkich potrzebnych operacji podczas pracy z tego typu danymi.