Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 7
0
        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;
        }
Ejemplo n.º 8
0
        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);
            }
        }