private static void SharpMapMultiPointToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiPoint multiPoint) { geomBuilder.BeginGeometry(OpenGisGeometryType.MultiPoint); for(int i = 0; i <= multiPoint.NumGeometries; i++) SharpMapPointToSqlGeometry(geomBuilder, multiPoint.Geometry(i)); geomBuilder.EndGeometry(); }
internal static SharpMap.Geometries.MultiPoint ToSharpMapMultiPoint(GisSharpBlog.NetTopologySuite.Geometries.MultiPoint multiPoint) { SharpMap.Geometries.MultiPoint collection = new SharpMap.Geometries.MultiPoint(); foreach (GisSharpBlog.NetTopologySuite.Geometries.Point point in multiPoint.Geometries) { collection.Points.Add(ToSharpMapPoint(point)); } return(collection); }
private static SMGeometry SqlGeometryToSharpMapMultiPoint(SqlGeometry geometry) { SMMultiPoint multiPoint = new SMMultiPoint(); for (int i = 1; i <= geometry.STNumGeometries(); i++) { multiPoint.Points.Add((SMPoint)SqlGeometryToSharpMapPoint(geometry.STGeometryN(i))); } return(multiPoint); }
/// <summary> /// Reads and parses the geometry with ID 'oid' from the ShapeFile /// </summary> /// <remarks><see cref="FilterDelegate">Filtering</see> is not applied to this method</remarks> /// <param name="oid">Object ID</param> /// <returns>geometry</returns> private SharpMap.Geometries.Geometry ReadGeometry(uint oid) { brShapeFile.BaseStream.Seek(GetShapeIndex(oid) + 8, 0); //Skip record number and content length ShapeType type = (ShapeType)brShapeFile.ReadInt32(); //Shape type if (type == ShapeType.Null) { return(null); } if (_ShapeType == ShapeType.Point || _ShapeType == ShapeType.PointM || _ShapeType == ShapeType.PointZ) { SharpMap.Geometries.Point tempFeature = new SharpMap.Geometries.Point(); return(new SharpMap.Geometries.Point(brShapeFile.ReadDouble(), brShapeFile.ReadDouble())); } else if (_ShapeType == ShapeType.Multipoint || _ShapeType == ShapeType.MultiPointM || _ShapeType == ShapeType.MultiPointZ) { brShapeFile.BaseStream.Seek(32 + brShapeFile.BaseStream.Position, 0); //skip min/max box SharpMap.Geometries.MultiPoint feature = new SharpMap.Geometries.MultiPoint(); int nPoints = brShapeFile.ReadInt32(); // get the number of points if (nPoints == 0) { return(null); } for (int i = 0; i < nPoints; i++) { feature.Points.Add(new SharpMap.Geometries.Point(brShapeFile.ReadDouble(), brShapeFile.ReadDouble())); } return(feature); } else if (_ShapeType == ShapeType.PolyLine || _ShapeType == ShapeType.Polygon || _ShapeType == ShapeType.PolyLineM || _ShapeType == ShapeType.PolygonM || _ShapeType == ShapeType.PolyLineZ || _ShapeType == ShapeType.PolygonZ) { brShapeFile.BaseStream.Seek(32 + brShapeFile.BaseStream.Position, 0); //skip min/max box int nParts = brShapeFile.ReadInt32(); // get number of parts (segments) if (nParts == 0) { return(null); } int nPoints = brShapeFile.ReadInt32(); // get number of points int[] segments = new int[nParts + 1]; //Read in the segment indexes for (int b = 0; b < nParts; b++) { segments[b] = brShapeFile.ReadInt32(); } //add end point segments[nParts] = nPoints; if ((int)_ShapeType % 10 == 3) { SharpMap.Geometries.MultiLineString mline = new SharpMap.Geometries.MultiLineString(); for (int LineID = 0; LineID < nParts; LineID++) { SharpMap.Geometries.LineString line = new SharpMap.Geometries.LineString(); for (int i = segments[LineID]; i < segments[LineID + 1]; i++) { line.Vertices.Add(new SharpMap.Geometries.Point(brShapeFile.ReadDouble(), brShapeFile.ReadDouble())); } mline.LineStrings.Add(line); } if (mline.LineStrings.Count == 1) { return(mline[0]); } return(mline); } else //(_ShapeType == ShapeType.Polygon etc...) { //First read all the rings List <SharpMap.Geometries.LinearRing> rings = new List <SharpMap.Geometries.LinearRing>(); for (int RingID = 0; RingID < nParts; RingID++) { SharpMap.Geometries.LinearRing ring = new SharpMap.Geometries.LinearRing(); for (int i = segments[RingID]; i < segments[RingID + 1]; i++) { ring.Vertices.Add(new SharpMap.Geometries.Point(brShapeFile.ReadDouble(), brShapeFile.ReadDouble())); } rings.Add(ring); } bool[] IsCounterClockWise = new bool[rings.Count]; int PolygonCount = 0; for (int i = 0; i < rings.Count; i++) { IsCounterClockWise[i] = rings[i].IsCCW(); if (!IsCounterClockWise[i]) { PolygonCount++; } } if (PolygonCount == 1) //We only have one polygon { SharpMap.Geometries.Polygon poly = new SharpMap.Geometries.Polygon(); poly.ExteriorRing = rings[0]; if (rings.Count > 1) { for (int i = 1; i < rings.Count; i++) { poly.InteriorRings.Add(rings[i]); } } return(poly); } else { SharpMap.Geometries.MultiPolygon mpoly = new SharpMap.Geometries.MultiPolygon(); SharpMap.Geometries.Polygon poly = new SharpMap.Geometries.Polygon(); poly.ExteriorRing = rings[0]; for (int i = 1; i < rings.Count; i++) { if (!IsCounterClockWise[i]) { mpoly.Polygons.Add(poly); poly = new SharpMap.Geometries.Polygon(rings[i]); } else { poly.InteriorRings.Add(rings[i]); } } mpoly.Polygons.Add(poly); return(mpoly); } } } else { throw (new ApplicationException("Shapefile type " + _ShapeType.ToString() + " not supported")); } }
internal static GisSharpBlog.NetTopologySuite.Geometries.MultiPoint ToNTSMultiPoint(SharpMap.Geometries.MultiPoint multiPoint, GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory) { GisSharpBlog.NetTopologySuite.Geometries.Point[] points = new GisSharpBlog.NetTopologySuite.Geometries.Point[multiPoint.Points.Count]; int index = 0; foreach (SharpMap.Geometries.Point point in multiPoint.Points) { points[index++] = ToNTSPoint(point, factory); } return(factory.CreateMultiPoint(points) as GisSharpBlog.NetTopologySuite.Geometries.MultiPoint); }
internal static SharpMap.Geometries.MultiPoint ToSharpMapMultiPoint(GisSharpBlog.NetTopologySuite.Geometries.MultiPoint multiPoint) { SharpMap.Geometries.MultiPoint collection = new SharpMap.Geometries.MultiPoint(); foreach(GisSharpBlog.NetTopologySuite.Geometries.Point point in multiPoint.Geometries) collection.Points.Add(ToSharpMapPoint(point)); return collection; }
private static SMGeometry SqlGeometryToSharpMapMultiPoint(SqlGeometry geometry) { SMMultiPoint multiPoint = new SMMultiPoint(); for (int i = 0; i < geometry.STNumGeometries(); i++) multiPoint.Points.Add((SMPoint)SqlGeometryToSharpMapPoint(geometry.STGeometryN(i))); return multiPoint; }
/// <summary> /// Reads and parses the geometry with ID 'oid' from the ShapeFile /// </summary> /// <remarks><see cref="FilterDelegate">Filtering</see> is not applied to this method</remarks> /// <param name="oid">Object ID</param> /// <returns>geometry</returns> private SharpMap.Geometries.Geometry ReadGeometry(uint oid) { brShapeFile.BaseStream.Seek(GetShapeIndex(oid) + 8, 0); //Skip record number and content length ShapeType type = (ShapeType)brShapeFile.ReadInt32(); //Shape type if (type == ShapeType.Null) return null; if (_ShapeType == ShapeType.Point || _ShapeType==ShapeType.PointM || _ShapeType==ShapeType.PointZ) { SharpMap.Geometries.Point tempFeature = new SharpMap.Geometries.Point(); return new SharpMap.Geometries.Point(brShapeFile.ReadDouble(), brShapeFile.ReadDouble()); } else if (_ShapeType == ShapeType.Multipoint || _ShapeType == ShapeType.MultiPointM || _ShapeType == ShapeType.MultiPointZ) { brShapeFile.BaseStream.Seek(32 + brShapeFile.BaseStream.Position, 0); //skip min/max box SharpMap.Geometries.MultiPoint feature = new SharpMap.Geometries.MultiPoint(); int nPoints = brShapeFile.ReadInt32(); // get the number of points if (nPoints == 0) return null; for (int i = 0; i < nPoints; i++) feature.Points.Add(new SharpMap.Geometries.Point(brShapeFile.ReadDouble(), brShapeFile.ReadDouble())); return feature; } else if ( _ShapeType == ShapeType.PolyLine || _ShapeType == ShapeType.Polygon || _ShapeType == ShapeType.PolyLineM || _ShapeType == ShapeType.PolygonM || _ShapeType == ShapeType.PolyLineZ || _ShapeType == ShapeType.PolygonZ) { brShapeFile.BaseStream.Seek(32 + brShapeFile.BaseStream.Position, 0); //skip min/max box int nParts = brShapeFile.ReadInt32(); // get number of parts (segments) if (nParts == 0) return null; int nPoints = brShapeFile.ReadInt32(); // get number of points int[] segments = new int[nParts + 1]; //Read in the segment indexes for (int b = 0; b < nParts; b++) segments[b] = brShapeFile.ReadInt32(); //add end point segments[nParts] = nPoints; if ((int)_ShapeType%10 == 3) { SharpMap.Geometries.MultiLineString mline = new SharpMap.Geometries.MultiLineString(); for (int LineID = 0; LineID < nParts; LineID++) { SharpMap.Geometries.LineString line = new SharpMap.Geometries.LineString(); for (int i = segments[LineID]; i < segments[LineID + 1]; i++) line.Vertices.Add(new SharpMap.Geometries.Point(brShapeFile.ReadDouble(), brShapeFile.ReadDouble())); mline.LineStrings.Add(line); } if (mline.LineStrings.Count == 1) return mline[0]; return mline; } else //(_ShapeType == ShapeType.Polygon etc...) { //First read all the rings List<SharpMap.Geometries.LinearRing> rings = new List<SharpMap.Geometries.LinearRing>(); for (int RingID = 0; RingID < nParts; RingID++) { SharpMap.Geometries.LinearRing ring = new SharpMap.Geometries.LinearRing(); for (int i = segments[RingID]; i < segments[RingID + 1]; i++) ring.Vertices.Add(new SharpMap.Geometries.Point(brShapeFile.ReadDouble(), brShapeFile.ReadDouble())); rings.Add(ring); } bool[] IsCounterClockWise = new bool[rings.Count]; int PolygonCount = 0; for (int i = 0; i < rings.Count;i++) { IsCounterClockWise[i] = rings[i].IsCCW(); if (!IsCounterClockWise[i]) PolygonCount++; } if (PolygonCount == 1) //We only have one polygon { SharpMap.Geometries.Polygon poly = new SharpMap.Geometries.Polygon(); poly.ExteriorRing = rings[0]; if (rings.Count > 1) for (int i = 1; i < rings.Count; i++) poly.InteriorRings.Add(rings[i]); return poly; } else { SharpMap.Geometries.MultiPolygon mpoly = new SharpMap.Geometries.MultiPolygon(); SharpMap.Geometries.Polygon poly = new SharpMap.Geometries.Polygon(); poly.ExteriorRing = rings[0]; for (int i = 1; i < rings.Count;i++) { if (!IsCounterClockWise[i]) { mpoly.Polygons.Add(poly); poly = new SharpMap.Geometries.Polygon(rings[i]); } else poly.InteriorRings.Add(rings[i]); } mpoly.Polygons.Add(poly); return mpoly; } } } else throw (new ApplicationException("Shapefile type " + _ShapeType.ToString() + " not supported")); }
private static void SharpMapMultiPointToSqlGeometry(SqlGeometryBuilder geomBuilder, SMMultiPoint multiPoint) { geomBuilder.BeginGeometry(OpenGisGeometryType.MultiPoint); for (int i = 0; i < multiPoint.NumGeometries; i++) { SharpMapPointToSqlGeometry(geomBuilder, multiPoint.Geometry(i)); } geomBuilder.EndGeometry(); }