private static string processMultiPartBuffer(MultiPartShapeBuffer buffer, string geoJsonType) { try { List<string> delims = getMultipartDelimiter(geoJsonType); bool hasZ = false; try { hasZ = (buffer.Zs != null); } catch { hasZ = false; } StringBuilder retval = new StringBuilder("{\"type\":\"" + geoJsonType + "\", \"coordinates\": ["); int numPts = buffer.NumPoints; int numParts = buffer.NumParts; int[] parts = buffer.Parts; Point[] points = buffer.Points; List<string> coords = new List<string>(); List<string> polys = new List<string>(); int partCount = 0; for (int i = 0; i < numPts; i++) { if ((partCount < numParts) && (i == parts[partCount])) { if (coords.Count > 0) { string[] coordArray = coords.ToArray(); string coordList = string.Join(",", coordArray); polys.Add(delims[0] + coordList + delims[1]); } coords = new List<string>(); partCount++; } string coord = hasZ ? getCoordinate(points[i].x, points[i].y, buffer.Zs[i]) : getCoordinate(points[i].x, points[i].y); coords.Add(coord); } if (coords.Count > 0) { string[] coordArray = coords.ToArray(); string coordList = string.Join(",", coordArray); polys.Add(delims[0] + coordList + delims[1]); } string[] polyArray = polys.ToArray(); string polyList = string.Join(",", polyArray); retval.Append(polyList); retval.Append("]}"); return retval.ToString(); } catch (Exception ex) { throw new Exception("Error processing multipart buffer", ex); } }
private static string processMultiPartBuffer(MultiPartShapeBuffer buffer, string wktType) { try { List <string> delims = getMultipartDelimiter(wktType); bool hasZ = false; try { hasZ = (buffer.Zs != null); } catch { hasZ = false; } string retval = wktType + "({0})"; int numPts = buffer.NumPoints; int numParts = buffer.NumParts; int[] parts = buffer.Parts; Point[] points = buffer.Points; List <string> coords = new List <string>(); List <string> polys = new List <string>(); int partCount = 0; for (int i = 0; i < numPts; i++) { if ((partCount < numParts) && (i == parts[partCount])) { if (coords.Count > 0) { string[] coordArray = coords.ToArray(); string coordList = string.Join(",", coordArray); polys.Add(delims[0] + coordList + delims[1]); } coords = new List <string>(); partCount++; } string coord = hasZ ? getCoordinate(points[i].x, points[i].y, buffer.Zs[i]) : getCoordinate(points[i].x, points[i].y); coords.Add(coord); } if (coords.Count > 0) { string[] coordArray = coords.ToArray(); string coordList = string.Join(",", coordArray); polys.Add(delims[0] + coordList + delims[1]); } string[] polyArray = polys.ToArray(); string polyList = string.Join(",", polyArray); retval = string.Format(retval, polyList); return(retval); } catch (Exception ex) { throw new Exception("Error processing multipart buffer", ex); } }
private static string processMultiPartBuffer(MultiPartShapeBuffer buffer, string wktType) { List<string> delims = getMultipartDelimiter(wktType); bool hasZ = false; try { hasZ = (buffer.Zs != null); } catch { hasZ = false; } string retval = wktType + "({0})"; int numPts = buffer.NumPoints; int numParts = buffer.NumParts; int[] parts = buffer.Parts; Point[] points = buffer.Points; List<string> coords = new List<string>(); List<string> polys = new List<string>(); int partCount = 0; for (int i = 0; i < numPts; i++) { if ((partCount < numParts) && (i == parts[partCount])) { if (coords.Count > 0) { string[] coordArray = coords.ToArray(); string coordList = string.Join(",", coordArray); polys.Add(delims[0] + coordList + delims[1]); } coords = new List<string>(); partCount++; } string coord = hasZ ? getCoordinate(points[i].x, points[i].y, buffer.Zs[i]) : getCoordinate(points[i].x, points[i].y); coords.Add(coord); } if (coords.Count > 0) { string[] coordArray = coords.ToArray(); string coordList = string.Join(",", coordArray); polys.Add(delims[0] + coordList + delims[1]); } string[] polyArray = polys.ToArray(); string polyList = string.Join(",", polyArray); retval = string.Format(retval, polyList); return retval; }
public static string ToWKT(this Esri.FileGDB.ShapeBuffer geometry) { try { string retval = ""; var shapeType = (ShapeType)geometry.shapeType; //note: "M" values are not really supported. Relevant geometries are handled to extract Z values, if present. switch (shapeType) { case ShapeType.Multipoint: case ShapeType.MultipointZ: case ShapeType.MultipointZM: MultiPointShapeBuffer mptbuff = geometry; retval = processMultiPointBuffer(mptbuff); break; case ShapeType.Point: case ShapeType.PointZ: case ShapeType.PointZM: PointShapeBuffer pt = geometry; retval = processPointBuffer(geometry); break; case ShapeType.Polyline: case ShapeType.PolylineZ: case ShapeType.PolylineZM: MultiPartShapeBuffer lbuff = geometry; retval = processMultiPartBuffer(lbuff, "MULTILINESTRING"); break; case ShapeType.Polygon: case ShapeType.PolygonZ: case ShapeType.PolygonZM: MultiPartShapeBuffer pbuff = geometry; retval = processMultiPartBuffer(pbuff, "MULTIPOLYGON"); break; } return(retval); } catch (Exception ex) { throw new Exception("Error processing geometry", ex); } }
private static IMultiParts ToGeneralMultiPart(MultiPartShapeBuffer multiPart, GeometryType geometryType) { IMultiParts multiParts; if (geometryType == GeometryType.Polyline) { multiParts = new GeometryFactory().CreatePolyline(); } else { multiParts = new GeometryFactory().CreatePolygon(); } var rings = multiParts.Parts; for (var i = 0; i < multiPart.NumParts; i++) { var partStart = multiPart.Parts[i]; int partEnd; if (i + 1 < multiPart.NumParts) { partEnd = multiPart.Parts[i + 1]; } else { partEnd = multiPart.NumPoints - 1; } var linearRing = new GeometryFactory().CreateLineString(); var points = linearRing.Vertices; for (var j = partStart; j <= partEnd; j++) { var mapPoint = new GeometryFactory().CreatePoint(multiPart.Points[i].x, multiPart.Points[i].y); points.Add(mapPoint); } rings.Add(linearRing); } return(multiParts); }
private static IMultiParts ToGeneralMultiPart(MultiPartShapeBuffer multiPart, GeometryType geometryType) { IMultiParts multiParts; if (geometryType == GeometryType.Polyline) { multiParts = new GeometryFactory().CreatePolyline(); } else { multiParts = new GeometryFactory().CreatePolygon(); } var rings = multiParts.Parts; for (var i = 0; i < multiPart.NumParts; i++) { var partStart = multiPart.Parts[i]; int partEnd; if (i + 1 < multiPart.NumParts) { partEnd = multiPart.Parts[i + 1]; } else { partEnd = multiPart.NumPoints - 1; } var linearRing = new GeometryFactory().CreateLineString(); var points = linearRing.Vertices; for (var j = partStart; j <= partEnd; j++) { var mapPoint = new GeometryFactory().CreatePoint(multiPart.Points[i].x, multiPart.Points[i].y); points.Add(mapPoint); } rings.Add(linearRing); } return multiParts; }
private static string processMultiPartBuffer(MultiPartShapeBuffer buffer, string geoJsonType) { List<string> delims = getMultipartDelimiter(geoJsonType); string retval = "{\"type\":\"" + geoJsonType + "\", \"coordinates\": ["; int numPts = buffer.NumPoints; int numParts = buffer.NumParts; int[] parts = buffer.Parts; Point[] points = buffer.Points; List<string> coords = new List<string>(); List<string> polys = new List<string>(); int partCount = 0; for (int i = 0; i < numPts; i++) { if ((partCount < numParts) && (i == parts[partCount])) { if (coords.Count > 0) { string [] coordArray = coords.ToArray(); string coordList = string.Join(",", coordArray); polys.Add(delims[0] + coordList + delims[1]); } coords = new List<string>(); partCount++; } string coord = getCoordinate(points[i].x, points[i].y); coords.Add(getCoordinate(points[i].x, points[i].y)); } if (coords.Count > 0) { string[] coordArray = coords.ToArray(); string coordList = string.Join(",", coordArray); polys.Add(delims[0] + coordList + delims[1]); } string[] polyArray = polys.ToArray(); string polyList = string.Join(",", polyArray); retval += polyList + "]}"; return retval; }
private static string processMultiPartBuffer(MultiPartShapeBuffer buffer, string geoJsonType) { try { List<string> delims = getMultipartDelimiter(geoJsonType); bool hasZ = false; try { hasZ = (buffer.Zs != null); } catch { hasZ = false; } StringBuilder retval = new StringBuilder("{\"type\":\"" + geoJsonType + "\", \"coordinates\": ["); int numPts = buffer.NumPoints; int numParts = buffer.NumParts; int[] parts = buffer.Parts; Point[] points = buffer.Points; List<string> coords = new List<string>(); List<string> polys = new List<string>(); int partCount = 0; for (int i = 0; i < numPts; i++) { if ((partCount < numParts) && (i == parts[partCount])) { if (coords.Count > 0) { string[] coordArray = coords.ToArray(); string coordList = string.Join(",", coordArray); polys.Add(delims[0] + coordList + delims[1]); } coords = new List<string>(); partCount++; } string coord = hasZ ? getCoordinate(points[i].x, points[i].y, buffer.Zs[i]) : getCoordinate(points[i].x, points[i].y); coords.Add(coord); } if (coords.Count > 0) { string[] coordArray = coords.ToArray(); string coordList = string.Join(",", coordArray); polys.Add(delims[0] + coordList + delims[1]); } string[] polyArray = polys.ToArray(); string polyList = string.Join(",", polyArray); retval.Append(polyList); retval.Append("]}"); return retval.ToString(); } catch (Exception ex) { throw new Exception("Error processing multipart buffer", ex); } }