必应地图位置对象-相等是如何确定的

本文关键字:何确定 地图 位置 对象 | 更新日期: 2023-09-27 18:02:02

在我运行的一些代码中,我有两个来自Bing Maps api的Location对象的不同实例:

Location l1 = new Location(50, 50);
Location l2 = new Location(50, 50);

然而,当我运行Console.WriteLine(l1.Equals(l2))时,我得到false。为什么呢?我如何重写Equals和GetHashCode方法,使上面的计算结果为true?

我还想指出,由于某种原因,我不可能找到关于Location的文档。(没关系,发现它:在这里,但它仍然没有帮助)我也试着直接查看位置对象的定义,以找到它的Equals和GetHashCode方法,但无济于事。

谢谢!

必应地图位置对象-相等是如何确定的

值得指出的是,文档没有定义Equals方法。这意味着你看到的Equals方法是由。net定义的,并比较由Graffito记录的对象地址。

在比较坐标时,你应该只看小数点后5位或6位。小数点后6位的精度为10厘米,在大多数情况下足够接近。如果你直接比较所有的小数点,你可能会发现,那些应该是相同的坐标,并不是由于浮点误差,这可能会发生在某个地方。下面是检查两个Location对象是否相同的好方法:

public bool AreEqual(Location l1, Location l2){
    return Math.Round(l1.Latitude, 6) == Math.Round(l2.Latitude, 6) &&
        Math.Round(l1.Longitude, 6) == Math.Round(l2.Longitude, 6);
}

结果为false,因为比较的是对象地址,而不是内容。所以运行:

Console.WriteLine(l1.Longitude==l2.Longitude && l1.Latitude==l2.Latitude) ;