gpt4 book ai didi

c# - 使用三角函数 SQL Server

转载 作者:行者123 更新时间:2023-11-30 20:17:16 25 4
gpt4 key购买 nike

我有一个带有 Dapper 的 WebApi 项目,我有表 Products :

[Key]
public int idProducts { get; set; }
public string Name { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }
public int ProductsItems { get; set; }
public decimal Price { get; set; }

我需要计算从 A 点到 B 点的距离并检查是否小于 1 公里,我已经这样做了,但是在 C# 中

private static double distance(double lat1, double lon1, double lat2, double lon2, char unit)
{
double theta = lon1 - lon2;
double dist = Math.Sin(deg2rad(lat1)) *
Math.Sin(deg2rad(lat2)) +
Math.Cos(deg2rad(lat1)) *
Math.Cos(deg2rad(lat2)) *
Math.Cos(deg2rad(theta));
dist = Math.Acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
dist = dist * 1.609344;
return (dist);
}
private static double deg2rad(double deg)
{
return (deg * Math.PI / 180.0);
}
private static double rad2deg(double rad)
{
return (rad / Math.PI * 180.0);
}

bool isLess = distance(-8.157908, -34.931675, -8.164891, -34.919033, 'K') < 1

但那样我就必须做 select * from Products , 得到所有结果 AsList()并循环获取每个项目并检查从 A 到 B 的距离是否有效且不实用!我不习惯使用 Math Involved 进行此类查询。

如何创建一个查询,我可以在其中传递 A 点的纬度和经度并进行数学计算并仅返回有效项目的列表?

最佳答案

要稍微改进 John 的回答,您可以这样做:

CREATE TABLE YourTable (
ID INT PRIMARY KEY
, Lat FLOAT
, Lon FLOAT
, Location AS GEOGRAPHY::Point(Lat, Lon, 4326));

INSERT INTO YourTable (ID, Lat, Lon)
VALUES
(1,-8.157908, -34.931675)
, (2,-8.164891, -34.919033)
, (3,-8.159999, -34.939999);
GO

CREATE FUNCTION GetCloserThanOneKilometer (
@Lat FLOAT
, @Lon FLOAT
, @Distance FLOAT)
RETURNS TABLE
AS
RETURN
SELECT *
FROM YourTable
WHERE GEOGRAPHY::Point(@Lat, @Lon, 4326).STDistance(Location) <= @Distance;

您将拥有一个用于存储坐标的计算列。因此,为了抽象和简化查询,您可以创建一个内联函数,我巧妙地将其命名为 GetCloserThanOneKilometer,然后按如下方式运行查询以根据给定的纬度和经度以及必须低于的距离获取数据你的输入(@Distance 参数):

SELECT *
FROM GetCloserThanOneKilometer(-8.157908, -34.931675, 1000);
GO

关于c# - 使用三角函数 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45392675/

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