public static void FillCache(IPoint pPoint, IEnvelope pEnvlope) { IGeoFeatureLayer pGeoLyr; IEnumLayer pEnumLyr; IEnumLayer pTemEnumLyr; IMap pMap; UIDClass pUID = new UIDClass(); IMap pNewMap; pNewMap = new MapClass(); //IEnvelope pEnvlope=new EnvelopeClass(); pUID.Value = "{E156D7E5-22AF-11D3-9F99-00C04F6BC78E}"; pMap = ClsDeclare.g_pMap; pEnumLyr = pMap.get_Layers(pUID, true); pGeoLyr = pEnumLyr.Next() as IGeoFeatureLayer; while (pGeoLyr != null) { if (pGeoLyr.FeatureClass != null) { pNewMap.AddLayer(pGeoLyr); } pGeoLyr = pEnumLyr.Next() as IGeoFeatureLayer; } pTemEnumLyr = pNewMap.get_Layers(null, false); if (pNewMap.LayerCount != 0) { m_pFeatureCache.AddLayers(pTemEnumLyr, pEnvlope); } }
/// <summary> /// 将MapControl和PageLayoutControl通过同一个焦点Map进行绑定 /// </summary> /// <param name="activateMapFirst">如果MapControl作为默认活动控件设置为True</param> public void BindControls(bool activateMapFirst) { if (m_pageLayoutControl == null || m_mapControl == null) { throw new Exception("ControlsSynchronizer::BindControls:\r\nMapControl或PageLayoutControl没有初始化!"); } if (m_mapControl.Map.LayerCount == 0) { //产生一个Map对象 IMap newMap = new MapClass(); newMap.Name = "地图"; //产生一个地图容器IMaps对象 IMaps maps = new Maps(); maps.Add(newMap); m_pageLayoutControl.PageLayout.ReplaceMaps(maps); m_mapControl.Map = newMap; if (activateMapFirst) { this.ActivateMap(); } else { this.ActivatePageLayout(); } } else { //产生一个Map对象 IMap newMap = new MapClass(); newMap.Name = "地图"; for (int i = 0; i < m_mapControl.Map.LayerCount; i++) { newMap.AddLayer(m_mapControl.Map.get_Layer(i)); } //m_mapControl.Map = null; //产生一个地图容器IMaps对象 IMaps maps = new Maps(); maps.Add(newMap); m_pageLayoutControl.PageLayout.ReplaceMaps(maps); m_mapControl.Map = newMap; if (activateMapFirst) { this.ActivateMap(); } else { this.ActivatePageLayout(); } } }
/// <summary> /// Creates the layers. /// </summary> /// <returns></returns> private IEnumLayer CreateLayers() { IMap map = new MapClass(); foreach (var testClass in base.GetTestClasses()) { IFeatureLayer layer = new FeatureLayerClass(); layer.FeatureClass = testClass; layer.Name = testClass.AliasName; map.AddLayer(layer); } return(map.Layers[null, true]); }
public void Create() { IMap pMap = null; IFeatureLayer pFeatureLayer = null; IRasterLayer pRasterLayer = null; try { if (_SourceFile.EndsWith(".shp")) { pMap = new MapClass(); pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = EngineAPI.OpenFeatureClass(_SourceFile); pMap.AddLayer(pFeatureLayer); _ExportMan.ExportMapExtent(pMap as IActiveView, new Size(512, 0), _OutFile, 300); } else { pMap = new MapClass(); pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromFilePath(_SourceFile); pMap.AddLayer(pRasterLayer); IRasterProps pRasterProps = pRasterLayer.Raster as IRasterProps; int width = pRasterProps.Width / 10; _ExportMan.ExportMapExtent(pMap as IActiveView, new Size(width, 0), _OutFile, 300); } } catch (Exception ex) { Log.WriteLog(typeof(ProductQuickView), ex); } finally { if (pMap != null) { Marshal.ReleaseComObject(pMap); } if (pFeatureLayer != null) { Marshal.ReleaseComObject(pFeatureLayer); } if (pRasterLayer != null) { Marshal.ReleaseComObject(pRasterLayer); } } }
public static string CreateJPEGFromActiveView(IRaster pRaster,IEnvelope pEnv,string outurl, System.String pathFileName) { //创建rasterlayer IRasterLayer pRasterLayer = new RasterLayerClass(); //获取mapServer中所有的图层 IMap pMap = new MapClass(); pRasterLayer.CreateFromRaster(pRaster); pMap.AddLayer(pRasterLayer as ILayer); IActiveView activeView = pMap as IActiveView; activeView.Extent = pEnv; //parameter check if (activeView == null) { return null; } string imageName = System.DateTime.Now.ToString().Replace("/", "").Replace(":", "").Replace(" ", "") + ".png"; pathFileName = System.IO.Path.Combine(pathFileName, imageName); ESRI.ArcGIS.Output.IExport export = new ESRI.ArcGIS.Output.ExportPNGClass(); export.ExportFileName = pathFileName; // Microsoft Windows default DPI resolution ESRI.ArcGIS.esriSystem.tagRECT exportRECT = new ESRI.ArcGIS.esriSystem.tagRECT(); exportRECT.top = 0; exportRECT.left = 0; exportRECT.right = 800; exportRECT.bottom = 600; ESRI.ArcGIS.Geometry.IEnvelope envelope = new ESRI.ArcGIS.Geometry.EnvelopeClass(); envelope.PutCoords(exportRECT.top,exportRECT.left,exportRECT.right,exportRECT.bottom); export.PixelBounds = envelope; System.Int32 hDC = export.StartExporting(); activeView.Output(hDC, (System.Int16)export.Resolution, ref exportRECT, null, null); // Finish writing the export file and cleanup any intermediate files export.FinishExporting(); export.Cleanup(); return outurl + "/" + imageName; }
/// <summary> /// Adds the item to ListBox. /// </summary> /// <param name="file">The file.</param> //private static void AddItemToListBox(RecentFile file) //{ // foreach (ImageListBoxItem item in EnviVars.instance.RecentFilesCtrl.Items) // { // RecentFile file2 = item.Value as RecentFile; // if ((file2 != null) && (file2.FullPath == file.FullPath)) // { // EnviVars.instance.RecentFilesCtrl.Items.Remove(item); // break; // } // } // if (EnviVars.instance.RecentFilesCtrl.ItemCount == 10) // { // EnviVars.instance.RecentFilesCtrl.Items.RemoveAt(9); // } // ImageListBoxItem item2 = new ImageListBoxItem // { // ImageIndex = file.Type, // Value = file // }; // EnviVars.instance.RecentFilesCtrl.Items.Insert(0, item2); //} /// <summary> /// Adds the layers. /// </summary> /// <param name="featureClassList">The feature class list.</param> /// <param name="map">The map.</param> public static void AddLayers(List <IFeatureClass> featureClassList, IMap map) { IMap o = new MapClass(); try { foreach (IFeatureClass class2 in featureClassList) { IFeatureLayer layer = new FeatureLayerClass { Name = class2.AliasName, FeatureClass = class2 }; o.AddLayer(layer); //AddRecentFile(layer); } IEnumLayer layers = o.get_Layers(null, true); try { map.AddLayers(layers, true); } finally { if (layers != null) { Marshal.ReleaseComObject(layers); } } } finally { if (o != null) { Marshal.ReleaseComObject(o); } } }
/// <summary> /// Create Bitmap From ESRI Dataset /// </summary> /// <param name="dataset">Dataset to generate an image from</param> /// <param name="imageFormat">Output image format</param> /// <param name="size">Size of output image</param> /// <param name="resolution">Resolution of output image (dpi)</param> /// <param name="background">Background color</param> /// <param name="filename">Ouput filename</param> public static void CreateBitmap(IDataset dataset, esriImageFormat imageFormat, Size size, ushort resolution, Color background, string filename) { ILayer layer = null; switch (dataset.Type) { case esriDatasetType.esriDTFeatureClass: IFeatureClass featureClass = (IFeatureClass)dataset; switch (featureClass.FeatureType) { case esriFeatureType.esriFTDimension: layer = new DimensionLayerClass(); break; case esriFeatureType.esriFTAnnotation: layer = new FeatureLayerClass(); IGeoFeatureLayer geoFeaureLayer = (IGeoFeatureLayer)layer; geoFeaureLayer.DisplayAnnotation = true; break; case esriFeatureType.esriFTComplexEdge: case esriFeatureType.esriFTComplexJunction: case esriFeatureType.esriFTSimple: case esriFeatureType.esriFTSimpleEdge: case esriFeatureType.esriFTSimpleJunction: layer = new FeatureLayerClass(); break; } if (layer == null) { return; } IFeatureLayer featureLayer = (IFeatureLayer)layer; featureLayer.FeatureClass = featureClass; break; case esriDatasetType.esriDTRasterDataset: layer = new RasterLayerClass(); IRasterLayer rasterLayer = (IRasterLayer)layer; rasterLayer.CreateFromDataset((IRasterDataset)dataset); break; default: string message = string.Format("[{0}] is not supported", dataset.Type.ToString()); throw new Exception(message); } if (layer == null) { return; } // Create In-memory Map IMap map = new MapClass(); map.AddLayer(layer); IActiveView activeView = (IActiveView)map; IExport export = null; tagRECT rect = new tagRECT(); // Set Format Specific Properties switch (imageFormat) { case esriImageFormat.esriImageJPG: export = new ExportJPEGClass(); IExportJPEG exportJpeg = (IExportJPEG)export; exportJpeg.ProgressiveMode = false; exportJpeg.Quality = 100; break; default: throw new Exception("[" + imageFormat.ToString() + "] is not supported"); } if (export == null) { throw new Exception("Failed to Created Exporter"); } // Set Background if ((export is IExportBMP) || (export is IExportGIF) || (export is IExportJPEG) || (export is IExportPNG) || (export is IExportTIFF)) { IExportImage exportImage = (IExportImage)export; exportImage.ImageType = esriExportImageType.esriExportImageTypeTrueColor; exportImage.BackgroundColor = GeodatabaseUtility.ToESRIColor(background); } // Set Export Frame rect = activeView.ExportFrame; rect.left = 0; rect.top = 0; rect.right = size.Width; rect.bottom = size.Height; // Set Output Extent IEnvelope envelope = new EnvelopeClass(); envelope.PutCoords(rect.left, rect.top, rect.right, rect.bottom); export.PixelBounds = envelope; export.Resolution = resolution; export.ExportFileName = filename; // Export map to image int intHdc = export.StartExporting(); activeView.Output(intHdc, resolution, ref rect, null, null); export.FinishExporting(); export.Cleanup(); // Clear Layers map.ClearLayers(); // Release COM Objects GeodatabaseUtility.ReleaseComObject(layer); GeodatabaseUtility.ReleaseComObject(envelope); GeodatabaseUtility.ReleaseComObject(map); GeodatabaseUtility.ReleaseComObject(activeView); GeodatabaseUtility.ReleaseComObject(export); GC.Collect(); GC.WaitForPendingFinalizers(); }
/// <summary> /// 写入当前切片级别地理坐标系切片 /// </summary> /// <param name="i"></param> /// <param name="tileFileInfo"></param> /// <param name="outPutDir"></param> public static void WriteGeoLevel(int i, TileFileInfo tileFileInfo, string outPutDir) { IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactory(); IWorkspace pWs = workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(tileFileInfo.filePath), 0); IFeatureClass pFeatureClass = (pWs as IFeatureWorkspace).OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(tileFileInfo.filePath)); IFeatureLayer featureLayer = new FeatureLayerClass { FeatureClass = pFeatureClass }; IDataset dataSet = (IDataset)pFeatureClass; featureLayer.Name = dataSet.Name; IMap map = new MapClass(); map.AddLayer(featureLayer); IMapControlDefault pMapControl = new MapControlClass(); pMapControl.Map = map; IActiveView pActiveView = pMapControl.ActiveView; tagRECT rect = new tagRECT(); rect.left = rect.top = 0; rect.right = 256; rect.bottom = 256; IExport pExport = null; IEnvelope pEnvelope = new EnvelopeClass(); string temp = i.ToString(); if (temp.Length < 2) { temp = "0" + temp; } System.IO.DirectoryInfo LevelDir = new System.IO.DirectoryInfo(outPutDir).CreateSubdirectory($"L{temp}"); pMapControl.MapScale = TileParam.TileParamProjCoordinateSystem.TileScales[i]; pMapControl.Refresh(); Console.WriteLine($"Level:L{temp}:分辨率{TileParam.TileParamGeoCoordinateSystem.TileResolutions[i]}"); double imageHeighy = TileParam.TileParamGeoCoordinateSystem.TileResolutions[i] * TileParam.TileParamGeoCoordinateSystem.TileSize; for (int dy = 1, iRnum = 0; TileParam.TileOriginGeo.OriginY - imageHeighy * dy > tileFileInfo.MinY - imageHeighy; dy++, iRnum++) { if (TileParam.TileOriginGeo.OriginY - imageHeighy * dy > tileFileInfo.MaxY) { continue; } string tmpy = iRnum.ToString("X"); while (tmpy.Length < 8) { tmpy = "0" + tmpy; } Console.WriteLine($"--行号:R{tmpy}"); System.IO.DirectoryInfo RowDir = LevelDir.CreateSubdirectory($"R{tmpy}"); for (int dx = 1, iCnum = 0; TileParam.TileOriginGeo.OriginX + imageHeighy * dx < tileFileInfo.MaxX + imageHeighy; dx++, iCnum++) { if (TileParam.TileOriginGeo.OriginX + imageHeighy * dx < tileFileInfo.MinX) { continue; } string tmpx = iCnum.ToString("X"); while (tmpx.Length < 8) { tmpx = "0" + tmpx; } try { pEnvelope.PutCoords(TileParam.TileOriginGeo.OriginX + imageHeighy * (dx - 1), TileParam.TileOriginGeo.OriginY - imageHeighy * dy, TileParam.TileOriginGeo.OriginX + imageHeighy * dx, TileParam.TileOriginGeo.OriginY - imageHeighy * (dy - 1)); pExport = ToExporter("PNG"); pExport.ExportFileName = RowDir.FullName + "\\C" + tmpx + ".png"; Console.WriteLine($"----列号:C{tmpx} {pExport.ExportFileName}"); pExport.Resolution = 96; IEnvelope pPixelBoundsEnv = new EnvelopeClass(); pPixelBoundsEnv.PutCoords(rect.left, rect.top, rect.right, rect.bottom); pExport.PixelBounds = pPixelBoundsEnv; //开始导出,获取DC int hDC = pExport.StartExporting(); //导出 pActiveView.Output(hDC, 96, ref rect, pEnvelope, null); //结束导出 pExport.FinishExporting(); //清理导出类 pExport.Cleanup(); RealeaseAO(pExport); RealeaseAO(pPixelBoundsEnv); } catch (Exception ex) { Helpers.ErrorHelper.PrintException(ex); } } } RealeaseAO(workspaceFactory); RealeaseAO(pWs); RealeaseAO(pFeatureClass); RealeaseAO(featureLayer); RealeaseAO(map); RealeaseAO(pMapControl); }
/// <summary> /// ��MapControl��PageLayoutControlͨ��ͬһ������Map���а� /// </summary> /// <param name="activateMapFirst">���MapControl��ΪĬ�ϻ�ؼ�����ΪTrue</param> public void BindControls(bool activateMapFirst) { if (m_pageLayoutControl == null || m_mapControl == null) throw new Exception("ControlsSynchronizer::BindControls:\r\nMapControl��PageLayoutControlû�г�ʼ��!"); if (m_mapControl.Map.LayerCount == 0) { //����һ��Map���� IMap newMap = new MapClass(); newMap.Name = "��ͼ"; //����һ����ͼ����IMaps���� IMaps maps = new Maps(); maps.Add(newMap); m_pageLayoutControl.PageLayout.ReplaceMaps(maps); m_mapControl.Map = newMap; if (activateMapFirst) this.ActivateMap(); else this.ActivatePageLayout(); } else { //����һ��Map���� IMap newMap = new MapClass(); newMap.Name = "��ͼ"; for (int i = 0; i < m_mapControl.Map.LayerCount; i++) { newMap.AddLayer(m_mapControl.Map.get_Layer(i)); } //m_mapControl.Map = null; //����һ����ͼ����IMaps���� IMaps maps = new Maps(); maps.Add(newMap); m_pageLayoutControl.PageLayout.ReplaceMaps(maps); m_mapControl.Map = newMap; if (activateMapFirst) this.ActivateMap(); else this.ActivatePageLayout(); } }
public static string ExportLayerImage(IRaster pRaster, string[] bbox, string[] size,string outputUrl,string serveroutDir) { //判断栅格文件是否已经存在,存在删除,原因是如果存在,不删除的话,保存图片出错 //创建rasterlayer IRasterLayer pRasterLayer = new RasterLayerClass(); //获取mapServer中所有的图层 IMap pMap = new MapClass(); pRasterLayer.CreateFromRaster(pRaster); pMap.AddLayer(pRasterLayer as ILayer); // // Size pSize = new Size(); pSize.Width = Convert.ToInt32(size[0]); pSize.Height = Convert.ToInt32(size[1]); // IEnvelope pEnvelop = new EnvelopeClass(); pEnvelop.PutCoords(Convert.ToDouble(bbox[0]), Convert.ToDouble(bbox[1]), Convert.ToDouble(bbox[2]), Convert.ToDouble(bbox[3])); Image pImage = SaveCurrentToImage(pMap, pSize, pEnvelop); string imageName = System.DateTime.Now.ToString().Replace("/", "").Replace(":", "").Replace(" ", "") + ".png"; //outputUrl="http://localhost:6080/arcgis/rest/directories/arcgisoutput/imageserver/miyunspot_ImageServer/" // serveroutDir="D:\arcgisserver\directories\arcgisoutput\imageserver\miyunspot_ImageServer"; string url = outputUrl + imageName; string path = System.IO.Path.Combine(serveroutDir, imageName); pImage.Save(path); return url; }