几何列:STGeomFromText和SRID(什么是SRID?)

时间:2008-12-17 03:37:53

标签: sql-server sql-server-2008 geometry

我正在使用SQL Server 2008中的新地理列和STGeomFromText函数。这是我的代码(与AdventureWorks2008一起使用)

DECLARE @region geography;
set @region = geography::STGeomFromText('POLYGON((
        -80.0 50.0, -90.0 50.0,
        -90.0 25.0, -80.0 25.0,
        -80.0 50.0))', 4326);

SELECT @region;

我的问题是关于代码中的4326。它应该是一个空间参考ID。当我去MSDN时,它没有太多。如果我将值更改为56,则会出现错误,告诉我该值必须在sys.spatial_reference_systems表中。

您可以通过执行以下内容来查看该表:

select * from sys.spatial_reference_systems 

该表中有一个well_known_text列,但它并没有告诉我多少。 4326的值是:

GEOGCS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84", 6378137, 298.257223563]], PRIMEM["Greenwich", 0], UNIT["Degree", 0.0174532925199433]]

任何人都可以向我解释这个谜吗?什么是SRID?

5 个答案:

答案 0 :(得分:18)

所以我昨天最后和一位前军事人员谈过,他是一名雷达/测绘专家。 基本上,他确切知道这个数字(4326)是什么,它来自哪里,以及它为什么存在。

它是计算地理的行业标准。问题是地球不是一个完美的球体(它在中间凸出),SRID 4326就是这个因素。

正如我所说,表sys.spatial_reference_systems列出了所有代码及其内容。但简短的版本是你真的只会使用4326,除非你有一个非常具体的理由使用不同的东西。

答案 1 :(得分:17)

有很多系统可以映射地球。例如,您想要映射美国的某个州。您可以将最东南点设置为0,0并根据此点映射所有其他空间坐标。另一方面,您可能希望映射遍布地图的一些空间数据。无论如何,你必须选择一些点作为0,0。此外,您必须选择某种测量单位:英里/公里/度/其他一些更适合您的神奇单位。多年来很多这样的系统在哪里发展起来。每个都有自己的零点,它自己的坐标,它自己关于地球是否平坦的规则。 SRID或SRS是此类系统的ID。使用此ID,您可以将在一个系统中表示的点映射到另一个系统,尽管有时它涉及一些非常复杂的数学。

大约4326 SRID。它也被称为“WGS 84” (http://en.wikipedia.org/wiki/World_Geodetic_System)系统。它是表示球形(非平坦)地球上的点的最常见系统。它使用度,分,秒符号,其x和y坐标通常称为纬度和经度。

最常用的非球面地球投影称为UTM。您可以在此处阅读:http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system

无论如何,只要您不进行从一个系统到另一个系统的任何空间转换,您就不会真正关心数据使用的系统。

答案 2 :(得分:16)

SRID = Spatial Reference IDentifier

坐标必须使用相同的SRID才能进行比较。否则你最终会比较千米和里程。或类似的东西。

答案 3 :(得分:2)

我发现这个网站:http://spatialreference.org/ref/epsg/4326/对于理解您打算使用的SRID非常有帮助。它提供了方便的地图,一些边界框信息和其他链接。

对于其他SRID,只需将URL末尾的数字更改为您所追求的数字。

答案 4 :(得分:1)

返回的距离取决于您为地理类型定义的"Spatial Reference Identifier (SRID)"

在下面的示例中,使用了默认的SRID 4336,请参阅STGeomFromText的第二个参数。这意味着返回的距离以米为单位,您可以通过查询目录视图spatial_reference_systems来查找,即select srs.unit_of_measure from sys.spatial_reference_systems as srs where srs.spatial_reference_id = 4326

作为STGeomFromText的替代方案,您可以使用假设parse为4326的SRID,而您无需明确指定。{/ p>

计算两点之间的距离时,必须对两种地理类型使用相同的SRID,否则会出现错误。例如:

DECLARE @address1 GEOGRAPHY
DECLARE @address2 GEOGRAPHY
DECLARE @distance float
SET @address1 = GEOGRAPHY::STGeomFromText ('point(53.046908 -2.991673)',4326)
SET @address2 = GEOGRAPHY::STGeomFromText ('point(51.500152 -0.126236)',4326)
SET @distance = @address1.STDistance(@address2)
SELECT @distance --this is the distance in meters