【问题标题】:SQL Server 2008 Geography .STBuffer() distance measurement unitsSQL Server 2008 Geography .STBuffer() 距离测量单位
【发布时间】:2011-02-27 14:46:42
【问题描述】:

我正在使用纬度/经度处理一个地理点,需要在我们的数据库中找到该点半径 5 英里内的其他点。但是,我似乎无法找出 STBuffer 的“单位”,它似乎不符合英尺、英里、米、公里等。文档仅将它们称为“单位”,任何建议?谢谢

[...] 来自 geography::STGeomFromText('POINT(xy)', 4326).STBuffer(z).STIntersects(geography::STGeomFromText('POINT(' + CAST(v.Longitude as varchar(max )) + ' ' + CAST(v.Latitude as varchar(max)) + ')', 4326)) = 1

【问题讨论】:

  • 单位是弧度,它们的大小取决于您在地球上的位置。

标签: sql distance geography measurement units-of-measurement


【解决方案1】:

对于访问此页面的任何人,如果他们的缓冲区距离可能没有以米为单位出现而感到困惑,这可能是因为您使用的是几何数据类型而不是地理数据类型。在我的例子中,很明显地理学是用米来操作的,而几何学却不是(它出现的度数?)即使空间参考系统为几何学设置了正确。

将纬度和经度转换为地理点:

geography::Point(latitude, longitude, 4326) -- 4326 is WGS-84 EPSG Projection

【讨论】:

    【解决方案2】:

    测量单位取决于使用的空间参考系统。有关详细信息,请参阅此系统视图:

    SELECT * FROM sys.spatial_reference_systems;

    【讨论】:

    • 尽管最初的问题指定了地理,但我来到这里通常是在寻找 STBuffer 度量单位(几何或地理)。为了节省其他人的视线,对于几何,度量单位是几何的坐标系。因此,如果您使用纬度/经度,geometry.STBuffer(1) 将是 1 度,而不是 1 米。相比之下,1 度是巨大的——大约 69 英里。
    • 这只是向您展示,如果您尝试表示地球上的点,地理是要使用的正确数据类型(不是几何)!
    【解决方案3】:

    STBuffer 以米为单位。 More info here.

    要将英里转换为米,请将英里数除以 0.0006213712

    (即 5 英里 / 0.0006213712 = 8,046.72 米)

    【讨论】:

    • 奇怪的术语“meter”只出现在 example 中,而不出现在 distance 参数的描述中。
    • 世界各地的距离以米/公里/等计算。我认为只有美国仍然使用英制(英寸/英尺/英里)。
    • 这取决于您的空间参考系统以及您使用的是地理还是几何数据类型!
    猜你喜欢
    • 2018-08-03
    • 2011-03-21
    • 2011-09-17
    • 2016-05-12
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多