public const string _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""]]";
public const string WGS84UTM49N = @"PROJCS[""WGS 84 / UTM zone 49N"",
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[""metre"",1,
AUTHORITY[""EPSG"",""9001""]],
PROJECTION[""Transverse_Mercator""],
PARAMETER[""latitude_of_origin"",0],
PARAMETER[""central_meridian"",111],
PARAMETER[""scale_factor"",0.9996],
PARAMETER[""false_easting"",500000],
PARAMETER[""false_northing"",0],
AUTHORITY[""EPSG"",""32649""],
AXIS[""Easting"",EAST],
AXIS[""Northing"",NORTH]]";
public static NetTopologySuite.Geometries.Geometry ProjectGeometry(NetTopologySuite.Geometries.Geometry geom,
string fromWkt, string toWkt)
{
var sourceCoordSystem = new CoordinateSystemFactory().CreateFromWkt(fromWkt);
var targetCoordSystem = new CoordinateSystemFactory().CreateFromWkt(toWkt);
var trans = new CoordinateTransformationFactory().CreateFromCoordinateSystems(sourceCoordSystem,
targetCoordSystem);
var projGeom = Transform(geom, transform: trans.MathTransform);
return projGeom;
}
private static NetTopologySuite.Geometries.Geometry Transform(NetTopologySuite.Geometries.Geometry geom,
MathTransform transform)
{
geom = geom.Copy();
geom.Apply(new MTF(transform));
return geom;
}
private sealed class MTF : NetTopologySuite.Geometries.ICoordinateSequenceFilter
{
private readonly MathTransform _mathTransform;
public MTF(MathTransform mathTransform) => _mathTransform = mathTransform;
public bool Done => false;
public bool GeometryChanged => true;
public void Filter(NetTopologySuite.Geometries.CoordinateSequence seq, int i)
{
var x = seq.GetX(i);
var y = seq.GetY(i);
var z = seq.GetZ(i);
_mathTransform.Transform(ref x, ref y, ref z);
seq.SetX(i, x);
seq.SetY(i, y);
seq.SetZ(i, z);
}
}
usage
var hca = new WKTReader().Read(
$"SRID=4326;{hcaShape}");
hca = GeometryExtensions.ProjectGeometry(hca, GeometryExtensions._4326, GeometryExtensions.WGS84UTM49N);
var point = new GeometryFactory().CreatePoint(new Coordinate(pipeLine[i].X, pipeLine[i].Y));
point.SRID = 4326;
var transPoint =
GeometryExtensions.ProjectGeometry(point, GeometryExtensions._4326, GeometryExtensions.WGS84UTM49N);
var distance = hca.Distance(transPoint)