1

团体,

我有表格列ProductID, latitude,longitude,timestampGMT,并正在寻找一个查询来计算这个边界框或信封中有多少 Id。

任何有用的建议。

4

4 回答 4

3

SQL Server 2008支持GEOGRAPHY数据类型。

您应该存储lat, lon在此数据类型的单个列中,在其上创建SPATIAL索引并在查询中使用它:

SELECT  m.*
FROM    mytable
ON      coords.STDistance(@mypoint) <= @mydistance
于 2010-02-19T18:00:25.423 回答
2

您正在寻找“大圆”距离公式

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=81360

应该指出正确的 SQL 算法

于 2010-02-19T17:49:30.527 回答
1

这个问题不应该是一个社区维基。如果可以,请切换它。不管怎样,这就是你的答案。

@Quassnoi 为 SQL 2008 提供了一个很好的解决方案,但您要的是 2003,对吧?2003 没有与 2008 相同的地理支持。你必须像我一样滚动你自己的。这并不难,具体取决于您需要的准确度。这是我根据用于计算两组坐标之间距离的流行公式提出的标量函数:

-- =====================================================================
-- Author:      Byron Sommardahl
-- Create date: June 15, 2007
-- Description: Calculates the distance between two sets of coordinates.
-- ======================================================================
CREATE FUNCTION [dbo].[Distance]
(
@lat1 float,
@long1 float,
@lat2 float,
@long2 float
)
RETURNS float
AS
BEGIN

RETURN (3958*3.1415926*sqrt((@lat2-@lat1)*(@lat2-@lat1) + cos(@lat2/57.29578)*cos(@lat1/57.29578)*(@long2-@long1)*(@long2-@long1))/180);
END
GO

要使用它,只需使用 SELECT 输入您的坐标:

SELECT dbo.Distance(MyPlace.Lat, MyPlace.Long, TheirPlace.Lat, TheirPlace.Long);

然后,您可以检查产品是否在焦点的某个半径范围内。不完全是边界框,但它可以让你朝着正确的方向前进。

于 2010-02-20T00:00:05.683 回答
0

您可能还想看看这个:

SQL Server ZipCode 纬度经度接近距离搜索

于 2010-02-19T18:16:12.323 回答