Esempio n. 1
0
 public override bool Deactivate()
 {
     if (!isInSubCommand)
     {
         m_pDrawLineTrack.m_pDrawedPoints = null;
         m_pDrawLineTrack.m_pGeometryBag  = null;
         m_pActiveView.Refresh();
     }
     return(true);
 }
Esempio n. 2
0
        /// <summary>
        /// Zooms to a Location
        /// </summary>
        /// <param name="envelope"></param>
        private void ZoomTo(IEnvelope envelope)
        {
            try
            {
                IMxDocument mxDocument = null;
                ESRI.ArcGIS.Carto.IActiveView activeView = null;

                mxDocument        = ArcMap.Application.Document as IMxDocument;
                activeView        = (ESRI.ArcGIS.Carto.IActiveView)mxDocument.FocusMap;
                activeView.Extent = (IEnvelope)envelope;
                activeView.Refresh();
            }
            catch (Exception ex)
            {
                ShowError(ex);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Pans to a Location
        /// </summary>
        /// <param name="point"></param>
        private void PanTo(IPoint point)
        {
            try
            {
                IMxDocument mxDocument = null;
                ESRI.ArcGIS.Carto.IActiveView activeView = null;
                IEnvelope envelope = null;

                mxDocument = ArcMap.Application.Document as IMxDocument;
                activeView = (ESRI.ArcGIS.Carto.IActiveView)mxDocument.FocusMap;
                envelope   = activeView.Extent.Envelope;
                envelope.CenterAt(point.Envelope.LowerLeft);
                activeView.Extent = envelope;
                activeView.Refresh();
                return;
            }
            catch (Exception ex)
            {
                ShowError(ex);
            }
        }
Esempio n. 4
0
        //开始提取
        private void Deal()
        {
            IWorkspace    pWorkspace      = default(IWorkspace);
            string        sDesFeatClsName = null;
            IFeatureClass pDesFeatCls     = default(IFeatureClass);
            string        sInfo           = null;
            IFeatureLayer pFeatLayer      = default(IFeatureLayer);
            IFeatureClass pFeatureCls     = default(IFeatureClass);
            IGeometry     pDomainGeometry = default(IGeometry);
            int           ErrorCount      = 0;
            int           lFeatCount      = 0;
            bool          bIsCut          = false;

            if (this.ChkClip.Checked)
            {
                bIsCut = true;
                ////是否剪切
            }
            else
            {
                bIsCut = false;
            }
            int intChooseLayer = 0;

            ////印骅 20081121  获得多边形范围
            int iRegion = 0;

            if (_featureLayerRegion != null)
            {
                IFeatureCursor featureCursor = _featureLayerRegion.FeatureClass.Search(null, true);
                IFeature       feature       = featureCursor.NextFeature();
                while (feature != null)
                {
                    iRegion++;
                    if (Convert.ToBoolean(((DataGridViewCheckBoxCell)dgvRegionChoose.Rows[iRegion - 1].Cells["colChoose"]).Value))
                    {
                        intChooseLayer++;
                        IPolygon polygon = feature.Shape as IPolygon;
                        pDomainGeometry = polygon;

                        if (_map.LayerCount == 0)
                        {
                            MessageBoxEx.Show("没有加载图层或没有图层处于选中状态!请选中需要提取的图层!", "提示");
                            return;
                        }

                        int      iCount       = 0;
                        IDataset pTempDataset = default(IDataset);
                        //ploger = new WHFUtilities.clsLog();
                        //ploger.DBConnectionString = "Data Source=" + g_Sys.DbName + ";User ID=" + g_Sys.DbUser + " ;Password="******"当前操作层:" + pFeatLayer.Name;
                                this.lblInfo.Text = sInfo;
                                Application.DoEvents();
                                if (!string.IsNullOrEmpty(sDesFeatClsName.Trim()))
                                {
                                    if (pFeatureCls != null)
                                    {
                                        this.lblInfo.Text = sInfo + "正在获得目标要素类,请稍候....";
                                        lblInfo.Refresh();
                                        Application.DoEvents();
                                        if (sDesFeatClsName.Contains("."))
                                        {
                                            int dotIndex = 0;
                                            dotIndex        = sDesFeatClsName.IndexOf(".");
                                            sDesFeatClsName = sDesFeatClsName.Substring(dotIndex + 1, sDesFeatClsName.Length - dotIndex - 1);
                                        }

                                        //判断是否需要创建要素类 yh 15/4/09
                                        ClsCreateFeat.CheckFeatCls(bIsCut, pFeatLayer, ref lFeatCount, pDomainGeometry);
                                        if (lFeatCount != 0)
                                        {
                                            IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;
                                            IFields           pFields           = pFeatureCls.Fields;
                                            pDesFeatCls = ClsCreatAndGetDataset.CreatOrOpenFeatClsByName(ref pFeatureWorkspace, sDesFeatClsName, ref pFields, null, null);
                                            pWorkspace  = (IWorkspace)pFeatureWorkspace;
                                            //pFeatureCls.Fields = pFields;
                                        }
                                        if (pDesFeatCls != null)
                                        {
                                            //如果不剪切的,则使用该方法,需要剪切,则使用选择集,分位于内部要素和位于外部要素或直接使用pfeatcls搜索二遍
                                            //如果数据量大的话,搜索二遍的方法是不可行的
                                            ISpatialReference           pSpatialReference = null;
                                            Dictionary <string, string> pDicField         = null;

                                            iCount = (int)ClsCreateFeat.OutPutFeat(ref pDesFeatCls, ref pFeatureCls, strRegionLayer[i], pDomainGeometry, bIsCut, ref pSpatialReference, pDicField, ref this.lblInfo, sInfo);
                                            IFeatureLayer showFeatureLayer = new FeatureLayer();
                                            showFeatureLayer.FeatureClass = pDesFeatCls;
                                            ILayer showLayer = showFeatureLayer as ILayer;
                                            showLayer.Name = pDesFeatCls.AliasName;
                                            _map.AddLayer(showLayer);
                                            // 陈昉  2009-3-1  修改 修改原因 写日志
                                            if (iCount > 0)
                                            {
                                                pTempDataset = (IDataset)pFeatureCls;
                                                //ploger.log(System.Environment.MachineName, g_Sys.User.UserID, System.DateTime.Now.ToString(),
                                                //        "数据管理子系统", "WHFDataExtract", "快速提取" + pTempDataset.Name + "中" + iCount +
                                                //        "个要素到" + pDesFeatCls.AliasName, "目标:" + System.IO.Path.GetFileName(pWorkspace.PathName));
                                            }
                                        }
                                        else
                                        {
                                            ErrorCount = ErrorCount + 1;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    feature = featureCursor.NextFeature();
                }
                this.Refresh();
                Application.DoEvents();
                if (ErrorCount > 0)
                {
                    this.lblInfo.Text = "操作中有错误发生!";
                    //g_clsErrorHandle.DisplayInformation("操作中有错误发生!", false);
                    MessageBoxEx.Show("操作中有错误发生!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if (intChooseLayer == 0)
                {
                    MessageBoxEx.Show("没有选择提取要素,请选择!", "提示");
                    return;
                }
                //Member member = new Member();
                //member.AddLayerToMap(pWorkspace, _map);
                ESRI.ArcGIS.Carto.IActiveView activeView = _map as ESRI.ArcGIS.Carto.IActiveView;
                activeView.Refresh();
                this.lblInfo.Text = "操作完成!";
                MessageBoxEx.Show("操作完成!", "提示");
            }
        }
Esempio n. 5
0
        protected override void OnClick()
        {
            // Get the min/max zoom from user input
            int minzoom = 0;
            int maxzoom = 6;

            Ecotrust.Form1 form1 = new Ecotrust.Form1();
            if (form1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                minzoom = (int)form1.numericUpDown1.Value;
                maxzoom = (int)form1.numericUpDown2.Value;
            }
            else
            {
                return; //TODO
            }

            // Use the FolderBrowserDialog Class to choose export folder
            System.Windows.Forms.FolderBrowserDialog folderDialog = new System.Windows.Forms.FolderBrowserDialog();
            folderDialog.Description = "Select output folder for map tiles...";
            string exportDir = "";

            if (folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                // The returned string will be the full path, filename and file-extension for the chosen shapefile. Example: "C:\test\cities.shp"
                exportDir = folderDialog.SelectedPath;
                if (exportDir == "")
                {
                    return;  // TODO raise error
                }
            }
            else
            {
                return; //TODO
            }

            ESRI.ArcGIS.ArcMapUI.IMxDocument mxDocument = ArcMap.Application.Document as ESRI.ArcGIS.ArcMapUI.IMxDocument; // Dynamic Cast
            ESRI.ArcGIS.Carto.IActiveView    activeView = mxDocument.ActiveView;
            ESRI.ArcGIS.Carto.IMap           map        = activeView.FocusMap;

            ESRI.ArcGIS.Geometry.IEnvelope mapaoi = activeView.Extent;

            // Set up export object and tile pixel coordinates
            int tileSizeX = 256;
            int tileSizeY = 256;

            // set up exporter with transparent background
            ESRI.ArcGIS.Output.IExportPNG pngexport = new ESRI.ArcGIS.Output.ExportPNGClass();
            ESRI.ArcGIS.Display.IColor    tcolor    = new ESRI.ArcGIS.Display.RgbColorClass();
            // Warning: 254,254,254 will be set to transparent; don't use in any of map styling
            ((IRgbColor)tcolor).Red   = 254;
            ((IRgbColor)tcolor).Green = 254;
            ((IRgbColor)tcolor).Blue  = 254;
            ((ExportPNG)pngexport).BackgroundColor = tcolor;
            pngexport.TransparentColor             = tcolor;
            ESRI.ArcGIS.Output.IExport export = (ESRI.ArcGIS.Output.IExport)pngexport;

            ESRI.ArcGIS.esriSystem.tagRECT exportRECT;
            exportRECT.left   = 0;
            exportRECT.top    = 0;
            exportRECT.right  = tileSizeX;
            exportRECT.bottom = tileSizeY;
            ESRI.ArcGIS.Geometry.IEnvelope envelope = new ESRI.ArcGIS.Geometry.EnvelopeClass();
            envelope.PutCoords(exportRECT.left, exportRECT.top, exportRECT.right, exportRECT.bottom);
            export.PixelBounds = envelope;

            map.DelayDrawing(true);

            // Turn off all layers
            for (int i = 0; i < map.LayerCount; i++)
            {
                map.get_Layer(i).Visible = false;
            }

            // Calculate total number of tiles needed
            GlobalMercator mercator = new GlobalMercator();

            GlobalMercator.Coords tempmins;
            GlobalMercator.Coords tempmaxs;
            Double numTiles = 0;

            for (int tz = minzoom; tz <= maxzoom; tz++)
            {
                tempmins  = mercator.MetersToTile(mapaoi.XMin, mapaoi.YMin, tz);
                tempmaxs  = mercator.MetersToTile(mapaoi.XMax, mapaoi.YMax, tz);
                numTiles += ((tempmaxs.y - tempmins.y) + 1) * ((tempmaxs.x - tempmins.x) + 1);
            }
            numTiles *= map.LayerCount;

            ESRI.ArcGIS.esriSystem.IStatusBar statusBar = ArcMap.Application.StatusBar;
            statusBar.set_Message(0, "Rendering " + numTiles.ToString() + " tiles");

            // Create a CancelTracker
            ESRI.ArcGIS.esriSystem.ITrackCancel trackCancel = new ESRI.ArcGIS.Display.CancelTrackerClass();

            ESRI.ArcGIS.Framework.IProgressDialogFactory progressDialogFactory = new ESRI.ArcGIS.Framework.ProgressDialogFactoryClass();

            // Set the properties of the Step Progressor
            System.Int32 int32_hWnd = ArcMap.Application.hWnd;
            ESRI.ArcGIS.esriSystem.IStepProgressor stepProgressor = progressDialogFactory.Create(trackCancel, int32_hWnd);
            stepProgressor.MinRange  = 0;
            stepProgressor.MaxRange  = (int)numTiles;
            stepProgressor.StepValue = 1;
            stepProgressor.Message   = "Calculating " + numTiles.ToString() + " tiles";

            // Create the ProgressDialog. This automatically displays the dialog
            ESRI.ArcGIS.Framework.IProgressDialog2 progressDialog2 = (ESRI.ArcGIS.Framework.IProgressDialog2)stepProgressor; // Explict Cast

            // Set the properties of the ProgressDialog
            progressDialog2.CancelEnabled = true;
            progressDialog2.Description   = "Rendering " + numTiles.ToString() + " map tiles";
            progressDialog2.Title         = "Creating map tiles...";
            progressDialog2.Animation     = ESRI.ArcGIS.Framework.esriProgressAnimationTypes.esriDownloadFile;
            System.Boolean boolean_Continue = true;

            int tileCount = 0;

            for (int lyrnum = 0; lyrnum < map.LayerCount; lyrnum++)
            {
                // Turn on the layer of interest
                ESRI.ArcGIS.Carto.ILayer layer = map.get_Layer(lyrnum);
                layer.Visible = true;

                // Set extents
                //ESRI.ArcGIS.Geometry.IEnvelope layeraoi = layer.AreaOfInterest;
                ESRI.ArcGIS.Geometry.IEnvelope aoi = new ESRI.ArcGIS.Geometry.EnvelopeClass();

                // Create layer directory if it doesn't exist
                DirectoryInfo dir = new DirectoryInfo(exportDir + "\\" + layer.Name);
                if (!dir.Exists)
                {
                    dir.Create();
                }

                DateTime startTime = DateTime.Now;

                // Loop through zoom levels, rows, cols
                for (int tz = minzoom; tz <= maxzoom; tz++)
                {
                    GlobalMercator.Coords mins = mercator.MetersToTile(mapaoi.XMin, mapaoi.YMin, tz);
                    GlobalMercator.Coords maxs = mercator.MetersToTile(mapaoi.XMax, mapaoi.YMax, tz);

                    // Create zoom directory if it doesn't exist
                    DirectoryInfo dir2 = new DirectoryInfo(dir.FullName + "\\" + tz);
                    if (!dir2.Exists)
                    {
                        dir2.Create();
                    }

                    for (int tx = (int)mins.x; tx <= (int)maxs.x; tx++)
                    {
                        // Create X directory if it doesn't exist
                        DirectoryInfo dir3 = new DirectoryInfo(dir2.FullName + "\\" + tx);
                        if (!dir3.Exists)
                        {
                            dir3.Create();
                        }

                        for (int ty = (int)mins.y; ty <= (int)maxs.y; ty++)
                        {
                            // Flip y-axis for output tile name
                            int invertTy = (int)((Math.Pow(2, tz) - 1) - ty);

                            tileCount += 1;

                            // TODO Calculate time and set new message
                            // TimeSpan timeElapsed = TimeSpan.FromTicks(DateTime.Now.Subtract(startTime).Ticks); // * ((double)tileCount - (numTiles + 1)) / (numTiles + 1));
                            // double timeRemaining = (timeElapsed.TotalSeconds / (tileCount / numTiles)) - timeElapsed.TotalSeconds;
                            //(" + ((int)timeRemaining).ToString() +" remaining)";

                            stepProgressor.Message = layer.Name + "\\" + tz + "\\" + tx + "\\" + invertTy +
                                                     ".png (" + tileCount + " of " + numTiles + ")";


                            export.ExportFileName = dir3.FullName + "\\" + invertTy + ".png";

                            GlobalMercator.Bounds bnd = mercator.TileBounds(tx, ty, tz);
                            aoi.PutCoords(bnd.minx, bnd.miny, bnd.maxx, bnd.maxy);
                            aoi.SpatialReference = map.SpatialReference; // TODO aoi spatial reference == mercator?
                            // Use FullExtent instead of Extent to make the extent independent of the activeView ratio
                            activeView.FullExtent = aoi;

                            // Export
                            System.Int32 hDC = export.StartExporting();
                            activeView.Output(hDC, (System.Int16)export.Resolution, ref exportRECT, null, null); // Explicit Cast and 'ref' keyword needed
                            export.FinishExporting();
                            export.Cleanup();

                            stepProgressor.Position = tileCount;

                            //Check if the cancel button was pressed. If so, break out of row
                            boolean_Continue = trackCancel.Continue();
                            if (!boolean_Continue)
                            {
                                break;
                            }
                        }
                        //Check if the cancel button was pressed. If so, break out of col
                        boolean_Continue = trackCancel.Continue();
                        if (!boolean_Continue)
                        {
                            break;
                        }
                    }
                    //Check if the cancel button was pressed. If so, break out of layers
                    boolean_Continue = trackCancel.Continue();
                    if (!boolean_Continue)
                    {
                        break;
                    }

                    // Write log
                    using (System.IO.StreamWriter file = new System.IO.StreamWriter(exportDir + "\\log.txt", true))
                    {
                        file.WriteLine(layer.Name + ", zoom " + tz + ", numtiles " + tileCount + ":" +
                                       mins.x + " " + mins.y + " " + maxs.x + " " + maxs.y);
                    }
                }
                // Turn it off
                layer.Visible = false;
            }

            map.DelayDrawing(false);

            // Turn ON all layers
            for (int i = 0; i < map.LayerCount; i++)
            {
                map.get_Layer(i).Visible = true;
            }

            // restore extent
            activeView.FullExtent = mapaoi;
            activeView.Refresh();

            // Done
            trackCancel    = null;
            stepProgressor = null;
            progressDialog2.HideDialog();
            progressDialog2 = null;
        }