团体,
我有表格列ProductID, latitude,longitude,timestampGMT
,并正在寻找一个查询来计算这个边界框或信封中有多少 Id。
任何有用的建议。
团体,
我有表格列ProductID, latitude,longitude,timestampGMT
,并正在寻找一个查询来计算这个边界框或信封中有多少 Id。
任何有用的建议。
SQL Server 2008
支持GEOGRAPHY
数据类型。
您应该存储lat, lon
在此数据类型的单个列中,在其上创建SPATIAL
索引并在查询中使用它:
SELECT m.*
FROM mytable
ON coords.STDistance(@mypoint) <= @mydistance
这个问题不应该是一个社区维基。如果可以,请切换它。不管怎样,这就是你的答案。
@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);
然后,您可以检查产品是否在焦点的某个半径范围内。不完全是边界框,但它可以让你朝着正确的方向前进。
您可能还想看看这个: