--- title: "Create, Construct, and Query geography Instances | Microsoft Docs" ms.custom: "" ms.date: "06/13/2017" ms.prod: "sql-server-2014" ms.reviewer: "" ms.technology: ms.topic: conceptual helpviewer_keywords: - "geography data type [SQL Server]" - "geodetic data type [SQL Server]" - "geography data type [SQL Server], about geography data type" ms.assetid: b585851e-d15b-411f-adeb-aeabeb777c0b author: MladjoA ms.author: mlandzic manager: craigg --- # Create, Construct, and Query geography Instances The geography spatial data type, `geography`, represents data in a round-earth coordinate system. This type is implemented as a .NET common language runtime (CLR) data type in [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)]. The [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] `geography` data type stores ellipsoidal (round-earth) data, such as GPS latitude and longitude coordinates. The `geography` type is predefined and available in each database. You can create table columns of type `geography` and operate on `geography` data in the same manner as you would use other system-supplied types. ## Creating or constructing a new geography instance ### Creating a New geography Instance from an Existing Instance The `geography` data type provides numerous built-in methods you can use to create new `geography` instances based on existing instances. **To create a buffer around a geography** [STBuffer (geography Data Type)](/sql/t-sql/spatial-geography/stbuffer-geography-data-type) **To create a buffer around a geography, allowing for a tolerance** [BufferWithTolerance (geography Data Type)](/sql/t-sql/spatial-geography/bufferwithtolerance-geography-data-type) **To create a geography from the intersection of two geography instances** [STIntersection (geography Data Type)](/sql/t-sql/spatial-geography/stintersection-geography-data-type) **To create a geography from the union of two geography instances** [STUnion (geography Data Type)](/sql/t-sql/spatial-geography/stunion-geography-data-type) **To create a geography from the points where one geography does not overlap another** [STDifference (geography Data Type)](/sql/t-sql/spatial-geography/stdifference-geography-data-type) ### Constructing a geography Instance from Well-Known Text Input The `geography` data type provides several built-in methods that generate a geography from the Open Geospatial Consortium (OGC) WKT representation. The WKT standard is a text string that allows geography data to be exchanged in textual form. **To construct any type of geography instance from WKT input** [STGeomFromText (geography Data Type)](/sql/t-sql/spatial-geography/stgeomfromtext-geography-data-type) [Parse (geography Data Type)](/sql/t-sql/spatial-geography/parse-geography-data-type) **To construct a geography Point instance from WKT input** [STPointFromText (geography Data Type)](/sql/t-sql/spatial-geography/stpointfromtext-geography-data-type) **To construct a geography MultiPoint instance from WKT input** [STMPointFromText (geography Data Type)](/sql/t-sql/spatial-geography/stmpointfromtext-geography-data-type) **To construct a geography LineString instance from WKT input** STLineFromText (geography Data Type) **To construct a geography MultiLineString instance from WKT input** [STMLineFromText (geography Data Type)](/sql/t-sql/spatial-geography/stmlinefromtext-geography-data-type) **To construct a geography Polygon instance from WKT input** [STPolyFromText (geography Data Type)](/sql/t-sql/spatial-geography/stpolyfromtext-geography-data-type) **To construct a geography MultiPolygon instance from WKT input** [STMPolyFromText (geography Data Type)](/sql/t-sql/spatial-geography/stmpolyfromtext-geography-data-type) **To construct a geography GeometryCollection instance from WKT input** [STGeomCollFromText (geography Data Type)](/sql/t-sql/spatial-geography/stgeomcollfromtext-geography-data-type) ### Constructing a geography Instance from Well-Known Binary Input WKB is a binary format specified by the OGC that permits `Geography` data to be exchanged between a client application and an SQL database. The following functions accept WKB input to construct geography instances: **To construct any type of geography instance from WKB input** [STGeomFromWKB (geography Data Type)](/sql/t-sql/spatial-geography/stgeomfromwkb-geography-data-type) **To construct a geography Point instance from WKB input** [STPointFromWKB (geography Data Type)](/sql/t-sql/spatial-geography/stpointfromwkb-geography-data-type) **To construct a geography MultiPoint instance from WKB input** [STMPointFromWKB (geography Data Type)](/sql/t-sql/spatial-geography/stmpointfromwkb-geography-data-type) **To construct a geography LineString instance from WKB input** [STLineFromWKB (geography Data Type)](/sql/t-sql/spatial-geography/stlinefromwkb-geography-data-type) **To construct a geography MultiLineString instance from WKB input** [STMLineFromWKB (geography Data Type)](/sql/t-sql/spatial-geography/stmlinefromwkb-geography-data-type) **To construct a geography Polygon instance from WKB input** [STPolyFromWKB (geography Data Type)](/sql/t-sql/spatial-geography/stpolyfromwkb-geography-data-type) **To construct a geography MultiPolygon instance from WKB input** [STMPolyFromWKB (geography Data Type)](/sql/t-sql/spatial-geography/stmpolyfromwkb-geography-data-type) **To construct a geography GeometryCollection instance from WKB input** [STGeomCollFromWKB (geography Data Type)](/sql/t-sql/spatial-geography/stgeomcollfromwkb-geography-data-type)STGeomCollFromWKB (geography Data Type) ### Constructing a geography Instance from GML Text Input The `geography` data type provides a method that generates a `geography` instance from GML, an XML representation of a `geography` instance. [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] supports a subset of GML. For more information on Geography Markup Language, see the OGC Specification: [OGC Specifications, Geography Markup Language.](https://go.microsoft.com/fwlink/?LinkId=93629) **To construct any type of geography instance from GML input** [GeomFromGML (geography Data Type)](/sql/t-sql/spatial-geography/geomfromgml-geography-data-type) ## Returning Well-Known Text and Well-Known Binary from a geography Instance You can use the following methods to return either the WKT or WKB format of a `geography` instance: **To return the WKT representation of a geography instance** [STAsText (geography Data Type)](/sql/t-sql/spatial-geography/stastext-geography-data-type) [ToString (geography Data Type)](/sql/t-sql/spatial-geography/tostring-geography-data-type) **To return the WKT representation of a geography instance including any Z and M values** [AsTextZM (geography Data Type)](/sql/t-sql/spatial-geography/astextzm-geography-data-type) **To return the WKB representation of a geography instance** [STAsBinary (geography Data Type)](/sql/t-sql/spatial-geography/stasbinary-geography-data-type) **To return a GML representation of a geography instance** [AsGml (geography Data Type)](/sql/t-sql/spatial-geography/asgml-geography-data-type) ## Querying the Properties and Behaviors of geography Instances All `geography` instances have a number of properties that can be retrieved through methods that [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] provides. The following topics define the properties and behaviors of geography types, and the methods for querying each one. ### Validity, Instance Type, and GeometryCollection Information After a `geography` instance is constructed, you can use the following methods to return the instance type, or if it is a `GeometryCollection` instance, return a specific `geography` instance. **To return the instance type of a geography** [STGeometryType (geography Data Type)](/sql/t-sql/spatial-geography/stgeometrytype-geography-data-type) **To determine if a geography is a given instance type** [InstanceOf (geography Data Type)](/sql/t-sql/spatial-geography/instanceof-geography-data-type) **To determine if a geography instance is well-formed for its instance type** [STNumGeometries (geography Data Type)](/sql/t-sql/spatial-geography/stnumgeometries-geography-data-type) **To return a specific geography in a GeometryCollection instance** [STGeometryN (geography Data Type)](/sql/t-sql/spatial-geography/stgeometryn-geography-data-type)STGeometryN (geography Data Type) ### Number of Points All nonempty `geography` instances are comprised of *points*. These points represent the latitude and longitude coordinates of the earth on which the `geography` instances are drawn. The data type `geography` provides numerous built-in methods for querying the points of an instance. **To return the number of points that comprise an instance** [STNumPoints (geography Data Type)](/sql/t-sql/spatial-geography/stnumpoints-geography-data-type) **To return a specific point in an instance** [STPointN (geometry Data Type)](/sql/t-sql/spatial-geometry/stpointn-geometry-data-type) **To return the start point of an instance** [STStartPoint (geography Data Type)](/sql/t-sql/spatial-geography/ststartpoint-geography-data-type) **To return the end point of an instance** [STEndpoint (geography Data Type)](/sql/t-sql/spatial-geography/stendpoint-geography-data-type) ### Dimension A nonempty `geography` instance can be 0-, 1-, or 2-dimensional. Zero-dimensional `geography` instances, such as `Point` and `MultiPoint`, have no length or area. One-dimensional objects, such as `LineString, CircularString`, `CompoundCurve`, and `MultiLineString`, have length. Two-dimensional instances, such as `Polygon, CurvePolygon`, and `MultiPolygon`, have area and length. Empty instances report a dimension of -1, and a `GeometryCollection` reports the maximum dimension of its contents. **To return the dimension of an instance** [STDimension (geography Data Type)](/sql/t-sql/spatial-geography/stdimension-geography-data-type) **To return the length of an instance** [STLength (geography Data Type)](/sql/t-sql/spatial-geography/stlength-geography-data-type) **To return the area of an instance** [STArea (geography Data Type)](/sql/t-sql/spatial-geography/starea-geography-data-type) ### Empty An *empty*`geography` instance does not have any points. The length of empty `LineString, CircularString`, `CompoundCurve`, and `MultiLineString` instances is 0. The area of empty `Polygon, CurvePolygon` and `MultiPolygon` instances is 0. **To determine if an instance is empty** [STIsEmpty (geography Data Type)](/sql/t-sql/spatial-geography/stisempty-geography-data-type) ### Closure A *closed*`geography` instance is a figure whose start points and end points are the same. `Polygon` instances are considered closed. `Point` instances are not closed. A ring is a simple, closed `LineString` instance. **To determine if an instance is closed** [STIsClosed (geography Data Type)](/sql/t-sql/spatial-geography/stisclosed-geography-data-type) **To return the number of rings in a Polygon instance** [NumRings (geography Data Type)](/sql/t-sql/spatial-geography/numrings-geography-data-type) **To return a specified ring of a geography instance** [RingN (geography Data Type)](/sql/t-sql/spatial-geography/ringn-geography-data-type) ### Spatial Reference ID (SRID) The spatial reference ID (SRID) is an identifier specifying which ellipsoidal coordinate system the `geography` instance is represented in. Two `geography` instances with different SRIDs cannot be compared. **To set or return the SRID of an instance** [STSrid (geography Data Type)](/sql/t-sql/spatial-geography/stsrid-geography-data-type) This property can be modified. ## Determining Relationships between geography Instances The `geography` data type provides many built-in methods you can use to determine relationships between two `geography` instances. **To determine if two instances comprise the same point set** [STEquals (geometry Data Type)](/sql/t-sql/spatial-geometry/stequals-geometry-data-type) **To determine if two instances are disjoint** [STDisjoint (geometry Data Type)](/sql/t-sql/spatial-geometry/stdisjoint-geometry-data-type) **To determine if two instances intersect** [STIntersects (geometry Data Type)](/sql/t-sql/spatial-geometry/stintersects-geometry-data-type) **To determine the point or points where two instances intersect** [STIntersection (geography Data Type)](/sql/t-sql/spatial-geography/stintersection-geography-data-type) **To determine the shortest distance between points in two geography instances** [STDistance (geometry Data Type)](/sql/t-sql/spatial-geometry/stdistance-geometry-data-type) **To determine the difference in points between two geography instances** [STDifference (geography Data Type)](/sql/t-sql/spatial-geography/stdifference-geography-data-type) **To derive the symmetric difference, or unique points, of one geography instance compared with another instance** [STSymDifference (geography Data Type)](/sql/t-sql/spatial-geography/stsymdifference-geography-data-type) ## geography Instances Must Use Supported SRID [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] supports SRIDs based on the EPSG standards. A [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)]-supported SRID for `geography` instances must be used when performing calculations or using methods with geography spatial data. The SRID must match one of the SRIDs displayed in the **sys.spatial_reference_systems** catalog view. As mentioned previously, when you perform calculations on your spatial data using the `geography` data type, your results will depend on which ellipsoid was used in the creation of your data, as each ellipsoid is assigned a specific spatial reference identifier (SRID). [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] uses the default SRID of 4326, which maps to the WGS 84 spatial reference system, when using methods on `geography` instances. If you use data from a spatial reference system other than WGS 84 (or SRID 4326), you will need to determine the specific SRID for your geography spatial data. ## Examples The following examples show how to add and query geography data. - The first example creates a table with an identity column and a `geography` column `GeogCol1`. A third column renders the `geography` column into its Open Geospatial Consortium (OGC) Well-Known Text (WKT) representation, and uses the `STAsText()` method. Two rows are then inserted: one row contains a `LineString` instance of `geography`, and one row contains a `Polygon` instance. ``` IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL DROP TABLE dbo.SpatialTable; GO CREATE TABLE SpatialTable ( id int IDENTITY (1,1), GeogCol1 geography, GeogCol2 AS GeogCol1.STAsText() ); GO INSERT INTO SpatialTable (GeogCol1) VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326)); INSERT INTO SpatialTable (GeogCol1) VALUES (geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326)); GO ``` - The second example uses the `STIntersection()` method to return the points where the two previously inserted `geography` instances intersect. ``` DECLARE @geog1 geography; DECLARE @geog2 geography; DECLARE @result geography; SELECT @geog1 = GeogCol1 FROM SpatialTable WHERE id = 1; SELECT @geog2 = GeogCol1 FROM SpatialTable WHERE id = 2; SELECT @result = @geog1.STIntersection(@geog2); SELECT @result.STAsText(); ``` ## See Also [Spatial Data (SQL Server)](spatial-data-sql-server.md)