C# SQL Server地理空间数据和C-其中一个是错误的!

C# SQL Server地理空间数据和C-其中一个是错误的!,c#,sql-server,geolocation,geospatial,C#,Sql Server,Geolocation,Geospatial,所以这个问题只有几个部分,但希望有人有足够的知识来帮助 在我的SQL Server数据库中,我有两个位置记录,它们的属性为:LatitudeLatitude、LongtudeLengtude和GeographyGeoLocation值,顺序如下 记录1:39.283638,-76.568567,0xE6100000010C91F3FE3F4EA443406EA5D766632453C0 记录2:39.285200,-76.554366,0xE6100000010CD68006F81A44340E

所以这个问题只有几个部分,但希望有人有足够的知识来帮助

在我的SQL Server数据库中,我有两个位置记录,它们的属性为:LatitudeLatitude、LongtudeLengtude和GeographyGeoLocation值,顺序如下

记录1:39.283638,-76.568567,0xE6100000010C91F3FE3F4EA443406EA5D766632453C0

记录2:39.285200,-76.554366,0xE6100000010CD68006F81A44340EB0088BB7A2353C0

我使用下面的SQL查询创建了地理位置值:

更新[Location]将gGeoLocation=geography::STPointFromText'POINT'+CASTnlongtitue设置为VARCHAR20+“”+将[nLatitude]设置为VARCHAR20+,4326

现在让我们假设我想搜索我的位置表,以确定这些位置中的哪些位于某个纬度/经度39.290555,-76.609604的某个半径内。我使用了以下查询:

从[位置]中选择* 其中gGeoLocation.STDistancegeography::Point@Latitude,@经度,4326<@英里*1000*0.621371192


然后我用一个C函数检查我的结果,两个结果不一样,所以其中一个肯定是错误的,或者我遗漏了什么。下面是C函数:

//calculate haversine distance for linear distance - Miles
public static double haversine_mi(double lat1, double long1, double lat2, double long2)
{
    double dlong = (long2 - long1) * d2r;
    double dlat = (lat2 - lat1) * d2r;
    double a = Math.Pow(Math.Sin(dlat / 2.0), 2) + Math.Cos(lat1 * d2r) * Math.Cos(lat2 * d2r) * Math.Pow(Math.Sin(dlong / 2.0), 2);
    double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
    double d = 3956 * c;

    return d;
}
最终,如果有人能为我提供一个SQL查询,搜索某个半径范围内的位置表,并返回位置和搜索点之间的距离(以英里和公里为单位),那就太棒了


但我也想理解为什么我会得到不同的结果,结果应该是一样的。我对地理空间数据相当陌生

您使用的是在球体表面进行计算的地理学。您可能希望使用在平面上进行计算的几何体。这很重要。另外,请检查您的SRID。

两个结果不一样-它们是什么?谁在火星上?