コード例 #1
0
ファイル: Referentiel.cs プロジェクト: ChampsyGnom/GeoPat
        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;
        }
コード例 #2
0
ファイル: Referentiel.cs プロジェクト: ChampsyGnom/GeoPat
        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);
            }
        }