private void cmdIdentify_Click(object sender, EventArgs e) { if (m_MapWin.View.SelectedShapes.NumSelected == 0) { MapWinUtility.Logger.Msg(resMan.GetString("msgZeroShapesSelected.Text"), resMan.GetString("titleSelectShapes.Text")); return; } if (cmbIdentFrom.SelectedIndex == -1) { MapWinUtility.Logger.Msg(resMan.GetString("msgIdentFromNotSelected.Text"), resMan.GetString("titleSpecifyLayer.Text")); return; } if (cmbIdentWith.SelectedIndex == -1) { MapWinUtility.Logger.Msg(resMan.GetString("msgIdentWithNotSelected.Text"), resMan.GetString("titleSpecifyLayer.Text")); return; } if (m_MapWin.View.SelectedShapes.NumSelected == 0) { return; } // If it's a polygon layer we're identifying, call SelectByPolygon // If it's a grid, extract by mask // ...then, open that temporary file (not Add to Map, just "Open"), and summarize all data within that // file. int fromLayerHandle = -1; int maskLayerHandle = -1; if (cmbIdentFrom.SelectedIndex != -1) { string s = cmbIdentFrom.Items[cmbIdentFrom.SelectedIndex].ToString(); if (s.Contains(")")) { s = s.Substring(0, s.IndexOf(")")); } s = s.Replace("(", ""); if (!int.TryParse(s, out fromLayerHandle)) { return; } if (fromLayerHandle == -1) { return; } } if (cmbIdentWith.SelectedIndex != -1) { string s = cmbIdentWith.Items[cmbIdentWith.SelectedIndex].ToString(); if (s.Contains(")")) { s = s.Substring(0, s.IndexOf(")")); } s = s.Replace("(", ""); if (!int.TryParse(s, out maskLayerHandle)) { return; } if (maskLayerHandle == -1) { return; } } string TempPath = System.IO.Path.GetTempFileName(); System.IO.File.Delete(TempPath); MapWinGIS.Shape IdentifyBy; MapWinGIS.Shapefile sf = (MapWinGIS.Shapefile)m_MapWin.Layers[m_MapWin.Layers.CurrentLayer].GetObject(); if (m_MapWin.View.SelectedShapes.NumSelected > 1) { // Get 0 and 1 first to initialize IdentifyBy MapWinGIS.Shape shp1 = sf.get_Shape(m_MapWin.View.SelectedShapes[0].ShapeIndex); MapWinGIS.Shape shp2 = sf.get_Shape(m_MapWin.View.SelectedShapes[1].ShapeIndex); MapWinGeoProc.SpatialOperations.MergeShapes(ref shp1, ref shp2, out IdentifyBy); // ...now, the rest if (m_MapWin.View.SelectedShapes.NumSelected > 2) { for (int i = 2; i < m_MapWin.View.SelectedShapes.NumSelected; i++) { MapWinGIS.Shape tmpResultShp; MapWinGIS.Shape shp3 = sf.get_Shape(m_MapWin.View.SelectedShapes[i].ShapeIndex); MapWinGeoProc.SpatialOperations.MergeShapes(ref IdentifyBy, ref shp3, out tmpResultShp); IdentifyBy = tmpResultShp; tmpResultShp = null; } } // Ready to identify based on a single shape now regardless of multiple selected } else { IdentifyBy = sf.get_Shape(m_MapWin.View.SelectedShapes[0].ShapeIndex); } MapWindow.Interfaces.eLayerType layerType = m_MapWin.Layers[fromLayerHandle].LayerType; if (layerType == MapWindow.Interfaces.eLayerType.Grid) { // Grid TempPath = System.IO.Path.ChangeExtension(TempPath, ".bgd"); string fn = m_MapWin.Layers[fromLayerHandle].FileName; MapWinGeoProc.SpatialOperations.ClipGridWithPolygon(ref fn, ref IdentifyBy, ref TempPath, chbJustToExtents.Checked); MapWinGIS.Grid grd = new MapWinGIS.Grid(); grd.Open(TempPath, MapWinGIS.GridDataType.UnknownDataType, true, MapWinGIS.GridFileType.UseExtension, null); if (grd == null || grd.Header == null) { MapWinUtility.Logger.Msg(resMan.GetString("msgNoGridValues.Text"), resMan.GetString("titleNoGridValues.Text")); return; } m_Plugin.ActivateNoLoad(); m_Plugin.LoadLayerAlternate(layerType, m_MapWin.Layers[fromLayerHandle].Name); MapWinGIS.Extents exts = new MapWinGIS.Extents(); exts.SetBounds(grd.Header.XllCenter, grd.Header.YllCenter + grd.Header.NumberRows * grd.Header.dY, 0, grd.Header.XllCenter + grd.Header.NumberCols * grd.Header.dX, grd.Header.YllCenter, 0); m_MapWin.Layers.CurrentLayer = fromLayerHandle; m_Plugin.m_GridPropfrm.PopulateForm(!m_Plugin.m_HavePanel, grd, m_MapWin.Layers[fromLayerHandle].Name, exts, fromLayerHandle); this.Close(); } else { // SF if (!chbJustToExtents.Checked) { string fn = m_MapWin.Layers[fromLayerHandle].FileName; // 2/14/2008 jk the results ArrayList cannot be null, // when it was null it caused an exception in SpatialOperations.SelectWithPolygon method //System.Collections.ArrayList results = null; System.Collections.ArrayList results = new System.Collections.ArrayList(); MapWinGeoProc.SpatialOperations.SelectWithPolygon(ref fn, ref IdentifyBy, ref results); // Switch current layer over to the one we're identifying so that the shapes // can be reselected for visual effect m_MapWin.Layers.CurrentLayer = fromLayerHandle; m_Plugin.ActivateNoLoad(); m_Plugin.LoadLayerAlternate(layerType, m_MapWin.Layers[fromLayerHandle].Name); int[] iresults = new int[results.Count]; for (int i = 0; i < results.Count; i++) { iresults[i] = (int)results[i]; m_MapWin.View.SelectedShapes.AddByIndex((int)results[i], m_MapWin.View.SelectColor); } m_Plugin.m_shpFilePropfrm.PopulateForm(!m_Plugin.m_HavePanel, (MapWinGIS.Shapefile)m_MapWin.Layers[fromLayerHandle].GetObject(), iresults, m_MapWin.Layers[fromLayerHandle].Name, false); this.Close(); } else { object rslt = null; m_MapWin.Layers.CurrentLayer = fromLayerHandle; MapWinGIS.Shapefile DestSF = (MapWinGIS.Shapefile)m_MapWin.Layers[fromLayerHandle].GetObject(); DestSF.SelectShapes(IdentifyBy.Extents, 0.1, MapWinGIS.SelectMode.INTERSECTION, ref rslt); m_Plugin.ActivateNoLoad(); m_Plugin.LoadLayerAlternate(layerType, m_MapWin.Layers[fromLayerHandle].Name); int[] results = (int[])rslt; for (int i = 0; i < results.Length; i++) { m_MapWin.View.SelectedShapes.AddByIndex((int)results[i], m_MapWin.View.SelectColor); } m_Plugin.m_shpFilePropfrm.PopulateForm(!m_Plugin.m_HavePanel, DestSF, results, m_MapWin.Layers[fromLayerHandle].Name, false); this.Close(); } } }