C# 如何使用NetTopologySuite以米为单位获得两点几何体的距离?

C# 如何使用NetTopologySuite以米为单位获得两点几何体的距离?,c#,geometry,nettopologysuite,C#,Geometry,Nettopologysuite,如何使用NetTopologySuite以米为单位获得两点几何体的距离 我使用了Distance()函数,但是我得到了一些值,但我无法确定这些值的单位。对于c#应用程序来说,忽略20米的公差值是可以忽略的 using NetTopologySuite.Geometries; using GeoAPI.Geometries; private static double findistance() { var geomFactory = new GeometryFactory(new Pre

如何使用NetTopologySuite以米为单位获得两点几何体的距离

我使用了Distance()函数,但是我得到了一些值,但我无法确定这些值的单位。对于c#应用程序来说,忽略20米的公差值是可以忽略的

using NetTopologySuite.Geometries;
using GeoAPI.Geometries;

private static double findistance()
{
   var geomFactory = new GeometryFactory(new PrecisionModel(), 4326);
   IGeometry geometry1 = geomFactory.CreatePoint(new Coordinate(12.977299, 77.571075));
   IGeometry geometry2 = geomFactory.CreatePoint(new Coordinate(12.977277, 77.571258));
   var distance = geometry1.Distance(geometry2);
   return distance;
}

我需要用米来计算距离。

你可以用毕达哥拉斯定理来计算距离

以下是步骤:

  • 获得三角洲
    • double int deltaX=Math.Abs(point1.X-point2.X)
    • double int deltaY=Math.Abs(point1.Y-point2.Y)
  • 毕达哥拉斯公式
    • 双距离=数学Sqrt((deltaX*deltaX)+(deltaY*deltaY))
  • 如果要计算3D点,除了计算DeltaZ外,步骤相同,然后公式为距离=X^2+Y^2+Z^2

    Per,SRID 4326代表以下定义

    GEOGCS["WGS 84",
      DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
      PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
      UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],
      AUTHORITY["EPSG","4326"]]
    
    UNIT[“degree”…
    告诉我们您得到的结果有以度为单位的值。如果我们将这些点转换为投影坐标系,我们可以以米为单位计算距离。
    ProjNET4GeoAPI
    包可以为我们这样做

    private static double findDistance()
    {
        CoordinateTransformationFactory ctfac = new CoordinateTransformationFactory();
    
        var from = GeographicCoordinateSystem.WGS84;
        var to = ProjectedCoordinateSystem.WebMercator;
    
        var trans = ctfac.CreateFromCoordinateSystems(from, to);
        var mathTransform = trans.MathTransform;
    
        var p1Coordinate = new GeoAPI.Geometries.Coordinate(12.977299, 77.571075);
        var p2Coordinate = new GeoAPI.Geometries.Coordinate(12.977277, 77.571258);
    
        p1Coordinate = mathTransform.Transform(p1Coordinate);
        p2Coordinate = mathTransform.Transform(p2Coordinate);
    
        return p1Coordinate.Distance(p2Coordinate);
    }
    

    这将导致巨大的错误,尤其是当几何体彼此相距较远时。@DmytroGokun感谢您的反馈。我自己对这个主题是新手,当我有类似的问题时,这是我发现的最好的东西。对于我的项目,我使用了
    ProjectedCoordinateSystem.WGS84_UTM(30,正确)
    因为它涵盖了所需的国家/地区,但如果该点位于区域外,这将是不准确的?我认为
    WebMercator
    类似于“平均值”关于我们不知道确切区域时的准确度?@DmytroGokun如果您对此回答有任何建议,我会很高兴的。不,我不知道解决方案。以前,我使用Microsoft.SqlServer.Types正确计算距离,但它不适用于.NET Core,仅适用于.NET Framework。如果这对您合适,它仍然有效。