作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想根据指定半径显示经纬度数据。
例子:
我有一条纬度为 55.0628 经度为 -162.3056 的记录,但没有指定状态。
如何使用实体到 linq 只显示一个州内的记录?
如果我要显示佛罗里达州,则只显示佛罗里达州内的记录。
Table Data
id item latitude longitude
1 townhome 55.0628 -162.3056
Table postal codes
id state city latitude longitude
1 alaska Akutan 54.143 -165.7854
2 Alabama Huntsville 34.7448 -86.6704
最佳答案
我会尽可能接近实际数据执行查询(这可能意味着绕过 LINQ 并调用存储过程)。
这是一个 SQL 用户定义函数,我用它来计算两个位置之间的距离。它利用 SQL Server 2008 中引入的新地理功能。
CREATE FUNCTION [dbo].[GetDistanceBetween]
(
@Lat1 float,
@Long1 float,
@Lat2 float,
@Long2 float
)
RETURNS float
AS
BEGIN
DECLARE @RetVal float;
SET @RetVal = ( SELECT geography::Point(@Lat1, @Long1, 4326).STDistance(geography::Point(@Lat2, @Long2, 4326)) / 1609.344 );
RETURN @RetVal;
END
该函数以英里为单位返回距离,根据我的经验,速度非常快(这显然取决于您需要进行多少次比较)。
你可以这样调用它:
DECLARE @StartingLatitude FLOAT, @StartingLongitude FLOAT;
DECLARE @MaxDistance FLOAT = 50;
SELECT * FROM PostalCodes
WHERE dbo.GetDistanceBetween(@StartingLatitude, @StartingLongitude, latitude, longitude) <= @MaxDistance;
关于c# - 如何根据经纬度按半径搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467891/
我是一名优秀的程序员,十分优秀!