gpt4 book ai didi

c# - 如何根据经纬度按半径搜索?

转载 作者:太空狗 更新时间:2023-10-30 00:56:08 25 4
gpt4 key购买 nike

我想根据指定半径显示经纬度数据。

例子:

我有一条纬度为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com