Пример #1
0
        public void SplitByLatitude(double splitLat, out ShapePolyline lPly, out ShapePolyline rPly)
        {
            lPly = rPly = null;
            List <ShapeLineString> lStrings = new List <ShapeLineString>();
            List <ShapeLineString> rStrings = new List <ShapeLineString>();

            foreach (ShapeLineString str in _parts)
            {
                ShapeLineString lString = null, rString = null;
                str.SplitByLatitude(splitLat, out lString, out rString);
                if (lString != null)
                {
                    lStrings.Add(lString);
                }
                if (rString != null)
                {
                    rStrings.Add(rString);
                }
            }
            if (lStrings.Count > 0)
            {
                lPly = new ShapePolyline(lStrings.ToArray());
            }
            if (rStrings.Count > 0)
            {
                rPly = new ShapePolyline(rStrings.ToArray());
            }
        }
Пример #2
0
        public void SplitByLatitude(double splitLat, out ShapeLineString lLineString, out ShapeLineString rLineString)
        {
            lLineString = rLineString = null;
            List <ShapePoint> lPoints = new List <ShapePoint>();
            List <ShapePoint> rPoints = new List <ShapePoint>();

            foreach (ShapePoint pt in _points)
            {
                if (pt.Y > splitLat)
                {
                    rPoints.Add(pt);
                }
                else
                {
                    lPoints.Add(pt);
                }
            }
            if (lPoints.Count > 2)
            {
                lLineString = new ShapeLineString(lPoints.ToArray());
            }
            if (rPoints.Count > 2)
            {
                rLineString = new ShapeLineString(rPoints.ToArray());
            }
        }
Пример #3
0
        public void SplitByLongitude(double splitLon, out List <ShapeRing> lRings, out List <ShapeRing> rRings)
        {
            lRings = null;
            rRings = null;
            ShapeLineString leftLineString  = null;
            ShapeLineString rightLineString = null;

            SplitByLongitude(splitLon, out leftLineString, out rightLineString);
            //
            if (leftLineString != null)
            {
                lRings = new List <ShapeRing>();
                if (leftLineString.Points.Length > 2)
                {
                    lRings.Add(new ShapeRing(leftLineString.Points));
                }
            }
            if (rightLineString != null)
            {
                rRings = new List <ShapeRing>();
                if (rightLineString.Points.Length > 2)
                {
                    rRings.Add(new ShapeRing(rightLineString.Points));
                }
            }
        }
Пример #4
0
 public override object Clone()
 {
     if (_parts == null || _parts.Length == 0)
     {
         return(null);
     }
     ShapeLineString[] parts = new ShapeLineString[_parts.Length];
     for (int i = 0; i < parts.Length; i++)
     {
         parts[i] = _parts[i].Clone() as ShapeLineString;
     }
     return(new ShapePolyline(parts));
 }
        private object ConstructPolylineM(BinaryReader br, int oid)
        {
            Envelope evp = new Envelope(ToLocalEndian.ToDouble64FromLittle(br.ReadBytes(8)),
                                        ToLocalEndian.ToDouble64FromLittle(br.ReadBytes(8)),
                                        ToLocalEndian.ToDouble64FromLittle(br.ReadBytes(8)),
                                        ToLocalEndian.ToDouble64FromLittle(br.ReadBytes(8)));
            int nParts  = ToLocalEndian.ToInt32FromLittle(br.ReadBytes(4));
            int nPoints = ToLocalEndian.ToInt32FromLittle(br.ReadBytes(4));

            int[] firstPoints = new int[nParts];
            for (int i = 0; i < nParts; i++)
            {
                firstPoints[i] = ToLocalEndian.ToInt32FromLittle(br.ReadBytes(4));
            }
            ShapePoint[] pts = new ShapePoint[nPoints];
            for (int i = 0; i < nPoints; i++)
            {
                pts[i] = new ShapePoint(ToLocalEndian.ToDouble64FromLittle(br.ReadBytes(8)),
                                        ToLocalEndian.ToDouble64FromLittle(br.ReadBytes(8)));
            }
            //ShapeLineString
            ShapeLineString[] Lines = new ShapeLineString[nParts];
            for (int i = 0; i < nParts; i++)
            {
                int bIdx = firstPoints[i];
                int eIdx = 0;
                if (nParts == 1 || i == nParts - 1)
                {
                    eIdx = nPoints;
                }
                else
                {
                    eIdx = firstPoints[i + 1];
                }
                ShapePoint[] rpts = new ShapePoint[eIdx - bIdx];
                for (int j = bIdx; j < eIdx; j++)
                {
                    rpts[j - bIdx] = pts[j];
                }
                Lines[i] = new ShapeLineString(rpts);
            }
            //
            br.ReadBytes(2 * 8);       //M Range
            br.ReadBytes(nPoints * 8); //M Array
            //
            ShapePolyline ply = new ShapePolyline(Lines, evp);
            Feature       f   = new Feature(oid, ply, GetFieldNames(), GetFieldValues(oid), GetAnnotation(oid));

            return(f);
        }
Пример #6
0
        public override string ToWkt()
        {
            if (_parts == null || _parts.Length == 0)
            {
                return(null);
            }
            StringBuilder sb = new StringBuilder();

            sb.Append("MULTILINESTRING(");
            for (int i = 0; i < _parts.Length; i++)
            {
                ShapeLineString part = _parts[i];
                if (part.Points == null || part.Points.Length == 0)
                {
                    continue;
                }
                sb.Append("(");
                for (int j = 0; j < part.Points.Length; j++)
                {
                    ShapePoint pt = part.Points[j];
                    sb.Append(pt.X.ToString());
                    sb.Append(" ");
                    sb.Append(pt.Y.ToString());
                    if (j != part.Points.Length - 1)
                    {
                        sb.Append(",");
                    }
                }
                sb.Append(")");
                if (i != _parts.Length - 1)
                {
                    sb.Append(",");
                }
            }
            sb.Append(")");
            return(sb.ToString());
        }