MSDN documentation只是将返回值定义为:
一个double值,指定两个最接近的距离 指向此几何值和其他值。
退回哪些单位?测试时,这些值与我认识到的任何内容都不匹配,并且在WHERE子句中不起作用。
var results = db.Locations.Where(t => t.ItemPoint.Distance(targetPoint) <= 100); // 100km
注意:我正在使用带有实体框架的MySQL使用.NET Connector,它不支持使用SRID值。
答案 0 :(得分:1)
虽然MSDN文档可以提供更多信息,但它没有指定值的度量,因为它根据SRID(或缺少SRID)而变化。
没有SRID,Geometry只适用于平面网格(或平面)系统(想想旧学校方形纸)。因此,您的距离答案是简单的毕达哥拉斯结果
a2 + b2 = c2 &gt;&gt;&gt;&gt;&gt;&gt; c = SqRt(a2 + b2)。
例如:
using System.Data.Entity.Spatial;
DbGeometry geom1 = DbGeometry.FromText("POINT(0 0)");
DbGeometry geom2 = DbGeometry.FromText("POINT(50 50)");
Console.WriteLine(geom1.Distance(geom2));
//Returns 70.71067811 (the square root of (50 sq'd + 50 sq'd)).
你会发现这个blog是一个有趣的阅读,跳到页面的中间位置,你会发现如何创建一个用户定义的半正式计算方法,它允许你将结果转换为距离。 / p>
请注意,如果你无法在EF for MySQL中映射存储过程,那么你需要求助于老式的ADO来获得结果。确保在 mbr_distance 上使用 st_distance ,因为st_distance是精确的,mbr_distance将包含误报。你需要MySQL 5.6.1 for st_distance。
最后,如果可能的话,考虑另一个数据库,如果空间数据很重要。