【问题标题】:Geometry column: STGeomFromText and SRID (what is an SRID?)几何列:STGeomFromText 和 SRID(什么是 SRID?)
【发布时间】:2008-12-17 03:37:52
【问题描述】:

我正在使用 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?

【问题讨论】:

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


    【解决方案1】:

    所以我昨天最终与一位前军人交谈,他是一名雷达/测绘专家。 基本上,他确切地知道那个数字(4326)是什么,它来自哪里,以及它为什么在那里。

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

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

    【讨论】:

    • 我不同意您的说法“除非您有非常具体的原因,否则您实际上只会使用 4326。”任何时候您处理小区域中的数据(想想州或县而不是世界),您都将使用本地投影坐标系。这些系统旨在更好地代表 2D 平面上的地球表面,而不是 3D 地球。通常情况下,您最终会在 WGS84 以外的投影中获取数据,并且您需要进行转换。如果您只处理 GPS 点,那么您假设数据在 99% 的时间是在 4326 中是正确的。
    【解决方案2】:

    SRID = Spatial Reference IDentifier

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

    【讨论】:

      【解决方案3】:

      有很多系统可以绘制地球地图。例如,您想映射美国的某个州。您可以将最东南点设置为 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

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

      【讨论】:

      • 最后一行真的让我很烦,宣扬无知,因为这可能无关紧要
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        在下面的例子中,使用默认的SRID 4336,见STGeomFromText 的第二个参数。这意味着返回的距离以米为单位,您可以通过查询目录视图spatial_reference_systemsselect 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-02
          • 2012-04-17
          • 2015-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多