【问题标题】:What units does DbGeometry.Distance return?DbGeometry.Distance 返回什么单位?
【发布时间】:2014-03-04 22:36:06
【问题描述】:

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

一个双精度值,指定两个最近的距离 此几何值和其他点中的点。

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

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

注意:我正在使用 .NET 连接器和实体框架一起使用 MySQL,它不支持使用 SRID 值。

【问题讨论】:

    标签: mysql entity-framework geometry geospatial


    【解决方案1】:

    虽然 MSDN 文档可以提供更多信息,但它没有指定值的度量,因为它会根据 SRID(或缺少)而变化。

    没有 SRID,Geometry 只能在平面网格(或平面)系统上运行(想想老式方形纸)。因此,您的距离答案是简单的毕达哥拉斯结果

    a2 + b2 = c2 >>>>>> 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 很有趣,跳到页面的一半,您会发现如何创建用户定义的半正弦计算方法,该方法允许您将结果转换为距离。

    但请注意,如果您无法在 EF for MySQL 中映射存储过程,那么您将需要求助于老式的 ADO 来获得结果。确保您使用 st_distance 而不是 mbr_distance,因为 st_distance 将是准确的,而 mbr_distance 将包含误报。 st_distance 需要 MySQL 5.6.1。

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

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 2021-03-21
      • 2011-10-11
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      相关资源
      最近更新 更多