Presentation is loading. Please wait.

Presentation is loading. Please wait.

GEOGRAPHY DATATYPES in SQL Server by jared nielsen linkedin.com/nielsendata.

Similar presentations


Presentation on theme: "GEOGRAPHY DATATYPES in SQL Server by jared nielsen linkedin.com/nielsendata."— Presentation transcript:

1 GEOGRAPHY DATATYPES in SQL Server by jared nielsen linkedin.com/nielsendata

2 GEOGRAPHY vs GEOMETRY Geography Plots ellipsoidal “Round Earth” data using latitude, longitude and altitude* coordinates Geometry Plots polygonal, geometric and linear data using X, Y and Z* coordinates * not implemented well

3 Measuring the Earth Coordinates Longitude = X Latitude = Y Altitude = Z

4 Measuring the Earth Ranges Longitude = 0 to 360° Latitude = 90° to -90° Altitude = 0 to ∞ (ft)

5 World Geodetic System Global standards body that defines the coordinate systems for Earth The latest revision is WGS 84 - referred to as EPSG: 4326 www.NGA.mil

6 EPSG: 4326 This geodetic standard is specified in many geography datatype queries: UPDATE SQLDevelopers SET GeoPosition = geography:: Point(29.5786422, -95.2049992, 4326 )

7 BASIC GIS CONCEPTS Well Known Text ESRI Shape and Data Sources

8 Well Known Text - WKT www.NGA.mil TypeExampleConvert to Spatial PointPoint(x,y).STPointFromText() MultiPointMultiPoint( (x,y), (x,y) ).STMPointFromText() LineStringLineString( x y, x y, x y).STLineFromText() MultiLineStringMultiLineString( (x y, x y) (x y, x y) ).STMLineFromText() Polygon Polygon ( ( x1 y1, x2 y2, x3 y3, x1 y1 ) ).STPolyFromText() MultiPolygonYou get the idea… Keep using those parenthesis….STMPolyFromText()

9 How LONG is your LAT? Sometimes you should use LON/LAT (WKT) Other times you need to use LAT/LON (SQL) LAT LON San Jacinto College = 29.578, -95.204 SET GeoPosition = geography:: STGeomFromText('POINT(-95.204 29.578)', 4326) SET GeoPosition = geography:: Point(29.578, -95.204, 4326)

10 Get Some Data Positions for the International Space Station: http://sscweb.gsfc.nasa.gov/cgi-bin/Locator.cgi Global Country Maps: http://www.vdstech.com/world-data.aspx Zip Codes, School Districts, Demographics: http://www.data.gov Railroads, Rivers, Cities, Volcanoes: http://webgis.wr.usgs.gov/globalgis/datasets.htm

11 ESRI Shapefile Converters Convert ESRI Shapefiles to SQL Geography: http://www.sharpgis.net/page/Shape2SQL Queries SQL Geography to a Map: http://www.sharpgis.net/page/SqlSpatial-Query-Tool ESRI Metadata Translation: http://resources.esri.com/help/9.3/ArcGISEngine/java /gp_toolref/conversion_tools/esri_metadata_translator _conversion_.htm

12 SQL SERVER SPATIAL Make a Table Load Data Query Spatial-ly

13 Making a Table CREATE TABLE dbo.ISSPosition( Longitude decimal(18, 15) NULL, Latitude decimal(18, 15) NULL, Sampled datetime NULL, LocalTime nvarchar(50) NULL, GeoPosition geography NULL, GeomShape geometry NULL )

14 Loading Data INSERT INTO ISSPosition (Sampled, Longitude, Latitude, LocalTime) VALUES ('01/01/2015 00:00:00',-125.4,41,'15:38:18’) Naturally I loaded more data … one data point per minute from January 1 to present It turns out that the Space Station falls fast at 17,136 mph

15 Convert to Geography UPDATE ISSPosition SET GeoPosition = geography:: Point([Latitude], [Longitude], 4326) GO (note we are using the native SQL Point method so we keep LAT/LON)

16 Query our Data select top 180 * from dbo.ISSPosition Not the most thrilling outcome… Let’s try the Spatial Results Tab…

17 Spatial Results Tab select top 180 * from dbo.ISSPosition Still not that exciting… a bunch of dots

18 Space Station Orbit select top 180 * from dbo.ISSPosition order by Sampled Now we are getting somewhere!

19 Comma Delimited Points DECLARE @ISSOrbitWKT nvarchar(max) SELECT @ISSOrbitWKT = STUFF((SELECT TOP 180 ',' + Convert(nvarchar(25),Longitude) + ' ' + Convert(nvarchar(25),Latitude) FROM dbo.ISSPosition ORDER BY Sampled FOR XML PATH('')),1,1,'')

20 Convert Points to LineStrings DECLARE @ISSOrbit geography SET @ISSOrbit = geography::STLineFromText('LINESTRING(' +@ISSOrbitWKT+')',4326)

21 Space Station Orbit SELECT @ISSOrbit Now you have connected points in a linestring showing the orbit…

22 Space Station Orbit CREATE TABLE CoolShapes( Name Nvarchar(100) NOT NULL, GeoShape geography NULL) GO INSERT into CoolShapes (Name, GeoShape) values (‘ISS Orbital Path’,@ISSOrbit) I like this shape so much I’m going to keep a copy of it

23 World Geography Global Datasets From ESRI Shapefiles

24 Load Global Maps

25 select @ISSOrbit union all select GeoMap from dbo.world With a UNION, we simply plot the orbit on the Global ESRI Shapefile Map http://www.vdstech.com/world-data.aspx

26 GEOGRAPHY Case Studies INTERSECTION BUFFERS

27 Spatial Methods www.NGA.mil TypeExampleSyntax Buffer@IISOrbit.STBuffer(75000).STBuffer(radius) Intersect@IISOrbit.STIntersection(@China).STIntersection(object) Distance@China.STDistance(@Guatemala).STDistance(object) Crosses@IISOrbit.Crosses(@China).STCrosses(object) Within@SQLDeveloper.STWithin(@SanJac intoCollege.STBuffer(4000)).STWithin(object) Contains@SanJacintoCollege.STContains( @Jared).STContains(object)

28 STIntersection Method SELECT @ISSOrbit UNION ALL SELECT GeoMap FROM World WHERE Name='China' A human knows that the orbit crosses China, but how do we tell the computers? http://www.vdstech.com/world-data.aspx

29 STIntersection Method SELECT @ISSOrbit.STIntersects(@China) We know it intersects… but WHERE? http://www.vdstech.com/world-data.aspx

30 STIntersection Method SELECT @ISSOrbit.STDifference(@China).STIntersection(@China) Can you see them? http://www.vdstech.com/world-data.aspx

31 STIntersection Method SELECT @ISSOrbit.STDifference(@China).STIntersection(@China).STBuffer(75000) UNION ALL SELECT @China Let’s add a few.STBuffer(s) http://www.vdstech.com/world-data.aspx

32 MAKING IT LOCAL San Jacinto College

33 Make Some Developers insert into SQLDevelopers (Name, Latitude, Longitude, Altitude) values ('Jared Nielsen Dark Matter', 29.5786422, - 95.2049992, 15) insert into SQLDevelopers (Name, Latitude, Longitude, Altitude) values ('Jared Nielsen', 29.5786422, -95.2049992, 15) insert into SQLDevelopers (Name, Latitude, Longitude, Altitude) values ('Nancy Hidy Wilson', 29.578, -95.2049, 14) insert into SQLDevelopers (Name, Latitude, Longitude, Altitude) values ('Robert Gremillion', 29.5552929,- 95.1133171,16) UPDATE SQLDevelopers SET GeoPosition = geography::Point([Latitude], [Longitude], 4326) GO http://www.vdstech.com/world-data.aspx

34 San Jacinto College is Cool ALTER TABLE CoolShapes ADD GeoPosition geography NULL GO INSERT INTO CoolShapes (Name, GeoPosition) VALUES ('San Jacinto College', geography::Point(29.5786422, - 95.2049992, 4326)) http://www.vdstech.com/world-data.aspx

35 STIntersection Method One Developer is Not Attending http://www.vdstech.com/world-data.aspx SELECT GeoPosition.STBuffer(100) FROM CoolShapes WHERE Name='San Jacinto College' UNION ALL SELECT GeoPosition.STBuffer(30) FROM SQLDevelopers

36 STIntersection Method Who else is here? http://www.vdstech.com/world-data.aspx SELECT GeoPosition.STBuffer(100) FROM CoolShapes WHERE Name='San Jacinto College' UNION ALL SELECT GeoPosition.STBuffer(30) FROM SQLDevelopers WHERE NAME NOT IN ('Robert Gremillion')

37 More Methods http://www.vdstech.com/world-data.aspx DECLARE @Jared geography DECLARE @Robert geography DECLARE @Nancy geography DECLARE @SanJAC Geography DECLARE @JaredGhost geography SELECT @Jared = GeoPosition.STBuffer(5) FROM SQLDevelopers WHERE Name = 'Jared Nielsen' SELECT @Robert = Geoposition.STBuffer(5) from SQLDevelopers WHERE Name='Robert Gremillion' SELECT @Nancy = Geoposition.STBuffer(5) from SQLDevelopers wHERE Name LIKE 'Nancy%' SELECT @SanJAC = Geoposition.STBuffer(100) from CoolShapes WHERE Name = 'San Jacinto College' SELECT @JaredGhost = Geoposition.STBuffer(2) from SQLDevelopers WHERE Name = 'Jared Nielsen Dark Matter’

38 More Methods Do I stink? http://www.vdstech.com/world-data.aspx SELECT @Jared.STWithin(@SanJAC) = Boolean True SELECT @SanJAC.STContains(@Robert) = Boolean False SELECT @Jared.STDistance(@Nancy) = 61.832 meters Declare @BodyOdorPerimeter geography SELECT @BodyOdorPerimeter = @Jared.STBuffer(10) Declare @OlfactoryPerimeter geography SELECT @OlfactoryPerimeter= @Nancy.STBuffer(60)

39 More Methods Boolean = 1 http://www.vdstech.com/world-data.aspx SELECT @OlfactoryPerimeter.STOverlaps (@BodyOdorPerimeter)

40 JARED NIELSEN Serial Entrepreneur Investor Software Architect Questions?


Download ppt "GEOGRAPHY DATATYPES in SQL Server by jared nielsen linkedin.com/nielsendata."

Similar presentations


Ads by Google