Exemplo n.º 1
0
        private IMultiLineString ReadMultiLine(int dim, int lrsDim,
                                               SdoGeometry sdoGeom)
        {
            bool lrs = sdoGeom.LRS > 0;

            decimal[]    info  = sdoGeom.ElemArray;
            LineString[] lines =
                lrs
                                        ? new MLineString[sdoGeom.ElemArray.Length]
                                        : new LineString[sdoGeom.ElemArray.Length];
            int i = 0;

            while (i < info.Length)
            {
                ICoordinateSequence cs = null;
                if (info.getElementType(i).isCompound())
                {
                    int numCompounds = info.getNumCompounds(i);
                    cs = Add(cs, GetCompoundCSeq(i + 1, i + numCompounds, sdoGeom));
                    LineString line =
                        lrs
                                                        ? factory.createMLineString(cs)
                                                        : factory.CreateLineString(cs);
                    lines[i] = line;
                    i       += 1 + numCompounds;
                }
                else
                {
                    cs = Add(cs, GetElementCSeq(i, sdoGeom, false));
                    LineString line = lrs ? (LineString)factory.createMLineString(cs) : factory.CreateLineString(cs);
                    lines[i] = line;
                    i++;
                }
            }

            MultiLineString mls =
                lrs
                                        ? factory.createMultiMLineString((MLineString[])lines)
                                        : factory.CreateMultiLineString(lines);

            mls.SRID = (int)sdoGeom.Sdo_Srid;
            return(mls);
        }