DbGeometry.Distance返回什么单位?

时间:2014-03-04 22:36:06

标签: mysql entity-framework geometry geospatial

MSDN documentation只是将返回值定义为:

  

一个double值,指定两个最接近的距离   指向此几何值和其他值。

退回哪些单位?测试时,这些值与我认识到的任何内容都不匹配,并且在WHERE子句中不起作用。

var results = db.Locations.Where(t => t.ItemPoint.Distance(targetPoint) <= 100); // 100km

注意:我正在使用带有实体框架的MySQL使用.NET Connector,它不支持使用SRID值。

1 个答案:

答案 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。

最后,如果可能的话,考虑另一个数据库,如果空间数据很重要。