Parameters
- geometry
- The input geometry. Cannot be null and its spatial reference cannot be null.
Return Value
The calculated geodesic length in meters. If the geometry is empty, then zero is returned.
Exception | Description |
---|---|
System.ArgumentNullException | Geometry is null or geometry's spatial reference is null. |
System.NotImplementedException | The method is not implemented for GeometryBag or Multipatch. |
System.NotImplementedException | Spatial reference of geometryis an image coordinate system. |
var polyline = PolylineBuilderEx.CreatePolyline(new[] { MapPointBuilderEx.CreateMapPoint(-10018754.1713946, 10018754.1713946), MapPointBuilderEx.CreateMapPoint(10018754.1713946, 10018754.1713946) }, SpatialReferences.WebMercator); var length = GeometryEngine.Instance.GeodesicLength(polyline); // length is approx 5243784.5551844323 in meters length = GeometryEngine.Instance.GeodesicLength(polyline, LinearUnit.Miles); // length is approx 3258.33666089067 in miles var polyline2 = GeometryEngine.Instance.Project(polyline, SpatialReferences.WGS84); length = GeometryEngine.Instance.GeodesicLength(polyline2); // length is approx 5243784.55518443 in meters after projecting
List<Coordinate2D> coords = new List<Coordinate2D>() { new Coordinate2D(-80, 0), new Coordinate2D(-20, 60), new Coordinate2D(40, 20), new Coordinate2D(0, -20), new Coordinate2D(-80, 0) }; SpatialReference sr = SpatialReferences.WGS84; // create a polygon Polygon polygon = PolygonBuilderEx.CreatePolygon(coords, sr); // get the geodesic lengths of the polygon segments ReadOnlySegmentCollection segments = polygon.Parts[0]; List<Double> geoLengths = new List<Double>(segments.Count); foreach (Segment s in segments) { Polyline line = PolylineBuilderEx.CreatePolyline(s, sr); double geoLen = GeometryEngine.Instance.GeodesicLength(line); geoLengths.Add(geoLen); } // find the max length geoLengths.Sort(); double maxLen = geoLengths[geoLengths.Count - 1]; // densify the polygon (in meters) Polygon densifiedPoly = GeometryEngine.Instance.GeodeticDensifyByLength(polygon, maxLen, LinearUnit.Meters, GeodeticCurveType.Geodesic) as Polygon; // densify the polygon (in km) double maxSegmentLength = maxLen / 10000; densifiedPoly = GeometryEngine.Instance.GeodeticDensifyByLength(polygon, maxSegmentLength, LinearUnit.Kilometers, GeodeticCurveType.Geodesic) as Polygon;
Target Platforms: Windows 11, Windows 10