数据库存储 4 个点,坐标如下:
名称 |纬度 |长
第 1 点 | 11.111 | 11.111 22.222
第 2 点 | 22.222 | 22.222 33.333
第 3 点 | 44.444 | 44.444 55.555
第 4 点 | 66.666 | 77.777
技术:
MS SQL Server
Web 应用程序通过 HTML5 获取当前用户的纬度和经度,然后它应该计算这 4 个点中哪些点距离小于 0.5 公里。 如何?
它应该根据下图显示点 1 和点 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)
使用 Entity Framework (dot net):
Entity Framework 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();
}
我希望这足以让您开始。
关于sql-server-2008 - 根据计算的坐标之间的距离选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22076164/