EF核心空间数据距离



使用sqlite的EF Core 2.2空间数据。当尝试进行查询,以返回{x}半径中的所有已知位置,输入需要学位而不是米。

var nearByLocations = _context.Locations.Where(x => x.Location.Distance(current.Location) <= 0.1666666).ToList();

我以为查询在服务器端,它将以米为单位回来吗?我猜Sqlite只是不被视为服务器。我可以在使用querite_gui

的查询中确认相同的结果
select Distance(Location, (SELECT Location FROM Facility WHERE 
LocationIdentifier = '123')) as distance
from Facility
where LocationIdentifier = '456' --distance: 0.336804

那么这是一个限制吗?如果是这样,什么是在米中找到位置的最佳方法?

编辑

我能够通过RAW SQL查询完成我想要的工作。首先,我使用函数" ptdistwithin",然后按距离进行订单。使用距离功能,我不得不将其转换为另一个SRID。

希望我能够通过LINQ查询,但这也有效。

var nearBy = _context.Facilities.FromSql(
                    "SELECT * FROM Facility WHERE FacilityType = 'Test' AND " +
                    "PtDistWithin(Location, {0}, CvtFromKmi({1})) " +
                    "ORDER BY Distance(TRANSFORM(Location,2855), TRANSFORM({2},2855));", bus.Location, 20, bus.Location).ToList();

我正在自己学习这些东西,但是我认为EF核心返回的距离nettopologysuite(EF Core的空间提供商)只是笛卡尔距离(即返回相同的单位)作为坐标。这是因为基础类型是几何而不是地理。这似乎与SQL Server中的In hond st_distance函数有所不同。但是,仅当您使用地理数据类型...

相关内容

  • 没有找到相关文章

最新更新