public ReferentielLineString(InfChaussee chaussee, double absDeb, double absFin, LineString ls) { // TODO: Complete member initialization this.Segements = new List<ReferentielSegment>(); this.Chaussee = chaussee; this.AbsDeb = absDeb; this.AbsFin = absFin; double deltaAbs = this.AbsFin - this.AbsDeb; double coeff = deltaAbs / ls.Length; double absCurrent = this.AbsDeb; for (int i = 0; i < ls.Coordinates.Count - 1; i++) { Coordinate coordDeb = ls.Coordinates[i]; Coordinate coordFin = ls.Coordinates[i+1]; double segmentLength = new LineString(new Coordinate[] { coordDeb,coordFin }).Length; if (segmentLength > 0) { double lengthInAbs = segmentLength * coeff; ReferentielSegment segment = new ReferentielSegment(coordDeb, coordFin, absCurrent, absCurrent + lengthInAbs); this.Segements.Add(segment); absCurrent += lengthInAbs; } } this.Segements.First().AbsDeb = absDeb; this.Segements.Last().AbsFin = absFin; }
public ReferentielMultiLineString(InfChaussee chaussee) { this.Chaussee = chaussee; this.AbsDeb = chaussee.AbsDeb; this.AbsFin = chaussee.AbsFin; this.LineStrings = new List<ReferentielLineString>(); Geometry geometry = WktHelper.CreateGeometryFromWkt(this.Chaussee.Geom); if (geometry is MultiLineString) { MultiLineString mls = (geometry as MultiLineString); double totalLength = 0; double absCurrent = this.AbsDeb; foreach (LineString ls in mls.Geometries) {totalLength += ls.Length;} double coeff = (this.AbsFin - this.AbsDeb) / totalLength; foreach (LineString ls in mls.Geometries) { double lengthInAbs = ls.Length* coeff; ReferentielLineString refLineString = new ReferentielLineString(chaussee, absCurrent, (absCurrent+lengthInAbs), ls); this.LineStrings.Add(refLineString); absCurrent += lengthInAbs; } this.LineStrings.First().Segements.First().AbsDeb = this.AbsDeb; this.LineStrings.Last().Segements.Last().AbsFin = this.AbsFin; } else if (geometry is LineString) { LineString ls = (geometry as LineString); ReferentielLineString refLineString = new ReferentielLineString(chaussee,chaussee.AbsDeb, chaussee.AbsFin, ls); this.LineStrings.Add(refLineString); } }