gpt4 book ai didi

c# - 如何使用 System.Spatial.GeographyPoint

转载 作者:太空狗 更新时间:2023-10-29 20:13:41 29 4
gpt4 key购买 nike

我需要一个函数来计算 A 点和 B 点之间的距离。

Namespace System.Spatial 似乎正是我所需要的,但我不知道如何使用它。

IPoint 是一个提供 LatitudeLongitude 的接口(interface),两者都是 double 类型。

第一次尝试:

  public static double CalculateDistance(IPoint pointA, IPoint pointB)
{
var gp1 = GeographyPoint.Create(pointA.Latitude, pointA.Longitude);
var gp2 = GeographyPoint.Create(pointB.Latitude, pointB.Longitude);

return gp1.Distance(gp2) ?? 0;
}

point1.Distance(point2) 上以 NotImplementedException 结束。该消息是法语的,但基本上是说“未注册任何操作。请使用属性 SpatialImplementation.CurrentImplementation.Operations 提供操作”。

好的,那我试试这个:

public static double CalculateDistance(IPoint pointA, IPoint pointB)
{
var gp1 = GeographyPoint.Create(pointA.Latitude, pointA.Longitude);
var gp2 = GeographyPoint.Create(pointB.Latitude, pointB.Longitude);

return SpatialImplementation.CurrentImplementation.Operations.Distance(gp1, gp2);
}

现在我在 SpatialImplementation.CurrentImplementation.Operations 上得到了一个 NullReferenceException

Msdn 对此并没有详细说明。

任何人都可以解释如何获得这些实现?

最佳答案

恕我直言,您不应该使用 System.Spatial。它是为 OData 与 Spatial 的互操作性而创建的半生不熟的库,即用于 WCF 数据服务。

可以查看here想要查询更多的信息。此外,该库中的大多数类都是抽象的,因此您可以自行实现其中的大部分。

此外,更糟糕的是,它们与 Entity Framework 空间支持不兼容。

我不确定您正在进行的是哪种项目,但我建议您遵循以下准则:

  • 如果您只需要计算点之间的距离,只需复制 Haversine Formula 的实现即可或 Vincenty's Formula在 C# 中。

  • 如果您需要 DB 上的空间,请使用 Entity Framework 5/6。

  • 如果您需要在 c# 中进行进一步的空间操作,请使用 NetTopologySuite 之类的工具。有一个 NuGet,使用起来非常简单。

关于c# - 如何使用 System.Spatial.GeographyPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19095985/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com