.NET/SQL中圆上的点(经度/纬度)
我有以下问题: 我有一个带有long/lat值的表,还有一个带有项目id和long/lat/radius(圆)的表 现在我需要找出哪个项目与第一个表中的long/lat值相匹配.NET/SQL中圆上的点(经度/纬度),.net,sql-server,vb.net,latitude-longitude,.net,Sql Server,Vb.net,Latitude Longitude,我有以下问题: 我有一个带有long/lat值的表,还有一个带有项目id和long/lat/radius(圆)的表 现在我需要找出哪个项目与第一个表中的long/lat值相匹配 有没有一种简单的方法可以做到这一点?有多种算法可以计算球体上的距离,但我们使用以下方法: create function GetDistance( @latitudeFrom decimal(30,10), @longitudeFrom decimal(30,10), @latitudeTo d
有没有一种简单的方法可以做到这一点?有多种算法可以计算球体上的距离,但我们使用以下方法:
create function GetDistance(
@latitudeFrom decimal(30,10),
@longitudeFrom decimal(30,10),
@latitudeTo decimal(30,10),
@longitudeTo decimal(30,10)
)
RETURNS float
AS
BEGIN
DECLARE @distance float
SET @distance = ROUND(6378.137 * ACOS(
convert(decimal(30,10),
(SIN(RADIANS(@latitudeFrom)) * SIN(RADIANS(@latitudeTo))) +
(COS(RADIANS(@latitudeFrom)) * COS(RADIANS(@latitudeTo)) *
COS(RADIANS(@longitudeTo) - RADIANS(@longitudeFrom))))), 15)
RETURN @distance
END
go
(其中6378.137-为地球半径)
所以现在,当你们可以计算地球上两点之间的距离时,你们就可以建立查询了
select *
from Table1, Project
where dbo.GetDistance(
Table1.lat, Table1.lon,
Project.lat, Project.lon) < @YouRadius
选择*
来自表1,项目
其中dbo.GetDistance(
表1.lat,表1.lon,
Project.lat,Project.lon)<@YouRadius
其中@YouRadius-圆的参数化半径相对容易:计算点与圆心之间的大圆距离。如果距离小于半径,则点位于圆中,如果不是。如果它在圆的圆周上,你来决定。关于大圆距离的计算,已经有过几次这样的讨论,看看吧
<> P>为了加快速度,你可以考虑用每个圆的定义,在LAT/Lang'方块中存储它的最小边界框。这将为您提供快速检查点是否可能位于圆内所需的信息,仅计算点位于mbb内时的距离。请添加一些示例数据以帮助我们回答您的问题。非常感谢您的回答:)效果非常好!