4
Spatial Data: Cooler Than You’d Think Script USE Breweries SELECT Geolocation as WKB, Geolocation.ToString() AS WKT, Geolocation.AsGml() AS GML from Breweries -- Simple Example DECLARE @g Geometry SET @g = Geometry::STGeomFromText('LINESTRING(0 0,5 5)',0) SELECT @g SET @g = Geometry::Parse('LINESTRING(5 0,10 5)') SELECT @g SET @g = 'LINESTRING(10 0,15 5)' SELECT @g SET @g = 'POINT(2 2 4 45.5)' SELECT @g SELECT @g.STBuffer(.1) SELECT @g.STX,@g.STY,@g.Z,@g.M -- Swiggly line SELECT Geometry::STGeomFromText('LINESTRING (0 0,4 1, 0 2, 4 3, 0 4)',0) -- More example with swiggly DECLARE @g geometry DECLARE @p geometry SET @g = 'LINESTRING(0 0,4 1, 0 2, 4 3, 0 4)' SET @p = 'POINT(4 4)' select @g select @p SELECT @g.STEnvelope() -- .ToString() SELECT @g.STBuffer(1) -- .ToString() SELECT @p.STBuffer(1)

Spatial Data: Cooler Than You’d Think Script Web viewSpatial Data: Cooler Than You’d Think Script. USE Breweries . SELECT Geolocation as WKB, Geolocation.ToString() AS WKT, Geolocation.AsGml()

Embed Size (px)

Citation preview

Page 1: Spatial Data: Cooler Than You’d Think Script Web viewSpatial Data: Cooler Than You’d Think Script. USE Breweries . SELECT Geolocation as WKB, Geolocation.ToString() AS WKT, Geolocation.AsGml()

Spatial Data: Cooler Than You’d Think Script

USE Breweries SELECT Geolocation as WKB, Geolocation.ToString() AS WKT, Geolocation.AsGml() AS GML from Breweries

-- Simple Example DECLARE @g Geometry SET @g = Geometry::STGeomFromText('LINESTRING(0 0,5 5)',0) SELECT @gSET @g = Geometry::Parse('LINESTRING(5 0,10 5)') SELECT @gSET @g = 'LINESTRING(10 0,15 5)'SELECT @gSET @g = 'POINT(2 2 4 45.5)' SELECT @gSELECT @g.STBuffer(.1)SELECT @g.STX,@g.STY,@g.Z,@g.M

-- Swiggly lineSELECT Geometry::STGeomFromText('LINESTRING (0 0,4 1, 0 2, 4 3, 0 4)',0)

-- More example with swiggly

DECLARE @g geometry DECLARE @p geometrySET @g = 'LINESTRING(0 0,4 1, 0 2, 4 3, 0 4)'SET @p = 'POINT(4 4)'select @gselect @pSELECT @g.STEnvelope() -- .ToString() SELECT @g.STBuffer(1) -- .ToString()SELECT @p.STBuffer(1)

-- Working with different types

DECLARE @g Geometry DECLARE @p Geometry

SET @g='POLYGON((2 2,2 6,6 6,6 2,2 2))'

Page 2: Spatial Data: Cooler Than You’d Think Script Web viewSpatial Data: Cooler Than You’d Think Script. USE Breweries . SELECT Geolocation as WKB, Geolocation.ToString() AS WKT, Geolocation.AsGml()

SET @p='LINESTRING(0 0,8 8)'

SELECT @gSELECT @pSELECT @p.STDifference(@g)SELECT @p.STIntersection(@g)SELECT @g.STUnion(@p)

-- One for geography DECLARE @g geography DECLARE @p geography SET @g='POINT(122.3333 47.6167)' SET @p='POINT(13.4167 52.5)' select @g.STDistance(@p)

--New in SQL Server 2012 --Lenni Lobel blog example -- Create a "straight" circular line SELECT geometry::Parse('CIRCULARSTRING(0 8, 4 0, 8 -8)').STBuffer(.1) UNION ALL -- Curve it SELECT geometry::Parse('CIRCULARSTRING(0 8, 4 4, 8 -8)').STBuffer(.1) UNION ALL -- Curve it some more SELECT geometry::Parse('CIRCULARSTRING(0 8, 4 6, 8 -8)').STBuffer(.1) UNION ALL -- Curve it in the other direction SELECT geometry::Parse('CIRCULARSTRING(0 8, 4 -5, 8 -8)').STBuffer(.1)

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.STBuffer(.1)select @g2.STBuffer(.1)select @g3.STBuffer(.1)SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();

--CURVEPOLYGON exterior ringDECLARE @g geometry;SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');select @g

--CURVEPOLYGON inner and exterior ringDECLARE @i geometry;SET @i = 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))');

Page 3: Spatial Data: Cooler Than You’d Think Script Web viewSpatial Data: Cooler Than You’d Think Script. USE Breweries . SELECT Geolocation as WKB, Geolocation.ToString() AS WKT, Geolocation.AsGml()

select @i

--BufferWithCurves--Lenni Lobel blog example DECLARE @squiggle geometry = 'CIRCULARSTRING(0 0,4 1, 0 2, 4 3, 0 4)'SELECT @squiggle.BufferWithCurves(.1)SELECT @squiggle.STBuffer(.1)

SELECT AsWKT = @squiggle.ToString(), Bytes = DATALENGTH(@squiggle), Points = @squiggle.STNumPoints() UNION ALL SELECT @squiggle.STBuffer(10).ToString(), DATALENGTH(@squiggle.STBuffer(10)), @squiggle.STBuffer(10).STNumPoints() UNION ALL SELECT @squiggle.BufferWithCurves(10).ToString(), DATALENGTH(@squiggle.BufferWithCurves(10)), @squiggle.BufferWithCurves(10).STNumPoints()

--ShortestLineTo--Lenni Lobel blog example DECLARE @Shape1 geometry = 'POLYGON ((-20 -30, -3 -26, 14 -28, 20 -40, -20 -30))'DECLARE @Shape2 geometry = 'POLYGON ((-18 -20, 0 -10, 4 -12, 10 -20, 2 -22, -18 -20))' SELECT @Shape1UNION ALLSELECT @Shape2UNION ALLSELECT @Shape1.ShortestLineTo(@Shape2).STBuffer(.25)SELECT @Shape1.ShortestLineTo(@Shape2).ToString();

USE ShapefileExampleselect * from TNShapeFile

--****************************demo queriesUse Breweriesselect * from BreweriesDemo

ALTER TABLE dbo.BreweriesDemo ADD [Geolocation] Geography GO

Page 4: Spatial Data: Cooler Than You’d Think Script Web viewSpatial Data: Cooler Than You’d Think Script. USE Breweries . SELECT Geolocation as WKB, Geolocation.ToString() AS WKT, Geolocation.AsGml()

UPDATE [dbo].[BreweriesDemo]SET [Geolocation] = geography::STGeomFromText ('POINT (' + CAST ([Longitude] AS VARCHAR (20)) + ' ' + CAST ([Latitude] AS VARCHAR (20)) + ')', 4326)

--*****************************SRID reference for STDistance

declare @spatrefid as int = 4326 select unit_of_measure from sys.spatial_reference_systems where spatial_reference_id = @spatrefid

select * from sys.spatial_reference_systems