var kmlFile = KmlFile.Load(stream); var root = kmlFile.Root as Kml; if (root?.Feature is Placemark placemark) // Extract coordinates if (placemark.Geometry is Point point) var coord = point.Coordinate; geometries.Add(new KmlGeometry(GeometryType.Point, new[] new Coordinate(coord.Latitude, coord.Longitude, coord.Altitude) )); else if (placemark.Geometry is LineString line) var coords = line.Coordinates.Select(c => new Coordinate(c.Latitude, c.Longitude, c.Altitude)).ToArray(); geometries.Add(new KmlGeometry(GeometryType.Polyline, coords)); else if (placemark.Geometry is Polygon polygon) // Extract outer boundary var coords = polygon.OuterBoundary.LinearRing.Coordinates.Select(c => new Coordinate(c.Latitude, c.Longitude, c.Altitude)).ToArray(); geometries.Add(new KmlGeometry(GeometryType.Polygon, coords));
// Transform & import ImportGeometry(kmlData, targetCsCode, db, tr);
// Coordinate system (optional: prompt user) string targetCsCode = GetDrawingCoordinateSystemCode(db); import kml to autocad civil 3d 2018
public ObjectId Create3DPolyline(Point3dCollection points, Database db, Transaction tr)
var sourceCs = "LL84"; // EPSG:4326 alias in Civil 3D var transform = CoordinateSystemService.CreateTransform(sourceCs, targetCsCode); double x, y; transform.TransformPoint(lon, lat, out x, out y); // note: lon → X, lat → Y return new Point2d(x, y); var kmlFile = KmlFile
using (Transaction tr = db.TransactionManager.StartTransaction())
return geometries; Use CoordinateSystemService from Civil 3D API: var kmlFile = KmlFile.Load(stream)
public List<KmlGeometry> ParseKML(string filepath)