this.myGraphicTracker.SuspendUpdate = true; // Add 2000 geometries (geodesic great circle) to a Graphic Tracker IPolyline polyligneGeodesic; IGeometry geometry; IPoint pointOrigin; double coordX = 99166; double coordY = 538333; double polylineDistanceKm = 400; double azimut = 1; // Point of origin pointOrigin = new PointClass(); pointOrigin.PutCoords(coordX, coordY); for (int i = 0; i < 2000; i++) { azimut = azimut + 1.1; // Construct the Polyline polyligneGeodesic = CartoEngine.ConstructGeodeticGreatCircleLine(pointOrigin, azimut, polylineDistanceKm); geometry = polyligneGeodesic as IGeometry; CartoEngine.ProjeterWGS84VersRefSpatialeCarte(geometry, this.axMapControl.Map.SpatialReference); // Add the Geometry to the Graphic Tracker this.myGraphicTracker.Add(geometry, this.myLineSymbol); // Preserve references to COM objects IGeometry this.listOfMyGeometries.Add(geometry); } this.myGraphicTracker.SuspendUpdate = false;
public static class CartoEngine { public static IPolyline ConstructGeodeticGreatCircleLine(IPoint pointOrigin, double azimut, double distanceKm) { IPolyline polyline = new PolylineClass(); try { IConstructGeodetic CG = polyline as IConstructGeodetic; if (CG != null) { // Instanciation of input Spatial Reference ISpatialReferenceFactory3 spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); ISpatialReference spatialReference = spatialReferenceFactory.CreateSpatialReference((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); // Linear Unit ILinearUnit uniteLineaire = spatialReferenceFactory.CreateUnit((int)esriSRUnitType.esriSRUnit_Kilometer) as ILinearUnit; if (uniteLineaire != null) { pointOrigin.SpatialReference = spatialReference; double parametreDensifier = 1; esriCurveDensifyMethod methodeDensifier = esriCurveDensifyMethod.esriCurveDensifyByDeviation; esriGeodeticType typeGeodesique = esriGeodeticType.esriGeodeticTypeGreatElliptic; // Construct the polyline "great circle" CG.ConstructGeodeticLineFromDistance(typeGeodesique, pointOrigin, uniteLineaire, distanceKm, azimut, methodeDensifier, parametreDensifier); } else { polyline = null; } } else { polyline = null; } } catch (COMException exc) { polyline = null; } catch (Exception exc) { polyline = null; } return polyline; } }
Solved! Go to Solution.