C# 如何使用NetTopologySuite以米为单位获得两点几何体的距离?
如何使用NetTopologySuite以米为单位获得两点几何体的距离 我使用了Distance()函数,但是我得到了一些值,但我无法确定这些值的单位。对于c#应用程序来说,忽略20米的公差值是可以忽略的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
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))李>
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。如果这对您合适,它仍然有效。