使用distance()方法的空间Linq查询

时间:2014-04-12 15:59:44

标签: c# sql-server entity-framework asp.net-web-api2 spatial-query

我正在尝试从特定半径内的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
         };

我无法解决为什么它不能以第一个示例方式工作。 :)

1 个答案:

答案 0 :(得分:2)

看起来你已经在WKT中为你的观点切换了经度和纬度。这是一个简单的示例:

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