博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArcGlode常用代码
阅读量:4320 次
发布时间:2019-06-06

本文共 7534 字,大约阅读时间需要 25 分钟。

转自:

这是常用的ArcGlobe代码。可以拿出来分析一下:

ArcGlobe常用代码:

1.按照适当的顺序绘制ArcGlobe图层
public void GetSetGlobeDrawingOrder(ESRI.ArcGIS.GlobeCore.IGlobe globe)
        {
            ESRI.ArcGIS.GlobeCore.IGlobeDisplay globeDisplay = globe.GlobeDisplay;
            ESRI.ArcGIS.GlobeCore.IGlobeDrawingOrder globeDrawingOrder = (ESRI.ArcGIS.GlobeCore.IGlobeDrawingOrder)globe;

ESRI.ArcGIS.Carto.IEnumLayer enumLayer = globeDrawingOrder.OrderedLayers;

ESRI.ArcGIS.Carto.IEnumLayer baseLayers = globe.get_GlobeLayers(null, true, true, true);

ESRI.ArcGIS.Carto.IEnumLayer floatingLayers = globe.get_GlobeLayers(null, false, false, true);

ESRI.ArcGIS.GlobeCore.IGlobeLayerProperties globeLayerProperties;
ESRI.ArcGIS.GlobeCore.IGlobeDisplayLayers globeDisplayLayers = (ESRI.ArcGIS.GlobeCore.IGlobeDisplayLayers)globeDisplay;

System.Collections.ArrayList DrapedLayers = new System.Collections.ArrayList();

System.Collections.ArrayList ElevationLayers = new System.Collections.ArrayList();

ESRI.ArcGIS.Carto.ILayer layer = baseLayers.Next();

            while (layer != null)
            {
                globeLayerProperties = globeDisplayLayers.FindGlobeProperties(layer);
                if (globeLayerProperties.Type != ESRI.ArcGIS.GlobeCore.esriGlobeDataType.esriGlobeDataElevation)
                {
                    DrapedLayers.Add(layer);
                }
                else if (globeLayerProperties.Type == ESRI.ArcGIS.GlobeCore.esriGlobeDataType.esriGlobeDataElevation)
                {
                    ElevationLayers.Add(layer);
                }
                //获得下一层
                layer = baseLayers.Next();
            }

            ESRI.ArcGIS.Carto.ILayer theDrapedLayer = (ESRI.ArcGIS.Carto.ILayer)DrapedLayers[0];

            globeDrawingOrder.MoveBackward(theDrapedLayer);

            globeDisplay.RefreshViewers();

            //获得浮动图层

            ESRI.ArcGIS.Carto.ILayer theFloatingLayer = floatingLayers.Next();
            while (theFloatingLayer != null)
            {
                theFloatingLayer = floatingLayers.Next();
            }
        }

2.获得BasicMap

public ESRI.ArcGIS.Carto.IBasicMap GetBasicMapFromGlobe(ESRI.ArcGIS.GlobeCore.IGlobe globe)
        {
            ESRI.ArcGIS.Carto.IBasicMap basicMap = globe as ESRI.ArcGIS.Carto.IBasicMap;

            return basicMap;

        }

3.获得Geographic 坐标

public ESRI.ArcGIS.Geometry.IPoint GetGeographicCoordinates(System.Int32 xView, System.Int32 yView, ESRI.ArcGIS.GlobeCore.IGlobeDisplay globeDisplay)
        {
            ESRI.ArcGIS.Geometry.IPoint point;
            object ppOwner;
            object ppObject;
            globeDisplay.Locate(globeDisplay.ActiveViewer, xView, yView, false, true, out point, out ppOwner, out ppObject);
            return point;
        }

4.设置Globe Layer 属性

public void SetGlobeLayerProperties1(ESRI.ArcGIS.GlobeCore.IGlobeDisplay globeDisplay, ESRI.ArcGIS.Carto.ILayer layer)
        {
            ESRI.ArcGIS.GlobeCore.IGlobeDisplayLayers globeDisplayLayers = globeDisplay as ESRI.ArcGIS.GlobeCore.IGlobeDisplayLayers;

            ESRI.ArcGIS.GlobeCore.IGlobeLayerProperties globeLayerProps = globeDisplayLayers.FindGlobeProperties(layer);

            globeLayerProps.Use16ColorBits = true;

            globeDisplayLayers.RefreshLayer(layer);

        }

 

1.向ArcGlobe控件中通过类型来添加图层

public void AddGlobeLayerByType(ESRI.ArcGIS.GlobeCore.IGlobe globe,

ESRI.ArcGIS.GlobeCore.esriGlobeLayerType globeLayerType, ESRI.ArcGIS.Carto.ILayer layer)

        {
            if (globe == null) return;

            if (globeLayerType ==

ESRI.ArcGIS.GlobeCore.esriGlobeLayerType.esriGlobeLayerTypeElevation)

            {
                if (layer is ESRI.ArcGIS.Carto.IRasterLayer ||
                    layer is ESRI.ArcGIS.Carto.ITinLayer ||
                    layer is ESRI.ArcGIS.Carto.ITerrainLayer)
                {
                    globe.AddLayerType(layer, globeLayerType, true);
                }
                return;
            }
            // else if GlobeLayerType is esriGlobeLayerTypeDraped or

esriGlobeLayerTypeFloating

            globe.AddLayerType(layer, globeLayerType, true);
        }

     2.向ArcGlobe中添加Graphics Layer

public void AddNewGraphicsLayer(ESRI.ArcGIS.GlobeCore.IGlobe globe, System.String

graphicsLayerName)

        {
            // 创建graphics layer 并添加到 ArcGlobe
            ESRI.ArcGIS.Carto.IGraphicsContainer globeGraphicsLayer = new

ESRI.ArcGIS.GlobeCore.GlobeGraphicsLayerClass();

            ESRI.ArcGIS.Carto.ILayer layer = (ESRI.ArcGIS.Carto.ILayer)globeGraphicsLayer;

           layer.Name = graphicsLayerName;

            ESRI.ArcGIS.Analyst3D.IScene scene = globe as ESRI.ArcGIS.Analyst3D.IScene;  

               

            scene.AddLayer(layer, true);

            // 向graphics layer添加点元素

            ESRI.ArcGIS.Carto.IElement markerElement = new

ESRI.ArcGIS.Carto.MarkerElementClass();

            ESRI.ArcGIS.Analyst3D.ISimpleMarker3DSymbol simpleMarker3DSymbol = new

ESRI.ArcGIS.Analyst3D.SimpleMarker3DSymbolClass();

            simpleMarker3DSymbol.Style =

ESRI.ArcGIS.Analyst3D.esriSimple3DMarkerStyle.esriS3DMSCone;

            // 设置相关属性

            simpleMarker3DSymbol.ResolutionQuality = 1;
            ESRI.ArcGIS.Display.IColor rgbColor = new ESRI.ArcGIS.Display.RgbColorClass();
            rgbColor.RGB = 255;

            ESRI.ArcGIS.Display.IMarkerSymbol markerSymbol =

(ESRI.ArcGIS.Display.IMarkerSymbol)simpleMarker3DSymbol;             markerSymbol.Color =

rgbColor;

            markerSymbol.Size = 100000;

          

            ESRI.ArcGIS.Geometry.IPoint point = new ESRI.ArcGIS.Geometry.PointClass();
            point.PutCoords(-47, 44);
            markerElement.Geometry = point;

            // 添加到 graphics layer

            ESRI.ArcGIS.Carto.IMarkerElement markerElement_2 =

(ESRI.ArcGIS.Carto.IMarkerElement)markerElement;

            markerElement_2.Symbol = markerSymbol;
            globeGraphicsLayer.AddElement(markerElement, 1);

            // 向graphics layer添加线元素

            ESRI.ArcGIS.Carto.IElement lineElement = new

ESRI.ArcGIS.Carto.LineElementClass();

            ESRI.ArcGIS.Analyst3D.ISimpleLine3DSymbol simpleLineSymbol3D = new

ESRI.ArcGIS.Analyst3D.SimpleLine3DSymbolClass();

            simpleLineSymbol3D.Style =

ESRI.ArcGIS.Analyst3D.esriSimple3DLineStyle.esriS3DLSStrip;

            //设置颜色和大小

            simpleLineSymbol3D.ResolutionQuality = 1;
            rgbColor.RGB = 255000;

            ESRI.ArcGIS.Display.ILineSymbol lineSymbol = (ESRI.ArcGIS.Display.ILineSymbol)

simpleLineSymbol3D;

            lineSymbol.Color = rgbColor;
            lineSymbol.Width = 2;

            // 设置geometry

            ESRI.ArcGIS.Geometry.IPolyline polyline = new

ESRI.ArcGIS.Geometry.PolylineClass();

            ESRI.ArcGIS.Geometry.IPoint fromPoint = new ESRI.ArcGIS.Geometry.PointClass();
            fromPoint.PutCoords(-30, 44);
            polyline.FromPoint = fromPoint;
            ESRI.ArcGIS.Geometry.IPoint toPoint = new ESRI.ArcGIS.Geometry.PointClass();
            toPoint.PutCoords(-60, 44);
            polyline.ToPoint = toPoint;
            lineElement.Geometry = polyline;

            // 添加到 graphics layer

            ESRI.ArcGIS.Carto.ILineElement lineElement_2 =

(ESRI.ArcGIS.Carto.ILineElement)lineElement;

            lineElement_2.Symbol = lineSymbol;
            globeGraphicsLayer.AddElement(lineElement, 1);
        }

     3.向ArcGlobe添加 KML 数据

public void AddKMLData(System.String theKmlFile, ESRI.ArcGIS.GlobeCore.IGlobe globe,

System.String kmlLayerName)

        {
            Type kmlType = Type.GetTypeFromProgID("esriGlobeCore.KmlLayer");
            ESRI.ArcGIS.GlobeCore.IKmlLayer kmlLayer = (ESRI.ArcGIS.GlobeCore.IKmlLayer)

System.Activator.CreateInstance(kmlType);

            kmlLayer.DataPath = theKmlFile;
            kmlLayer.Name = kmlLayerName;
            ESRI.ArcGIS.Analyst3D.IScene scene = globe as ESRI.ArcGIS.Analyst3D.IScene;  

         scene.AddLayer(kmlLayer as ESRI.ArcGIS.Carto.ILayer, true);       

         }

    4.向ArcGlobe中添加矢量数据

public void AddVectorData(ESRI.ArcGIS.GlobeCore.IGlobe globe,

ESRI.ArcGIS.GlobeCore.esriGlobeLayerType globeLayerType, ESRI.ArcGIS.Carto.ILayer layer)

        {
            if (globe == null || layer == null ||
                globeLayerType ==

ESRI.ArcGIS.GlobeCore.esriGlobeLayerType.esriGlobeLayerTypeElevation ||

                globeLayerType ==

ESRI.ArcGIS.GlobeCore.esriGlobeLayerType.esriGlobeLayerTypeUnknown)

            {
                return;
            }

            ESRI.ArcGIS.GlobeCore.IGlobeDisplay globeDisplay = globe.GlobeDisplay;

            ESRI.ArcGIS.GlobeCore.IGlobeDisplay2 globeDisplay2 = globeDisplay as

ESRI.ArcGIS.GlobeCore.IGlobeDisplay2;

            globeDisplay2.PauseCaching = true;
            globe.AddLayerType(layer, globeLayerType, true);
            ESRI.ArcGIS.GlobeCore.IGlobeDisplayLayers globeDisplayLayers = globeDisplay as

ESRI.ArcGIS.GlobeCore.IGlobeDisplayLayers;

            ESRI.ArcGIS.GlobeCore.IGlobeLayerProperties globeLayerProperties =

globeDisplayLayers.FindGlobeProperties(layer);

            globeLayerProperties.IsDynamicallyRasterized = false;
            globeDisplay2.PauseCaching = false;
        }

转载于:https://www.cnblogs.com/LCGIS/archive/2013/05/30/3107374.html

你可能感兴趣的文章
九. k8s--statefulset控制器
查看>>
十一. k8s--dashboard部署
查看>>
shell解析xml文件
查看>>
十二. k8s--网络策略flannel与canal学习笔记
查看>>
十三. k8s--调度器
查看>>
十四. k8s资源需求和限制, 以及pod驱逐策略
查看>>
三. k8s基本操作以及pod存活以及可用性验证钩子
查看>>
五. k8s--service学习笔记
查看>>
二. k8s安装过程
查看>>
jenkins pipeline 使用遇到的问题
查看>>
四. k8s--pod控制器
查看>>
一. python数据结构与算法
查看>>
django模型内部类meta解释
查看>>
v-for(:key)绑定index、id、key的区别
查看>>
el-tree文本内容过多显示不完全问题(解决)
查看>>
el-table翻页序号不从1开始(已解决)
查看>>
vue-cil 打包爬坑(解决)
查看>>
定位问题 vue+element-ui+easyui(兼容性)
查看>>
四叶草(css)
查看>>
nginx——前端服务环境
查看>>