带有distance()方法的Spatial Linq查询

本文关键字:Spatial Linq 查询 方法 distance 带有 | 更新日期: 2023-09-27 17:58:05

我正试图从SQL Server数据库中获取特定半径内的位置。当我使用数据库中的空间数据并将其传递给DBGeography.Distance()方法时,它工作得很好。但当我试图将坐标传递给Distance()方法时,比如:

var sourcePoint = string.Format("POINT({0} {1})", location.lat.ToString().Replace(',','.'), location.lon.ToString().Replace(',','.'));
var origin = DbGeography.PointFromText(sourcePoint, 4326);
var result = from r in db.Locations
        where r.Coordinates.Distance(origin) <= distanceMeters
        select r;

它什么也不回。尽管位置在定义的半径内。

这样做效果很好,并且能够获得半径内的位置:

var person = db.People.Single(p => p.PersonID == 2);           
var stores = from s in db.Stores
         where s.Location.Distance(person.Address) * .00062 <= 1
         select new Location
         {
         Name = s.Name,
         Latitude = s.Location.Latitude,
         Longitude = s.Location.Longitude
         };

我无法理解为什么它在第一个例子中不起作用。:)

带有distance()方法的Spatial Linq查询

看起来您的点在WKT中切换了经度和纬度。下面是一个快速演示的示例:

DECLARE @g geography;
SET @g = geography::STPointFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.Long, @g.Lat;