几何列上的 SQL Server 平面世界地图

Posted

技术标签:

【中文标题】几何列上的 SQL Server 平面世界地图【英文标题】:SQL Server flat world map on geometry column 【发布时间】:2015-01-07 12:11:14 【问题描述】:

我需要有关几何和地理列的帮助。好吧,关于地理的事情不多,因为它很好用。我试图实现的是在几何列而不是地理上表示世界地图。好吧,并不是真正代表自己,而是能够测量平面地图上两个坐标之间的距离(我知道地理会产生曲线,因为地球本身当然是弯曲的)。有没有办法做到这一点?

我读了一点,但如果我读了,这对它没有任何影响:

DECLARE @g geometry;

SET @g = geometry::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 0);

SELECT @g.STLength();

我的距离为 0.016,而地理距离为 1277……将 srid 更改为 4326 也不会改变它……有什么帮助吗?

【问题讨论】:

【参考方案1】:

几何数据类型用于笛卡尔几何。您定义的线是从点 (x1, y1) = (-122.360, 47.656) 到 (x2, y2) = (-122.343, 47.656)。它们之间的距离是 sqrt( (x2-x1)^2 + (y2-y1)^2 )。

对于地理数据类型,这些点以赤道周围的度数和赤道倾斜度的形式给出。如此定义的两点之间的距离计算由Haversine 公式给出。

如您所见,两者有很大不同。但真正的问题是:你真正想要完成什么?如果你的点代表地球上的点,那你为什么要使用几何数据类型?

【讨论】:

是的,我知道这是不同的,通常我使用的是地理类型。我试图完成它以证明几何数据是平坦的。因此,给定两个彼此距离相同的点,结果将是不同的,因为几何形状不会计算地球的曲线。然后,在这种情况下,我想再次获得与测量相同的值。但我不知道是否有简单的方法将地理映射到几何以使这些点保持相同的距离

以上是关于几何列上的 SQL Server 平面世界地图的主要内容,如果未能解决你的问题,请参考以下文章

DateTime 列上的 Mono InvalidOperationException (SQL Server)

SQL Server - 同一列上的多个 PIVOT

为啥 SQL Server 不使用计算列上的索引?

SQL Server XML 列上的 Where 子句过滤属性 AND 值

Sql Server CE - 临时禁用特定列上的自动增量

SQL Server 2008 在具有空间索引的可空地理列上的性能