1

如何为最近点计算编写 LINQ 查询?

我在 SQL Server 数据库LatLng保存为字符串的表中。

在stackoverflow上找到了一个解决方案,查询看起来像这样

var coord = DbGeography.FromText(String.Format("POINT({0} {1})", latitude.ToString().Replace(",", "."), longitude.ToString().Replace(",", ".")));
var nearest = (from h in db.hotels
               where h.location != null
               orderby h.location.Distance(coord)
               select h).Take(limit);
return nearest;

试图实现这一点,但这location.distance是无法理解的。有人可以指导我吗?

4

1 回答 1

1

为工作使用正确的工具。纬度和经度不是字符串 - 它们应该是浮点数。SQL Server 2005+ 内置了地理空间功能,如果您使用适当的数据类型,它可以为您执行距离计算。默认情况下,距离将以米为单位计算。

我尝试为此使用 SQLFiddle,但它不喜欢它。

create table #locations  (
        Locationname varchar(20) not null unique,
        LocationGeo geography not null
        );

insert into #locations values (
        'Seattle',
        geography::STGeomFromText('POINT(-122.33365 47.612033)',4326)
);
insert into #locations values (
        'San Francisco',
        geography::STGeomFromText('POINT(-122.41667 37.78333)',4326)
);
insert into #locations values (
        'London',
        geography::STGeomFromText('POINT(0 0)',4326)
);

declare @p1 geography;
SELECT @p1 = Locationgeo from #locations where locationname='London';
SELECT locationname, @p1.STDistance(locationgeo)/1000 as [Distance from London] from #locations order by [Distance from London];
于 2013-09-10T16:49:54.097 回答