4

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

我使用了 Distance() 函数,但我得到了一些值,但我无法识别这些值的单位。其对于ac#应用忽略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;
}

我需要以米为单位计算距离。

4

2 回答 2

1

根据文档,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"...告诉我们您得到的结果以度为单位。如果我们将这些点转换为投影坐标系,我们可以以米为单位计算距离。ProjNET4GeoAPIpackage 可以为我们做到这一点。

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);
}
于 2020-11-17T07:46:00.583 回答
0

您可以使用毕达哥拉斯定理来计算距离。

以下是步骤:

  1. 获取增量
    • 双整数 deltaX = Math.Abs​​(point1.X - point2.X);
    • double int deltaY = Math.Abs​​(point1.Y - point2.Y);
  2. 毕达哥拉斯公式
    • 双距离 = Math.Sqrt((deltaX * deltaX) + (deltaY * deltaY));

如果要计算 3D 点,除了计算 DeltaZ 之外,步骤相同,然后公式为距离 = X^2 + Y^2 + Z^2

于 2020-11-17T06:38:48.610 回答