gpt4 book ai didi

C#查找一英里以内的所有经纬度

转载 作者:太空狗 更新时间:2023-10-29 23:18:25 25 4
gpt4 key购买 nike

给定经纬度值,是否有任何方法可以找到指定距离内的所有经纬度?我有一个 lat 和 long 值的 db 表,它们是比方说路灯的位置,给定一对 lat long 我怎么能找到特定距离内的所有那些?

我猜想从起点画一个圆并找到包含的所有纬度和经度将是最好的方法,但是我没有这样做的技能。我是一名 C# 开发人员,但需要对整个地理编码领域有所了解。

最佳答案

您可以使用 Haversine 公式(请参阅@tdammers 回答)来计算表格中每个点(纬度、经度)与给定点之间的距离。您必须遍历整个集合才能单独评估每个点。

或者,如果您使用的是 SQL Server 2008,则地理空间支持是内置的。每条记录会将位置存储为地理类型(可能除了两个离散的列来保存纬度和经度,如果更容易分解这些值的话),然后您可以构建一个简单的 SQL 查询:

DECLARE @Point geography = 'POINT(-83.12345 45.12345)' -- Note: Long Lat ordering required when using WKT

SELECT *
FROM tblStreetLamps
WHERE location.STDistance(@point) < 1 * 1609.344 -- Note: 1 mile converted to meters

另一种类似的可能性是将 SQL 空间类型引入您的 .NET 应用程序。可再分发文件位于此处:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=CEB4346F-657F-4D28-83F5-AAE0C5C83D52 (在 SQL Server® 2008 R2 的 Microsoft® System CLR 类型下)。

然后,可以通过 LINQ 完成查询。注意:这样就不用自己实现Haversine了,否则查询的过程都是一样的。

var yourLocation = SqlGeography.Point(Latitude, Longitude, 4326);

var query = from fac in FacilityList
let distance = SqlGeography
.Point(fac.Lat, fac.Lon, 4326)
.STDistance(yourLocation)
.Value
where distance < 1 * 1609.344
orderby distance
select fac;

return query.Distinct().ToList();

关于C#查找一英里以内的所有经纬度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5312987/

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