Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET/SQL中圆上的点(经度/纬度)_.net_Sql Server_Vb.net_Latitude Longitude - Fatal编程技术网

.NET/SQL中圆上的点(经度/纬度)

.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

我有以下问题: 我有一个带有long/lat值的表,还有一个带有项目id和long/lat/radius(圆)的表

现在我需要找出哪个项目与第一个表中的long/lat值相匹配


有没有一种简单的方法可以做到这一点?

有多种算法可以计算球体上的距离,但我们使用以下方法:

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内时的距离。

请添加一些示例数据以帮助我们回答您的问题。非常感谢您的回答:)效果非常好!