【发布时间】:2017-05-18 12:52:13
【问题描述】:
我有两个 GPS 坐标,我想计算它们之间的距离,但 SQL 服务器上的结果与 c# 中的结果完全不同p>
SQL SERVER 查询
select geography::Point(25.3132666, 55.2994054 ,4326)
.STDistance(geography::Point(25.25434, 55.32820,4326)) as Distance;
Web API
String format = "POINT(25.25434 55.32820)";
DbGeography myLocation = DbGeography.PointFromText(format, 4326);
var users = context.Users.Select(u => new
{
fullName = u.name,
lat = u.location.Latitude,
lng = u.location.Longitude,
distance = myLocation.Distance(u.location)
}).ToList();
响应
,{"fullName":"jons smith","lat":25.3132666,"lng":55.2994054,"distance":4133581.8647264037}
提前致谢。
【问题讨论】:
-
如果直接比较您问题中的代码,我们不知道用户的位置。在 SQL 中,您对一些坐标进行硬编码。我假设它们与用户坐标不同。
-
断言两者都使用相同的大地测量系统(很可能是 WGS 84)。尽管如此,我还是可以想象微积分可能会有所不同,例如取决于使用的地球直径(考虑到地球不是一个完美的球体)。只是猜测......
-
@AndriiLitvinov 我只粘贴了响应中的记录作为具有完全相同值的参考,您可以看到记录的纬度长度与 SQL-Query 的完全相同
标签: c# .net sql-server entity-framework geospatial