以英里计算的 SQL Server 几何距离?

标签 sql sql-server-2008-r2 geometry distance spatial

  • 系统:SQL Server 2008 R2
  • 两个几何变量,SRID 4326。

  • 来自 STDistance 的返回值以度为单位,但我需要英里。此外,想象一下不是对 2 个变量进行这种计算,而是对具有 1000 行的表中的几何列进行计算。什么是最快的解决方案? SQL Server 2012、2014、2016 中是否有任何内置内容......?
    --Geometry
    DECLARE @Point2m geometry = geometry::STGeomFromText('POINT(-80.23 26.2)', 4326),
    @Point3m geometry = geometry::STGeomFromText('POINT(-80.229999999515712 26.193699999712408)', 4326)
    
    SELECT @Point2m.STDistance(@Point3m) /* degrees */
    GO
    
    --Geography, for comparison
    DECLARE @Point2g geography = geography::STGeomFromText('POINT(-80.23 26.2)', 4326),
    @Point3g geography = geography::STGeomFromText('POINT(-80.229999999515712 26.193699999712408)', 4326)
    
    SELECT @Point2g.STDistance(@Point3g) / 1609.344 /*meters to miles*/
    GO
    

    最佳答案

    这可以用作 SP 的模板:

    声明@geostart 地理
    声明@geoend 地理

    选择@geostart =
    选择@geoend =

    SELECT CAST(@geostart.STDistance(@geoend)/1609.344 AS DEC (8,1)) AS [以英里为单位的距离]

    如果要计算多行 (table_a) 到另一个表 (table_b) 中特定地理值(键列值 = 100)的距离(以英里为单位),您可以使用以下方法:

    选择
    ,'miles'= CAST(table_a_geo.STDistance(table_b_geo)/1609.344 AS DEC (8,1))
    从表_a
    JOIN table_b ON table_b_id = 100

    关于以英里计算的 SQL Server 几何距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31922039/

    相关文章:

    sql - 为什么 SSDT 架构比较在 DefaultExpressionScript 中显示差异?

    c#-4.0 - 链接服务器 "OLE DB provider ' 的奇怪 '(null)' STREAM' 返回了列 '[!BulkInsert].Value' 错误的无效数据

    math - 在度数上找到一个圆点?

    sql - 提供行计数和表名称的脚本

    sql - 使用 SAS 创建在特定日期拆分记录的表

    sql - 如何从 SQL 中的文本 CLOB 字段中提取值

    php - Mysql查询插入使用等号

    sql - 列出特定应用程序或服务的 SQL Server 数据库、大小和利用率的脚本

    python - 在没有任何外部库的情况下获取图像的一部分,然后是该正方形的中心?

    python - Python 中的 H 几何