/// <summary> /// Returns a MapWinGIS Multi-part PolyLine representing this multiLineString /// </summary> /// <returns>MapWinGIS Shape</returns> public static MapWinGIS.Shape mwShapeFromMultiLineString(MultiLineString MLS, MapWinGIS.ShpfileType sfType) { MapWinGIS.Shape mwShape = new MapWinGIS.Shape(); mwShape.Create(sfType); int prt = 0; // Part Index int pt = 0; // Point Index int numParts = MLS.NumGeometries; int maxpt; while (prt < numParts) { LineString LS = MLS.GeometryN[prt] as LineString; maxpt = LS.Coordinates.Count; mwShape.InsertPart(pt, ref prt); for (int I = 0; I < maxpt; I++) { MapWinGIS.Point mwPoint = new MapWinGIS.Point(); mwPoint.x = LS.Coordinates[I].X; mwPoint.y = LS.Coordinates[I].Y; bool result = mwShape.InsertPoint(mwPoint, ref pt); if (result == false) { throw new ApplicationException(mwShape.get_ErrorMsg(mwShape.LastErrorCode)); } pt++; } prt++; } return(mwShape); }
/// <summary> /// Converts a list of polylines into a single multi-part shape /// </summary> /// <param name="Polylines"></param> /// <returns></returns> public static MapWinGIS.Shape LineStrings_To_mwShape(List <LineString> Polylines) { MapWinGIS.Shape mwShape = new MapWinGIS.Shape(); bool res; res = mwShape.Create(MapWinGIS.ShpfileType.SHP_POLYLINEZ); if (res != true) { throw new ApplicationException(mwShape.get_ErrorMsg(mwShape.LastErrorCode)); } int idx = 0; for (int iPart = 0; iPart < Polylines.Count; iPart++) { LineString Part = Polylines[iPart]; // we only cal set_part if we have multiple polylines if (Polylines.Count > 0) { mwShape.set_Part(iPart, idx); } for (int iPoint = 0; iPoint < Part.Points.Count; iPoint++) { mwShape.InsertPoint(Part.Points[iPoint].To_mwPoint(), ref idx); idx++; } } return(mwShape); } // End LineStrings_To_mwShape
/// <summary> /// Draws selected bounds on map /// </summary> /// <param name="ext">Bounding box to search CS</param> public void DrawSelectedBounds(MapWinGIS.Extents ext) { this.RemoveLayer(m_handleBounds); MapWinGIS.Shapefile sf = new MapWinGIS.Shapefile(); if (sf.CreateNew("", MapWinGIS.ShpfileType.SHP_POLYGON)) { MapWinGIS.Shape shp = new MapWinGIS.Shape(); shp.Create(MapWinGIS.ShpfileType.SHP_POLYGON); this.InsertPart(shp, ext.xMin, ext.xMax, ext.yMin, ext.yMax); int index = 0; sf.EditInsertShape(shp, ref index); m_handleBounds = this.AddLayer(sf, true); MapWinGIS.ShapeDrawingOptions options = sf.DefaultDrawingOptions; MapWinGIS.Utils ut = new MapWinGIS.Utils(); options.FillColor = ut.ColorByName(MapWinGIS.tkMapColor.Orange); options.LineColor = ut.ColorByName(MapWinGIS.tkMapColor.Orange); options.LineWidth = 3; options.LineStipple = MapWinGIS.tkDashStyle.dsDash; options.FillTransparency = 100; } else { System.Diagnostics.Debug.Print("Failed to create in-memory shapefile"); } }
private void AddRectangle(double LeftmostX, double LowestY, double RightmostX, double HighestY) { MapWinGIS.Shape newPolygon = new MapWinGIS.Shape(); int partIndex = 0; newPolygon.Create(MapWinGIS.ShpfileType.SHP_POLYGON); newPolygon.InsertPart(0, ref partIndex); int shpIndex = 0; MapWinGIS.Point newPt = new MapWinGIS.Point(); newPt.x = LeftmostX; newPt.y = HighestY; newPt.Z = 0; newPolygon.InsertPoint(newPt, ref shpIndex); newPt = new MapWinGIS.Point(); newPt.x = RightmostX; newPt.y = HighestY; newPt.Z = 0; newPolygon.InsertPoint(newPt, ref shpIndex); newPt = new MapWinGIS.Point(); newPt.x = RightmostX; newPt.y = LowestY; newPt.Z = 0; newPolygon.InsertPoint(newPt, ref shpIndex); newPt = new MapWinGIS.Point(); newPt.x = LeftmostX; newPt.y = LowestY; newPt.Z = 0; newPolygon.InsertPoint(newPt, ref shpIndex); // Finalize -- add it. MapWinGIS.Shapefile sf = (MapWinGIS.Shapefile)g.MapWin.Layers[g.MapWin.Layers.CurrentLayer].GetObject(); if (!sf.EditingShapes || !sf.EditingTable) { sf.StartEditingShapes(true, null); } int addedShapes = sf.NumShapes; sf.EditInsertShape(newPolygon, ref addedShapes); g.CreateUndoPoint(); sf.StopEditingShapes(true, true, null); // Release memory used by point reallocations above GC.Collect(); // And show it: g.UpdateView(); g.MapWin.Plugins.BroadcastMessage("ShapefileEditor: Layer " + g.MapWin.Layers.CurrentLayer.ToString() + ": New Shape Added"); }
private void AddEllipse(double LeftmostX, double LowestY, double RightmostX, double HighestY) { MapWinGIS.Shape newPolygon = new MapWinGIS.Shape(); int partIndex = 0; newPolygon.Create(MapWinGIS.ShpfileType.SHP_POLYGON); newPolygon.InsertPart(0, ref partIndex); int shpIndex = 0; double t, a, b, tinc, centx, centy; a = RightmostX - LeftmostX; b = HighestY - LowestY; tinc = Math.PI * 2 / (a + b); centx = (LeftmostX + RightmostX) * .5; centy = (LowestY + HighestY) * .5; MapWinGIS.Point newPt = new MapWinGIS.Point(); newPt.x = centx + a; newPt.y = centy; newPt.Z = 0; newPolygon.InsertPoint(newPt, ref shpIndex); for (t = 0; t < Math.PI * 2; t += tinc) { MapWinGIS.Point nextPt = new MapWinGIS.Point(); nextPt.x = centx + a * Math.Cos(t); nextPt.y = centy - b * Math.Sin(t); nextPt.Z = 0; newPolygon.InsertPoint(nextPt, ref shpIndex); } // Finalize -- add it. MapWinGIS.Shapefile sf = (MapWinGIS.Shapefile)g.MapWin.Layers[g.MapWin.Layers.CurrentLayer].GetObject(); if (!sf.EditingShapes || !sf.EditingTable) { sf.StartEditingShapes(true, null); } int addedShapes = sf.NumShapes; sf.EditInsertShape(newPolygon, ref addedShapes); g.CreateUndoPoint(); sf.StopEditingShapes(true, true, null); // And show it: g.UpdateView(); g.MapWin.Plugins.BroadcastMessage("ShapefileEditor: Layer " + g.MapWin.Layers.CurrentLayer.ToString() + ": New Shape Added"); }
private void AddRegularPolygon(int sides, double sidelength, double centroidX, double centroidY) { double pi = 3.1415926535897932384626433832795; double apothem = sidelength / (2 * Math.Tan(pi / sides)); double radius = sidelength / (2 * Math.Sin(pi / sides)); MapWinGIS.Shape newPolygon = new MapWinGIS.Shape(); int partIndex = 0; newPolygon.Create(MapWinGIS.ShpfileType.SHP_POLYGON); newPolygon.InsertPart(0, ref partIndex); double i = 0; int shpIndex = 0; // Approximate the polygon with n line segments double increment = ((2 * pi) / sides); for (; i <= 2 * pi; i += increment, shpIndex++) { MapWinGIS.Point newPt = new MapWinGIS.Point(); newPt.x = (radius * Math.Cos(i) + centroidX); newPt.y = (radius * Math.Sin(i) + centroidY); newPt.Z = 0; newPolygon.InsertPoint(newPt, ref shpIndex); } // Finalize -- add it. MapWinGIS.Shapefile sf = (MapWinGIS.Shapefile)g.MapWin.Layers[g.MapWin.Layers.CurrentLayer].GetObject(); if (!sf.EditingShapes || !sf.EditingTable) { sf.StartEditingShapes(true, null); } int addedShapes = sf.NumShapes; sf.EditInsertShape(newPolygon, ref addedShapes); g.CreateUndoPoint(); sf.StopEditingShapes(true, true, null); // And show it: g.UpdateView(); g.MapWin.Plugins.BroadcastMessage("ShapefileEditor: Layer " + g.MapWin.Layers.CurrentLayer.ToString() + ": New Shape Added"); }
/// <summary> /// Draws coordinate system at map /// </summary> /// <param name="cs">The territory (coordinate system or country) to draw</param> public void DrawCoordinateSystem(Territory cs) { this.RemoveLayer(m_handleCS); MapWinGIS.Shapefile sf = new MapWinGIS.Shapefile(); sf.CreateNew("", MapWinGIS.ShpfileType.SHP_POLYGON); MapWinGIS.Shape shp = new MapWinGIS.Shape(); shp.Create(MapWinGIS.ShpfileType.SHP_POLYGON); double xMax = cs.Right; double xMin = cs.Left; double yMin = cs.Bottom; double yMax = cs.Top; if (xMax < xMin) { InsertPart(shp, -180, xMax, yMin, yMax); InsertPart(shp, xMin, 180, yMin, yMax); System.Diagnostics.Debug.Print(shp.NumParts.ToString()); } else { InsertPart(shp, xMin, xMax, yMin, yMax); } int shpIndex = sf.NumShapes; sf.EditInsertShape(shp, ref shpIndex); m_handleCS = this.AddLayer(sf, true); MapWinGIS.Utils utils = new MapWinGIS.Utils(); sf.DefaultDrawingOptions.FillColor = utils.ColorByName(MapWinGIS.tkMapColor.LightBlue); sf.DefaultDrawingOptions.FillTransparency = 120; sf.DefaultDrawingOptions.LineColor = utils.ColorByName(MapWinGIS.tkMapColor.Blue); sf.DefaultDrawingOptions.LineStipple = MapWinGIS.tkDashStyle.dsDash; sf.DefaultDrawingOptions.LineWidth = 2; this.Redraw(); }
/// <summary> /// Converts a list of 3d-points to a point shapefile with z-value field. /// This function creates a new shapefile. The shapefile has two fields: /// a 'MWShapeId' field and a field which contains the z-value. /// </summary> /// <param name="ShpFileName">Name of the resulting point shapefile</param> /// <param name="ZFieldName">Name of the z-field in the shapefile</param> public void ToShapefile(string ShpFileName, string ZFieldName) { MapWinGIS.Shapefile newSF = new MapWinGIS.Shapefile(); try { Hashtable FieldIndices = new Hashtable(); MapWinGIS.ShpfileType sftype; sftype = MapWinGIS.ShpfileType.SHP_POINT; int fldIdx = 0; // if shapefile exists - open it and clear all shapes if (System.IO.File.Exists(ShpFileName)) { newSF.Open(ShpFileName, null); newSF.StartEditingShapes(true, null); newSF.EditClear(); } else //else, create a new shapefile { if (!newSF.CreateNew(ShpFileName, sftype)) { throw new InvalidOperationException ("Error creating shapefile " + newSF.get_ErrorMsg(newSF.LastErrorCode)); } newSF.StartEditingShapes(true, null); } //check existing fields: for (int i = 0; i < newSF.NumFields; ++i) { MapWinGIS.Field fl = newSF.get_Field(i); if (fl.Name == "MWShapeID") { FieldIndices.Add("MWShapeID", i); } if (fl.Name == ZFieldName) { FieldIndices.Add(ZFieldName, i); } } //Add the fields: if (!FieldIndices.ContainsKey("MWShapeID")) { //First an ID field MapWinGIS.Field idFld = new MapWinGIS.Field(); idFld.Name = "MWShapeID"; idFld.Type = MapWinGIS.FieldType.INTEGER_FIELD; fldIdx = newSF.NumFields; if (newSF.EditInsertField(idFld, ref fldIdx, null) == false) { throw new InvalidOperationException("error inserting field " + newSF.get_ErrorMsg(newSF.LastErrorCode)); } FieldIndices.Add("MWShapeID", fldIdx); } if (!FieldIndices.ContainsKey(ZFieldName)) { //Second add a Z-field MapWinGIS.Field zFld = new MapWinGIS.Field(); zFld.Name = "Z"; zFld.Type = MapWinGIS.FieldType.DOUBLE_FIELD; fldIdx = newSF.NumFields; if (newSF.EditInsertField(zFld, ref fldIdx, null) == false) { throw new InvalidOperationException("error inserting field " + newSF.get_ErrorMsg(newSF.LastErrorCode)); } FieldIndices.Add("Z", fldIdx); } foreach (ICoordinate pt in _points) { //first, add a point shape (geometry) MapWinGIS.Shape newShp = new MapWinGIS.Shape(); newShp.Create(MapWinGIS.ShpfileType.SHP_POINT); MapWinGIS.Point newPt = new MapWinGIS.Point(); newPt.x = pt.X; newPt.y = pt.Y; int ptIdx = 0; newShp.InsertPoint(newPt, ref ptIdx); int shpIdx = newSF.NumShapes; newSF.EditInsertShape(newShp, ref shpIdx); //second add the z-value newSF.EditCellValue(fldIdx, shpIdx, pt.Z); } } finally { //finally stop editing and close the shapefile newSF.StopEditingShapes(true, true, null); if (newSF.Close() == false) { throw new InvalidOperationException("error closing shapefile " + newSF.get_ErrorMsg(newSF.LastErrorCode)); } } }
/// <summary> /// This creates a new shapefile that has Z values and follows along the same line segments. /// The boundaries for grid cells are marked with vertices and the segment is given a Z value /// that corresponds to the grid elevation it intersects. /// </summary> /// <param name="mwElevGrid">A MapWinGIS Grid that contains the elevations.</param> /// <param name="mwPolyLine">A MapWinGIS Shapefile that shows the pathways of the cross sections in the X-Y direction.</param> /// <param name="OutFileName">A string containing the full path of the desired output shapefile. The extension should be *.shp</param> /// <param name="CrossSectionType">Clarifies the type of output. default = PolyLineWithZ</param> /// <param name="ICallBack">A MapWinGIS.ICallback for progress messages. [Optional]</param> /// <remarks>This function throws Argument or Application exceptions on errors, so it's recommended that coders enclose it in a try catch block.</remarks> public static void GetCrossSection(MapWinGIS.Grid mwElevGrid, MapWinGIS.Shapefile mwPolyLine, string OutFileName, CrossSectionTypes CrossSectionType, MapWinGIS.ICallback ICallBack) { MapWinUtility.Logger.Dbg("GetCrossSection(mwElevGrid: " + Macro.ParamName(mwElevGrid) + ",\n" + " mwPolyLine: " + Macro.ParamName(mwPolyLine) + ",\n" + " OutFileName: " + OutFileName + ",\n" + " CrossSectionType: " + CrossSectionType.ToString() + ",\n" + " ICallback)"); bool res; int Prog = 0; int OldProg = 0; double dS, dX, dY, XllCenter, YllCenter; int NumRows, NumCols, ElevField, IDField; ElevField = 1; IDField = 0; // Test to be sure that the elevation grid and shapefile are not null if (mwElevGrid == null) { MapWinUtility.Logger.Dbg("Argument Exception: Elevation grid mwElevGrid can't be null."); throw new ArgumentException("Elevation grid mwElevGrid can't be null."); } if (mwPolyLine == null) { MapWinUtility.Logger.Dbg("Argument Exception: The shapefile of input cross sections mwPolyLine can't be null."); throw new ArgumentException("The shapefile of input cross sections mwPolyLine can't be null."); } // Clear any existing shapefile output filenames that might cause problems if they exist. string fn; if (System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(OutFileName)) == false) { System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(OutFileName)); } if (System.IO.File.Exists(OutFileName)) { System.IO.File.Delete(OutFileName); } fn = System.IO.Path.ChangeExtension(OutFileName, ".dbf"); if (System.IO.File.Exists(fn)) { System.IO.File.Delete(fn); } fn = System.IO.Path.ChangeExtension(OutFileName, ".shx"); if (System.IO.File.Exists(fn)) { System.IO.File.Delete(fn); } fn = System.IO.Path.ChangeExtension(OutFileName, ".prj"); if (System.IO.File.Exists(fn)) { System.IO.File.Delete(fn); } // Since we are given the lower left coordinate, just make sure dX and dY are positive dX = Math.Abs(mwElevGrid.Header.dX); if (dX == 0) { throw new ApplicationException("mwElevGrid.Header.dX cannot be 0."); } dY = Math.Abs(mwElevGrid.Header.dY); if (dY == 0) { throw new ApplicationException("mwElevGrid.Header.dY cannot be 0."); } // Determine the stepping distance from the grid coordintes dS = dX / 2; if (dY < dX) { dS = dY / 2; } XllCenter = mwElevGrid.Header.XllCenter; YllCenter = mwElevGrid.Header.YllCenter; NumRows = mwElevGrid.Header.NumberRows; NumCols = mwElevGrid.Header.NumberCols; // Test for intersection between the entire shapefile and the grid double left, right, top, bottom; left = XllCenter - dX / 2; right = XllCenter + NumCols * dX - dX / 2; bottom = YllCenter - dY / 2; top = YllCenter + NumRows * dY - dY / 2; MapWinGeoProc.Topology2D.Envelope gExt = new MapWinGeoProc.Topology2D.Envelope(left, right, bottom, top); MapWinGeoProc.Topology2D.Envelope pExt = new MapWinGeoProc.Topology2D.Envelope(mwPolyLine.Extents); if (gExt.Intersects(pExt) == false) { MapWinUtility.Logger.Dbg("Application Exception: The shapefile doesn't overlap the grid, so no cross sections were found."); throw new ApplicationException("The shapefile doesn't overlap the grid, so no cross sections were found."); } // Setup the output shapefile and the basic shape objects MapWinGIS.Shape mwShape; MapWinGIS.Shapefile sfOut = new MapWinGIS.Shapefile(); sfOut.Projection = mwPolyLine.Projection; if (CrossSectionType == CrossSectionTypes.PointsWithZAndElevField) { res = sfOut.CreateNew(OutFileName, MapWinGIS.ShpfileType.SHP_POINTZ); if (res != true) { MapWinUtility.Logger.Dbg("Application Exception: " + sfOut.get_ErrorMsg(sfOut.LastErrorCode)); throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } res = sfOut.StartEditingShapes(true, ICallBack); if (res != true) { MapWinUtility.Logger.Dbg("Application Exception: " + sfOut.get_ErrorMsg(sfOut.LastErrorCode)); throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } MapWinGIS.Field ID = new MapWinGIS.Field(); ID.Name = "ID"; ID.Type = MapWinGIS.FieldType.INTEGER_FIELD; res = sfOut.EditInsertField(ID, ref IDField, ICallBack); if (res != true) { MapWinUtility.Logger.Dbg("Application Exception: " + sfOut.get_ErrorMsg(sfOut.LastErrorCode)); throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } MapWinGIS.Field Elev = new MapWinGIS.Field(); Elev.Name = "Elevation"; Elev.Type = MapWinGIS.FieldType.DOUBLE_FIELD; res = sfOut.EditInsertField(Elev, ref ElevField, ICallBack); if (res != true) { MapWinUtility.Logger.Dbg("Application Exception: " + sfOut.get_ErrorMsg(sfOut.LastErrorCode)); throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } } else { res = sfOut.CreateNew(OutFileName, MapWinGIS.ShpfileType.SHP_POLYLINEZ); if (res != true) { MapWinUtility.Logger.Dbg("Application Exception: " + sfOut.get_ErrorMsg(sfOut.LastErrorCode)); throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } res = sfOut.StartEditingShapes(true, ICallBack); if (res != true) { MapWinUtility.Logger.Dbg("Application Exception: " + sfOut.get_ErrorMsg(sfOut.LastErrorCode)); throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } MapWinGIS.Field ID = new MapWinGIS.Field(); ID.Name = "ID"; ID.Type = MapWinGIS.FieldType.INTEGER_FIELD; res = sfOut.EditInsertField(ID, ref IDField, ICallBack); if (res != true) { MapWinUtility.Logger.Dbg("Application Exception: " + sfOut.get_ErrorMsg(sfOut.LastErrorCode)); throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } } MapWinGIS.Shape mwOutShape; // Loop through all the shapes in the polyline shapefile int shIndx = -1; for (int shp = 0; shp < mwPolyLine.NumShapes; shp++) { mwShape = mwPolyLine.get_Shape(shp); // By turning multi-part polylines into multiple linestrings, we avoid the annoying multi-part logic MultiLineString MLS = GeometryFactory.CreateMultiLineString(mwShape); for (int ls = 0; ls < MLS.NumGeometries; ls++) { LineString lsSource = MLS.GeometryN[ls] as LineString; for (int pt = 0; pt < lsSource.Coordinates.Count - 1; pt++) { Coordinate start = lsSource.Coordinates[pt]; Coordinate end = lsSource.Coordinates[pt + 1]; // Crop the parts of each segment that do not overlap with the grid. if (start.X < left) { if (end.X < left) { // this segment is outside the grid continue; } // crop this segment to only the portion on the grid start.X = left; } if (end.X < left) { // crop this segment to only the portion on the grid end.X = left; } if (start.X > right) { if (end.X > right) { // this segment is outside the grid continue; } // crop to grid start.X = right; } if (end.X > right) { // crop to the grid end.X = right; } double length = Math.Sqrt((end.X - start.X) * (end.X - start.X) + (end.Y - start.Y) * (end.Y - start.Y)); int NumSteps = (int)Math.Floor(length / dS); double segDx = (end.X - start.X) / NumSteps; double segDy = (end.Y - start.Y) / NumSteps; mwOutShape = new MapWinGIS.Shape(); if (CrossSectionType == CrossSectionTypes.PolyLineWithZ) { mwOutShape.Create(MapWinGIS.ShpfileType.SHP_POLYLINEZ); } // step by dS and get the grid value at that point at each step int p = 0; for (int I = 0; I < NumSteps; I++) { int row, col; object Elev; double X = start.X + segDx * I; double Y = start.Y + segDy * I; mwElevGrid.ProjToCell(X, Y, out col, out row); Elev = mwElevGrid.get_Value(col, row); MapWinGIS.Point pnt = new MapWinGIS.Point(); pnt.x = X; pnt.y = Y; pnt.Z = (double)Elev; if (CrossSectionType == CrossSectionTypes.PointsWithZAndElevField) { p = 0; mwOutShape = new MapWinGIS.Shape(); mwOutShape.Create(MapWinGIS.ShpfileType.SHP_POINTZ); res = mwOutShape.InsertPoint(pnt, ref p); if (res == false) { throw new ApplicationException(mwOutShape.get_ErrorMsg(mwOutShape.LastErrorCode)); } res = sfOut.EditInsertShape(mwOutShape, ref shIndx); if (res != true) { throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } res = sfOut.EditCellValue(IDField, shIndx, shIndx); if (res != true) { throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } res = sfOut.EditCellValue(ElevField, shIndx, Elev); if (res != true) { throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } shIndx++; } else { res = mwOutShape.InsertPoint(pnt, ref p); p++; if (res == false) { throw new ApplicationException(mwOutShape.get_ErrorMsg(mwOutShape.LastErrorCode)); } } } if (CrossSectionType == CrossSectionTypes.PolyLineWithZ) { if (mwOutShape.numPoints > 0) { res = sfOut.EditInsertShape(mwOutShape, ref shIndx); if (res != true) { throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } res = sfOut.EditCellValue(IDField, shIndx, shIndx); if (res != true) { throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } shIndx++; } } } } Prog = Convert.ToInt32(shp * 100 / mwPolyLine.NumShapes); if (Prog > OldProg) { MapWinUtility.Logger.Progress("Evaluating Cross Section..." + Prog.ToString() + "% Complete.", Prog, OldProg); OldProg = Prog; } } res = sfOut.StopEditingShapes(true, true, ICallBack); if (res != true) { MapWinUtility.Logger.Dbg("Application Exception: " + sfOut.get_ErrorMsg(sfOut.LastErrorCode)); throw new ApplicationException(sfOut.get_ErrorMsg(sfOut.LastErrorCode)); } }
private void Map(Round t) { AxMapWinGIS.AxMap map = new AxMapWinGIS.AxMap(); map.Width = 380; map.Height = 380; host.Child = map; map.Show(); map.CreateControl(); map.ShowZoomBar = false; map.ShowCoordinates = MapWinGIS.tkCoordinatesDisplay.cdmNone; map.CursorMode = MapWinGIS.tkCursorMode.cmNone; MapWinGIS.Shapefile shapeFileMap = new MapWinGIS.Shapefile(); shapeFileMap.Open(@"D:\Projets\TheManager\TheManager_GUI\bin\Debug\gis\world\World_Countries.shp", null); map.AddLayer(shapeFileMap, true); ILocalisation localisation = Session.Instance.Game.kernel.LocalisationTournament(t.Tournament); double logoSize = 30.0; if (localisation as Country != null) { map.ZoomToShape(0, (localisation as Country).ShapeNumber); } else { if (localisation.Name() == "Europe") { map.ZoomToShape(0, 68 /*12 101*/); map.CurrentZoom = 4; } else if (localisation.Name() == "Africa") { map.ZoomToShape(0, 40); map.CurrentZoom = 3; } logoSize = 15.0; } foreach (Club c in t.clubs) { CityClub cc = c as CityClub; if (cc != null) { double projX = -1; double projY = -1; map.DegreesToProj(cc.city.Position.Longitude, cc.city.Position.Latitude, ref projX, ref projY); MapWinGIS.Image img = new MapWinGIS.Image(); img.Open(Utils.Logo(c)); MapWinGIS.Shapefile sf = new MapWinGIS.Shapefile(); sf.CreateNew("", MapWinGIS.ShpfileType.SHP_POINT); sf.DefaultDrawingOptions.AlignPictureByBottom = false; sf.DefaultDrawingOptions.PointType = MapWinGIS.tkPointSymbolType.ptSymbolPicture; sf.DefaultDrawingOptions.Picture = img; sf.DefaultDrawingOptions.PictureScaleX = Math.Round(logoSize / img.OriginalWidth, 2); sf.DefaultDrawingOptions.PictureScaleY = Math.Round(logoSize / img.OriginalHeight, 2); sf.CollisionMode = MapWinGIS.tkCollisionMode.AllowCollisions; MapWinGIS.Shape shp = new MapWinGIS.Shape(); shp.Create(MapWinGIS.ShpfileType.SHP_POINT); shp.AddPoint(projX, projY); sf.EditAddShape(shp); map.AddLayer(sf, true); } } if (_competition.rounds[_indexTour].clubs.Count > 0 && _competition.rounds[_indexTour].clubs[0] as NationalTeam != null) { shapeFileMap.StartEditingTable(); int fieldIndex = shapeFileMap.EditAddField("Qualification", MapWinGIS.FieldType.INTEGER_FIELD, 1, 1); shapeFileMap.DefaultDrawingOptions.FillType = MapWinGIS.tkFillType.ftStandard; for (int i = 0; i < shapeFileMap.NumShapes; i++) { shapeFileMap.EditCellValue(fieldIndex, i, 0); } Dictionary <NationalTeam, int> clubCourses = new Dictionary <NationalTeam, int>(); for (int i = 0; i < _competition.rounds.Count; i++) { Round round = _competition.rounds[i]; foreach (Club c in round.clubs) { NationalTeam nt = c as NationalTeam; if (!clubCourses.ContainsKey(nt)) { clubCourses.Add(nt, 1); } clubCourses[nt] = i + 1; } } foreach (KeyValuePair <NationalTeam, int> kvp in clubCourses) { shapeFileMap.EditCellValue(fieldIndex, kvp.Key.country.ShapeNumber, kvp.Value); } shapeFileMap.Categories.Generate(fieldIndex, MapWinGIS.tkClassificationType.ctUniqueValues, _competition.rounds.Count + 1); shapeFileMap.Categories.ApplyExpressions(); MapWinGIS.ColorScheme colorScheme = new MapWinGIS.ColorScheme(); colorScheme.SetColors2(MapWinGIS.tkMapColor.AliceBlue, MapWinGIS.tkMapColor.DarkBlue); shapeFileMap.Categories.ApplyColorScheme(MapWinGIS.tkColorSchemeType.ctSchemeGraduated, colorScheme); } map.Redraw(); }
private void Map() { AxMapWinGIS.AxMap map = new AxMapWinGIS.AxMap(); map.Width = 450; map.MouseDownEvent += Map_MouseDownEvent; map.Height = 600; host.Child = map; map.Show(); map.ShapeHighlighted += Map_ShapeHighlighted; map.CreateControl(); map.ShowZoomBar = false; map.ShowCoordinates = MapWinGIS.tkCoordinatesDisplay.cdmNone; map.CursorMode = MapWinGIS.tkCursorMode.cmIdentify; MapWinGIS.Shapefile shapeFileMap = new MapWinGIS.Shapefile(); shapeFileMap.Open(@"D:\Projets\TheManager\TheManager_GUI\bin\Debug\gis\world\World_Countries.shp", null); shapeFileMap.Identifiable = false; map.AddLayer(shapeFileMap, true); map.ZoomToShape(0, 77); MapWinGIS.Shapefile sf = new MapWinGIS.Shapefile(); sf.Identifiable = true; sf.CreateNew("", MapWinGIS.ShpfileType.SHP_POINT); sf.DefaultDrawingOptions.AlignPictureByBottom = false; sf.DefaultDrawingOptions.PointType = MapWinGIS.tkPointSymbolType.ptSymbolStandard; sf.CollisionMode = MapWinGIS.tkCollisionMode.AllowCollisions; List <City> takenCities = new List <City>(); foreach (Journalist journalist in _media.journalists) { double projX = -1; double projY = -1; map.DegreesToProj(journalist.baseCity.Position.Longitude, journalist.baseCity.Position.Latitude, ref projX, ref projY); if (takenCities.Contains(journalist.baseCity)) { projY += Session.Instance.Random(3, 12) / 10.0; } MapWinGIS.Shape shp = new MapWinGIS.Shape(); shp.Create(MapWinGIS.ShpfileType.SHP_POINT); shp.AddPoint(projX, projY); _indexOrders.Add(sf.EditAddShape(shp)); takenCities.Add(journalist.baseCity); } int layer = map.AddLayer(sf, true); foreach (Journalist journalist in _media.journalists) { int handle = map.NewDrawing(MapWinGIS.tkDrawReferenceList.dlScreenReferencedList); double pixX = -1; double pixY = -1; map.DegreesToPixel(journalist.baseCity.Position.Longitude, journalist.baseCity.Position.Latitude, ref pixX, ref pixY); float maxDistance = -1; foreach (Match m in journalist.CommentedGames) { float dist = Utils.Distance(m.home.stadium.city, journalist.baseCity); if (dist > maxDistance) { maxDistance = dist; } } map.DrawCircleEx(handle, pixX, pixY, maxDistance / 2, 2883, true, 25); } map.ShapeIdentified += Map_ShapeIdentified; map.Redraw(); }