zoukankan      html  css  js  c++  java
  • ArcGlode常用代码

    转自:http://blog.sina.com.cn/s/blog_80f279bb0101gmf1.html

    这是常用的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;
            }

  • 相关阅读:
    HDU 2433 Travel (最短路,BFS,变形)
    HDU 2544 最短路 (最短路,spfa)
    HDU 2063 过山车 (最大匹配,匈牙利算法)
    HDU 1150 Machine Schedule (最小覆盖,匈牙利算法)
    290 Word Pattern 单词模式
    289 Game of Life 生命的游戏
    287 Find the Duplicate Number 寻找重复数
    283 Move Zeroes 移动零
    282 Expression Add Operators 给表达式添加运算符
    279 Perfect Squares 完美平方数
  • 原文地址:https://www.cnblogs.com/LCGIS/p/3107374.html
Copyright © 2011-2022 走看看