代码之家  ›  专栏  ›  技术社区  ›  Chris Brandsma

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

  •  28
  • Chris Brandsma  · 技术社区  · 17 年前

    我正在使用SQLServer2008中的新地理栏和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 回复  |  直到 12 年前
        1
  •  17
  •   Ken Smith    10 年前

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

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

    正如我所说的,表sys.spatial_reference_systems列出了所有代码及其内容。但简而言之,除非你有非常具体的理由使用不同的东西,否则你真的只会使用4326。

        2
  •  17
  •   SvenAelterman Alex Reitbort    8 年前

    SRID = Spatial Reference IDentifier

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

        3
  •  16
  •   Mladen Prajdic    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

    不管怎样,只要你没有从一个系统到另一个系统进行任何空间转换,你就不会真正关心你的数据使用的系统。

        4
  •  2
  •   Greg Stewart    16 年前

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

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

        5
  •  1
  •   Pavlo Neiman    12 年前

    返回的距离取决于 "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,你不必明确指定一个。

    计算两点之间的距离时,必须使用相同的 单向免疫扩散法 对于这两种地理类型,你都会遇到错误。例子:

    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