几何列:STGeomFromText和SRID(什么是SRID?) SRID是空间参考标识符的缩写,它用于标识地理空间数据在地球上的位置。STGeomFromText是一种SQL Server函数,可将文本表示的几何对象转换为几何列。

28

我正在使用 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个回答

26

昨天我跟一个前军人聊天,他是雷达/测绘专家。

他很清楚那个数字(4326)是什么,它从哪里来以及为什么存在。

这是计算地理信息的行业标准。问题在于地球不是完美的球体(中间凸出),而 SRID 4326 考虑了这点。

正如我所说,表 sys.spatial_reference_systems 列出了所有代码及其含义。但简短版就是,除非你有非常特定的原因使用其他代码,否则你只需要使用 4326。


3
我不同意你的说法“除非你有一个非常具体的原因,否则你只会使用4326。”每当你处理一个小范围内的数据(例如一个州或县,而不是全球),你都要使用本地投影坐标系。这些系统旨在更好地表示地球表面在二维平面上的情况,而不是三维球体。往往你会得到一个与WGS84不同的投影数据,然后你需要进行转换。如果你只处理GPS点,那么你正确地认为99%的数据是在4326中的。 - Roy

17

SRID = 空间参考标识符

坐标必须使用相同的 SRID 才能进行比较,否则你会比较公里和英里,或类似的情况。


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

无论如何,只要您不需要将数据从一个系统转换为另一个系统,您就不需要关注您的数据使用的系统。


1
那最后一行真的让我很烦,因为它可能并不重要,就这样鼓吹无知? - user247702

2
我发现这个网站:http://spatialreference.org/ref/epsg/4326/ 对了解你打算使用的SRID很有帮助。它提供了一个方便的地图、一些边界框信息和其他链接。
对于其他SRID,只需更改URL末尾的数字即可。

1

返回的距离取决于您为地理类型定义的"空间参考标识符(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,它假定SRID为4326,您不必显式指定。

计算两点之间距离时,必须对两种地理类型使用相同的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接