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()); } }
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()); } }
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)); } } }
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); }
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()); }