根据计算的坐标之间的距离选择数据

时间:2014-02-27 17:40:15

标签: sql-server-2008 coordinates

数据库存储4个点,坐标如下:

姓名| Lat |长

第1点| 11.111 | 22.222

第2点| 22.222 | 33.333

第3点| 44.444 | 55.555

第4点| 66.666 | 77.777


技术:

MS SQL Server


Web应用程序通过HTML5获取当前用户lat和long,然后它应该计算那些4中的哪些点接近0.5 km。 如何吗

它应该根据此图显示第1点和第2点:

enter image description here

2 个答案:

答案 0 :(得分:2)

使用Sql Server:

您可以使用以下功能找到 两个坐标之间的距离

CREATE FUNCTION dbo.fnCalcDistanceKM(@lat1 FLOAT, @lat2 FLOAT, @lon1 FLOAT, @lon2 FLOAT)
    RETURNS FLOAT 
    AS
    BEGIN

        RETURN ACOS(SIN(PI()*@lat1/180.0)*SIN(PI()*@lat2/180.0)+COS(PI()*@lat1/180.0)*COS(PI()*@lat2/180.0)*COS(PI()*@lon2/180.0-PI()*@lon1/180.0))*6371
    END

样本使用:

select [dbo].[fnCalcDistanceKM](13.077085,80.262675,13.065701,80.258916)

Reference

使用实体框架(点网):

实体框架5.0允许您像这样编写LINQ表达式

private Facility GetNearestFacilityToJobsite(DbGeography jobsite)
{   
    var q1 = from f in context.Facilities            
             let distance = f.Geocode.Distance(jobsite)
             where distance < 500 * 1609.344     
             orderby distance 
             select f;   
    return q1.FirstOrDefault();
}

Reference

我希望这足以让你开始。

答案 1 :(得分:0)

您需要将您的观点转换为地理数据类型。然后你可以做一个WHERE @ here.STDistance(testPoint)&lt; 500。

使用geogrpahy点计算距离的基础知识可以在this question中找到。