예제 #1
0
        /// <summary>
        /// 查询该图层是否可查询 added by xisheng 20110802
        /// </summary>
        /// <param name="layer">图层</param>
        /// <returns></returns>
        public bool GetIsQuery(IFeatureLayer layer)
        {
            ILayerGeneralProperties pLayerGenPro = layer as ILayerGeneralProperties;
            //读取该图层的描述信息,转成xml节点
            string strNodeXml = pLayerGenPro.LayerDescription;

            if (strNodeXml.Equals(""))
            {
                return(true);
            }
            XmlDocument pXmldoc = new XmlDocument();

            pXmldoc.LoadXml(strNodeXml);
            //获取节点的NodeKey信息
            XmlNode pxmlnode = pXmldoc.SelectSingleNode("//AboutShow");

            if (pxmlnode == null)
            {
                pXmldoc = null;
                return(true);
            }
            string strNodeKey = pxmlnode.Attributes["IsQuery"].Value.ToString();

            if (strNodeKey.Trim().ToUpper() == "FALSE")
            {
                pXmldoc = null;
                return(false);
            }
            else
            {
                pXmldoc = null;
                return(true);
            }
        }
예제 #2
0
 //added by chulili 20110731 获取图层顺序号,返回字符型,为了同时适应整形和双精度型
 private string GetOrderIDofLayer(ILayer pLayer)
 {
     try
     {
         ILayerGeneralProperties pLayerGenPro = pLayer as ILayerGeneralProperties;
         //读取图层的描述
         string      strNodeXml = pLayerGenPro.LayerDescription;
         XmlDocument pXmlDoc    = new XmlDocument();
         pXmlDoc.LoadXml(strNodeXml);
         //构成xml节点,根据NodeKey在节点里查询
         XmlNode pNode    = pXmlDoc.ChildNodes[0];
         string  strOrder = "";
         try
         {
             strOrder = pNode.Attributes["OrderID"].Value.ToString();
         }
         catch
         { }
         return(strOrder);
     }
     catch
     {
     }
     return("");
 }
예제 #3
0
        public override void OnClick()
        {
            if (m_pLayer == null)
            {
                return;
            }
            // 获取图层NodeKey ygc 2012-20-11
            ILayerGeneralProperties pLayerGenPro = m_pLayer as ILayerGeneralProperties;
            string sValue  = pLayerGenPro.LayerDescription;
            string NodeKey = "";

            if (sValue != "")
            {
                XmlDocument docXml = new XmlDocument();
                docXml.LoadXml(sValue);
                XmlNode node = docXml.SelectSingleNode("//Layer");
                NodeKey = node.Attributes["NodeKey"].Value.ToString();
            }//end
            //xisheng 20111117 传递m_MapControl以便刷新*********************************
            if (layerProDialog == null)
            {
                //layerProDialog = new frmLayerProperties(m_pLayer, m_pActiveView, true);
                layerProDialog = new frmLayerProperties(m_pLayer, m_MapControl, true, NodeKey);
                layerProDialog.Show();
            }
            else if (layerProDialog.Visible == false)
            {
                //layerProDialog = new frmLayerProperties(m_pLayer, m_pActiveView, true);
                layerProDialog = new frmLayerProperties(m_pLayer, m_MapControl, true, NodeKey);
                layerProDialog.Show();
            }
            ////xisheng 20111117 传递m_MapControl以便刷新****************************end
        }
예제 #4
0
        //获取图层属性
        private void ReadLayerProperties(ILayer layer, AdvTree tree)
        {
            tree.BeginUpdate();
            tree.Nodes.Clear();
            if (layer is IFeatureLayer)
            {
                ILayerGeneralProperties layerProperties = layer as ILayerGeneralProperties;
                AddChildNode(tree.Nodes, "LastMaximumScale", layerProperties.LastMaximumScale.ToString());
                AddChildNode(tree.Nodes, "LastMinimumScale", layerProperties.LastMinimumScale.ToString());
                AddChildNode(tree.Nodes, "LayerDescription ", layerProperties.LayerDescription);
            }
            else if (layer is IRasterLayer)
            {
                IRasterLayer rasterLayer = layer as IRasterLayer;
                if (rasterLayer.Raster != null)
                {
                    IRaster  raster                   = rasterLayer.Raster;
                    IRaster2 raster2                  = raster as IRaster2;
                    IRasterBandCollection coll        = raster2 as IRasterBandCollection;
                    IRasterProps          rasterProps = raster2 as IRasterProps;
                    //基本信息
                    Node node = AddChildNode(tree.Nodes, "基本信息", null);
                    AddChildNode(node.Nodes, "行数,列数", rasterProps.Height.ToString() + "," + rasterProps.Width.ToString());
                    AddChildNode(node.Nodes, "波段数", coll.Count.ToString());
                    AddChildNode(node.Nodes, "像元大小(x,y)", rasterProps.MeanCellSize().X.ToString() + "," + rasterProps.MeanCellSize().Y.ToString());
                    AddChildNode(node.Nodes, "波段数", coll.Count.ToString());
                    AddChildNode(node.Nodes, "像素类型", rasterProps.PixelType.ToString());
                    AddChildNode(node.Nodes, "无效值", ClsGetCameraView.getNoDataValue(rasterProps.NoDataValue).ToString());

                    node = AddChildNode(tree.Nodes, "坐标范围", null);
                    AddChildNode(node.Nodes, "上", rasterProps.Extent.YMax.ToString());
                    AddChildNode(node.Nodes, "左", rasterProps.Extent.XMin.ToString());
                    AddChildNode(node.Nodes, "右", rasterProps.Extent.XMax.ToString());
                    AddChildNode(node.Nodes, "下", rasterProps.Extent.YMin.ToString());

                    node = AddChildNode(tree.Nodes, "统计信息", null);
                    ClsGDBDataCommon cls = new ClsGDBDataCommon();
                    for (int i = 0; i < coll.Count; i++)
                    {
                        double[] dValue   = cls.GetRasterStatistics(m_pLayer, i);
                        Node     nodeBand = AddChildNode(node.Nodes, "Band_" + (i + 1).ToString(), null);
                        AddChildNode(nodeBand.Nodes, "最大值", dValue[0].ToString());
                        AddChildNode(nodeBand.Nodes, "最小值", dValue[1].ToString());
                        AddChildNode(nodeBand.Nodes, "平均值", dValue[2].ToString());
                        AddChildNode(nodeBand.Nodes, "标准差", dValue[3].ToString());
                    }
                }
            }
            tree.EndUpdate(true);
            tree.ExpandAll();
        }
예제 #5
0
        //added by chulili 20110730根据NodeKey查找图层 递归调用
        private static ILayer GetLayerByNodeKey(IMap pMap, ILayer pLayer, string strNodeKey)
        {
            if (pMap == null)
            {
                return(null);
            }
            if (pLayer == null)
            {
                return(null);
            }
            if (strNodeKey.Equals(string.Empty))
            {
                return(null);
            }
            ILayer pSearchLayer = null;
            //遍历子节点
            IGroupLayer pGrouplayer = pLayer as IGroupLayer;

            if (pGrouplayer != null)
            {
                ICompositeLayer pComLayer = pGrouplayer as ICompositeLayer;
                for (int i = 0; i < pComLayer.Count; i++)
                {
                    ILayer pTmpLayer = pComLayer.get_Layer(i);
                    pSearchLayer = GetLayerByNodeKey(pMap, pTmpLayer, strNodeKey);
                    if (pSearchLayer != null)
                    {
                        return(pSearchLayer);
                    }
                }
            }
            else
            {
                ILayerGeneralProperties pLayerGenPro = pLayer as ILayerGeneralProperties;
                //读取图层的描述
                string      strNodeXml = pLayerGenPro.LayerDescription;
                XmlDocument pXmlDoc    = new XmlDocument();
                pXmlDoc.LoadXml(strNodeXml);
                //构成xml节点,根据NodeKey在节点里查询
                string  strSearch = "//Layer[@NodeKey=" + "'" + strNodeKey + "'" + "]";
                XmlNode pNode     = pXmlDoc.SelectSingleNode(strSearch);
                if (pNode != null)
                {
                    pXmlDoc = null;
                    return(pLayer);
                }
            }
            return(null);
        }
예제 #6
0
        public static XmlNode GetSelectNodeXml(ILayer pLayer)
        {
            ILayerGeneralProperties pLayerGenPro = pLayer as ILayerGeneralProperties;

            string sValue = pLayerGenPro.LayerDescription;

            if (sValue.Equals(string.Empty))
            {
                return(null);
            }

            XmlDocument docXml = new XmlDocument();

            docXml.LoadXml(sValue);

            XmlNode nodeSelectXml = docXml.DocumentElement;

            return(nodeSelectXml);
        }
예제 #7
0
        //刷新单个层的图层顺序号,支持图层组类型以及图层类型
        public void RefreshOrderIDofLayer(ILayer pLayer, XmlDocument pXmldoc)
        {
            if (pLayer == null)
            {
                return;
            }
            ILayerGeneralProperties pLayerGenPro = pLayer as ILayerGeneralProperties;
            //读取图层的描述
            string strNodeXml = pLayerGenPro.LayerDescription;

            if (strNodeXml == "")
            {
                return;
            }
            XmlDocument pTmpXmlDoc = new XmlDocument();

            pTmpXmlDoc.LoadXml(strNodeXml);
            //构成xml节点,根据NodeKey在节点里查询
            XmlNode pNode      = pTmpXmlDoc.ChildNodes[0];
            string  strNodeKey = pNode.Attributes["NodeKey"].Value.ToString();
            string  strSearch  = "";

            if (pLayer is IGroupLayer)
            {
                strSearch = "//DataDIR [@NodeKey='" + strNodeKey + "']";
            }
            else
            {
                strSearch = "//Layer [@NodeKey='" + strNodeKey + "']";
            }
            pTmpXmlDoc = null;
            XmlNode pNewLayerNode = pXmldoc.SelectSingleNode(strSearch);

            if (pNewLayerNode != null)
            {
                pLayerGenPro.LayerDescription = pNewLayerNode.OuterXml;
                this.layerTree.RefreshOrderIDofLayer(strNodeKey, pNewLayerNode.OuterXml);
            }
        }
예제 #8
0
 //为图层赋顺序号,此处是双精度型
 private void SetOrderIDofLayer(ILayer pLayer, double dOrderID)
 {
     try
     {
         ILayerGeneralProperties pLayerGenPro = pLayer as ILayerGeneralProperties;
         //读取图层的描述
         string      strNodeXml = pLayerGenPro.LayerDescription;
         XmlDocument pXmlDoc    = new XmlDocument();
         pXmlDoc.LoadXml(strNodeXml);
         //构成xml节点,根据NodeKey在节点里查询
         XmlNode pNode      = pXmlDoc.ChildNodes[0];
         string  strNodeKey = pNode.Attributes["NodeKey"].Value.ToString();
         pXmlDoc = null;
         //为图层设置顺序号,双精度型
         XmlDocument pnewXmldoc = new XmlDocument();
         pnewXmldoc.Load(ModPublicFun._layerTreePath);
         string strSearch = "";
         if (pLayer is IGroupLayer)
         {   //若是图层组,则取数据集节点
             strSearch = "//DataDIR [@NodeKey='" + strNodeKey + "']";
         }
         else
         {   //若是单图层,则取图层节点
             strSearch = "//Layer [@NodeKey='" + strNodeKey + "']";
         }
         XmlNode    pLayerNode = pnewXmldoc.SelectSingleNode(strSearch);
         XmlElement pLayerEle  = pLayerNode as XmlElement;
         if (pLayerEle != null)
         {
             pLayerEle.SetAttribute("OrderID", dOrderID.ToString());
         }
         pLayerGenPro.LayerDescription = pLayerNode.OuterXml;//这一句很重要,将修改的顺序号保存回去
         pnewXmldoc.Save(ModPublicFun._layerTreePath);
     }
     catch
     {
     }
 }
예제 #9
0
        private void uctrGeneral_Load_1(object sender, EventArgs e)
        {
            //xisheng 20111117 屏蔽掉判断是不是影像,不明白之前为什么要这样处理*******************//
            //if (frmLayerProperties.m_featureTrue)
            //{
            txtLayerName.Text = m_pLayer.Name;
            //}
            //else
            //{
            //    txtLayerName.Text = "影像数据";
            //}
            //xisheng 20111117 屏蔽掉判断是不是影像,不明白之前为什么要这样处理end*************//

            //获得图层NodeKey xisheng 20111117****************************************************
            ILayerGeneralProperties pLayerGenPro = m_pLayer as ILayerGeneralProperties;

            txtDescription.Text = pLayerGenPro.LayerDescription;
            if (pLayerGenPro.LayerDescription != "")
            {
                XmlDocument xmldoc = new XmlDocument();
                xmldoc.LoadXml(pLayerGenPro.LayerDescription);
                XmlNode xmlNode = xmldoc.SelectSingleNode(@"//Layer");
                m_nodeKey = (xmlNode as XmlElement).GetAttribute("NodeKey");
                //获得图层NodeKey xisheng 20111117**********************************************end

                m_LayerDescription  = "图层名称:" + (xmlNode as XmlElement).GetAttribute("NodeText") + ";\r\n";
                m_LayerDescription += "要素集名称:" + (xmlNode as XmlElement).GetAttribute("FeatureDatasetName") + ";\r\n";
                switch ((xmlNode as XmlElement).GetAttribute("DataType"))
                {
                case "FC":
                    m_LayerDescription += "要素集类型:FeatureClass;\r\n";
                    break;

                case "FD":
                    m_LayerDescription += "要素集类型:FeatureDataset;\r\n";
                    break;

                case "RC":
                    m_LayerDescription += "要素集类型:RasterClasss;\r\n";
                    break;

                case "RD":
                    m_LayerDescription += "要素集类型:RasterDataset;\r\n";
                    break;
                }
                m_LayerDescription += "要素类名称:" + (xmlNode as XmlElement).GetAttribute("Code") + ";\r\n";
                m_LayerDescription += "要素类类型:" + (xmlNode as XmlElement).GetAttribute("FeatureType") + ";";
            }
            List <string> list = new List <string>();

            chkLayerVisible.Checked = m_layerVisible;
            if (m_pCurrentLayer.MaximumScale == 0 && m_pCurrentLayer.MinimumScale == 0)
            {
                rbtnAllScale.Checked = true;
                cboMaxScale.Enabled  = false;
                cboMinScale.Enabled  = false;

                //等于上次的比例尺 xisheng 20111117
                if (Plugin.Mod.m_Dic.ContainsKey(m_nodeKey))
                {
                    list             = Plugin.Mod.m_Dic[m_nodeKey];
                    cboMaxScale.Text = list[1];
                    cboMinScale.Text = list[0];
                }
                //等于上次的比例尺 xisheng 20111117 end
            }
            else
            {
                rbtnRangeScale.Checked = true;
                cboMaxScale.Enabled    = true;
                cboMinScale.Enabled    = true;

                //shduan add 20110720
                cboMaxScale.Text = m_pCurrentLayer.MaximumScale.ToString();
                cboMinScale.Text = m_pCurrentLayer.MinimumScale.ToString();
            }
            txtDescription.Text = m_LayerDescription;
            ILayerEffects pLyrEffects = m_pCurrentLayer as ILayerEffects;

            this.inPutTrans.Value = pLyrEffects.Transparency;
        }
예제 #10
0
        /// <summary>
        /// Builds the index file with layers
        /// </summary>
        /// <param name="searchPaths">The search paths.</param>
        public void BuildIndex(List <string> searchPaths)
        {
            if (!File.Exists(this.IndexPath))
            {
                CreateNewIndexFile(this.IndexPath);
            }

            List <string> layerFiles = new List <string>();

            int i = 0;


            foreach (string searchPath in searchPaths)
            {
                i++;

                LayerfileIndexer indexer = new LayerfileIndexer(searchPath);
                indexer.Search();
                layerFiles.AddRange(indexer.LayerFiles);

                OnProgressUpdate(i, searchPaths.Count, "Scanning Search Path " + searchPath);
            }

            List <string> insertSQLStatements = new List <string>();

            i = 0;
            foreach (string filePath in layerFiles)
            {
                i++;

                FileInfo fileInfo = new FileInfo(filePath);


                ILayerFile layerFile = new LayerFileClass();
                layerFile.Open(filePath);
                ILayer layer = layerFile.Layer;

                ILayerGeneralProperties layerProps = (ILayerGeneralProperties)layer;
                ILayerExtensions        layerExt   = (ILayerExtensions)layer;

                string lyrGUID  = "00000000-0000-0000-0000-000000000000";
                string revision = "0";

                if (Layer.Util.LayerExtHelper.UmbrielPropertySetExists(layerExt))
                {
                    IPropertySet propertySet = Util.LayerExtHelper.GetUmbrielPropertySet(layerExt);
                    if (propertySet != null && Util.LayerExtHelper.PropertyExists(propertySet, "GUID"))
                    {
                        lyrGUID = propertySet.GetProperty("GUID").ToString();
                    }

                    if (propertySet != null && Util.LayerExtHelper.PropertyExists(propertySet, "revision"))
                    {
                        revision = propertySet.GetProperty("revision").ToString();
                    }
                }

                StringBuilder sql = new StringBuilder();
                sql.AppendLine("INSERT INTO layerfile ");
                sql.AppendLine("(lyrgid,lyrName,lyrDescription,lyrFileName,lyrFullPath,lyrParentDir,lyrRevision,DateRecCreated,DateRecModified)");
                sql.AppendLine(" VALUES (");

                sql.AppendLine("'" + lyrGUID + "'");
                sql.AppendLine(",'" + layer.Name.Replace("'", "''") + "'");
                sql.AppendLine(",'" + layerProps.LayerDescription.Replace("'", "''") + "'");
                sql.AppendLine(",'" + Path.GetFileName(filePath) + "'");
                sql.AppendLine(",\"" + filePath + "\"");
                sql.AppendLine(",'" + Path.GetDirectoryName(filePath) + "'");
                sql.AppendLine("," + revision + "");

                sql.AppendLine(",'" + SqliteDateString(DateTime.Now) + "'");
                sql.AppendLine(",'" + SqliteDateString(DateTime.Now) + "'");

                sql.AppendLine(")");

                Debug.WriteLine(sql.ToString());
                insertSQLStatements.Add(sql.ToString());

                OnProgressUpdate(i, layerFiles.Count, "Building layer data file: ");

                if (layer != null)
                {
                    // System.Runtime.InteropServices.Marshal.FinalReleaseComObject(layerFile);
                }
            }

            i = 0;

            // build insert sql statement
            using (SQLiteConnection cnn = new SQLiteConnection(this.GetDBConnectionString()))
            {
                cnn.Open();

                using (DbTransaction transaction = cnn.BeginTransaction())
                {
                    using (DbCommand cmd = cnn.CreateCommand())
                    {
                        foreach (string sql in insertSQLStatements)
                        {
                            i++;

                            cmd.CommandText = sql;
                            cmd.ExecuteNonQuery();

                            OnProgressUpdate(i, insertSQLStatements.Count, "Inserting data: ");
                        }
                    }
                    transaction.Commit();
                }

                OnProgressUpdate(i, insertSQLStatements.Count, "Insert Complete!");

                cnn.Close();
            }
        }
예제 #11
0
        /// <summary>
        /// 设置图层
        /// </summary>
        private void DoApply()
        {
            IFeatureLayer           featureLayer    = (IFeatureLayer)m_layer;
            IGeoFeatureLayer        geoLayer        = (IGeoFeatureLayer)m_layer;
            IFeatureClass           featureClass    = featureLayer.FeatureClass;
            ILayerGeneralProperties layerProperties = (ILayerGeneralProperties)featureLayer;

            // 图层属性页
            String tmp = this.textBoxLayerName.Text.Trim();

            if (!String.IsNullOrEmpty(tmp))
            {
                m_layer.Name = tmp;
            }
            tmp = layerProperties.LayerDescription.Trim();
            layerProperties.LayerDescription = tmp;
            m_layer.Visible = this.checkBoxVisibility.Checked;

            if (this.radioButtonScaleAll.Checked)
            {
                geoLayer.MaximumScale = 0;
                geoLayer.MinimumScale = 0;
            }
            else
            {
                tmp = this.comboBoxScaleMax.Text.Trim();
                double d = 0;
                if (Double.TryParse(tmp, out d))
                {
                    geoLayer.MaximumScale = d;
                }
                else
                {
                    geoLayer.MaximumScale = 0;
                }
                tmp = this.comboBoxScaleMin.Text.Trim();
                if (Double.TryParse(tmp, out d))
                {
                    geoLayer.MinimumScale = d;
                }
                else
                {
                    geoLayer.MinimumScale = 0;
                }
            }

            // 标注
            IAnnotateLayerPropertiesCollection annoLayerPropsColl = geoLayer.AnnotationProperties;
            IAnnotateLayerProperties           annoLayerProps     = null;
            IElementCollection placedElements   = null;
            IElementCollection unplacedElements = null;

            annoLayerPropsColl.QueryItem(0, out annoLayerProps, out placedElements, out unplacedElements);
            ILabelEngineLayerProperties aLELayerProps = annoLayerProps as ILabelEngineLayerProperties;

            annoLayerProps.DisplayAnnotation = checkBoxLabelVisibility.Checked;
            if (annoLayerProps.DisplayAnnotation)
            {
                // cmbFontName.Text = "宋体";
                ITextSymbol      textSymbol = aLELayerProps.Symbol;
                stdole.IFontDisp fontDisp   = textSymbol.Font;
                decimal          d          = 8;
                if (decimal.TryParse(cmbFontSize.Text, out d))
                {
                    fontDisp.Size = d;
                }

                fontDisp.Bold      = toolBarStyle.Buttons[0].Pushed;
                fontDisp.Italic    = toolBarStyle.Buttons[1].Pushed;
                fontDisp.Underline = toolBarStyle.Buttons[2].Pushed;
                fontDisp.Name      = cmbFontName.Text;
                IRgbColor rgbColor = new RgbColorClass();
                rgbColor.Transparency             = this.colorButtonFont.Color.A;
                rgbColor.Red                      = this.colorButtonFont.Color.R;
                rgbColor.Green                    = this.colorButtonFont.Color.G;
                rgbColor.Blue                     = this.colorButtonFont.Color.B;
                textSymbol.Color                  = rgbColor;
                textSymbol.Font                   = fontDisp;
                aLELayerProps.Symbol              = textSymbol;
                annoLayerProps                    = aLELayerProps as IAnnotateLayerProperties;
                annoLayerProps.FeatureLayer       = geoLayer;
                annoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
                // annoLayerPropsColl.Add(annoLayerProps);

                if (cmbFieldName.SelectedIndex == -1)
                {
                    aLELayerProps.IsExpressionSimple = false;
                }
                else
                {
                    aLELayerProps.IsExpressionSimple = true;
                    String expr = "[" + cmbFieldName.Items[cmbFieldName.SelectedIndex] + "]";
                    aLELayerProps.Expression = expr;
                }

                if (this.rbScaleWithLayer.Checked)
                {
                    annoLayerProps.AnnotationMaximumScale = 0;
                    annoLayerProps.AnnotationMinimumScale = 0;
                }
                else
                {
                    double dTmp = 0;
                    if (double.TryParse(cmbMaxScale.Text, out dTmp))
                    {
                        annoLayerProps.AnnotationMaximumScale = dTmp;
                    }
                    dTmp = 0;
                    if (double.TryParse(cmbMinScale.Text, out dTmp))
                    {
                        annoLayerProps.AnnotationMinimumScale = dTmp;
                    }
                }


                //ITextSymbol pTextSymbol = aLELayerProps.Symbol;
                //stdole.IFontDisp pFontDisp = pTextSymbol.Font;
                //pFontDisp.Size = decimal.Parse(fontSize);
                //pFontDisp.Bold = boldBool;
                //pFontDisp.Italic = italicBool;
                //pFontDisp.Name = fontStyle;
                //IRgbColor pRgbColor = new RgbColorClass();
                //pRgbColor.Red = int.Parse(fontColor.R.ToString());
                //pRgbColor.Blue = int.Parse(fontColor.B.ToString());
                //pRgbColor.Green = int.Parse(fontColor.G.ToString());
                //pTextSymbol.Font = pFontDisp;
                //pTextSymbol.Color = pRgbColor;
                //aLELayerProps.Symbol = pTextSymbol;
                //annoLayerProps = aLELayerProps as IAnnotateLayerProperties;
                //annoLayerProps.FeatureLayer = geoLayer;
                //annoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
                //annoLayerPropsColl.Add(annoLayerProps);
            }

            // 符号
            EPSUtils.RendererFeatureLayer(featureLayer, checkBoxCostomSymbol.Checked);
            MapUtils.GetActiveView().Refresh();
        }
예제 #12
0
        /// <summary>
        /// 初始化form element
        /// </summary>
        private void Initialize()
        {
            IFeatureLayer           featureLayer    = (IFeatureLayer)m_layer;
            IGeoFeatureLayer        geoLayer        = (IGeoFeatureLayer)m_layer;
            IFeatureClass           featureClass    = featureLayer.FeatureClass;
            ILayerGeneralProperties layerProperties = (ILayerGeneralProperties)featureLayer;

            // 图层属性页
            this.textBoxLayerName.Text        = m_layer.Name;
            this.textBoxLayerDescription.Text = layerProperties.LayerDescription;
            this.checkBoxVisibility.Checked   = m_layer.Visible;

            String scaleMin = geoLayer.MinimumScale.ToString();
            String sacleMax = geoLayer.MaximumScale.ToString();

            if ("0" == scaleMin && "0" == sacleMax)
            {
                this.radioButtonScaleAll.Checked  = true;
                this.radioButtonScaleZoom.Checked = false;
            }
            else
            {
                this.radioButtonScaleAll.Checked  = false;
                this.radioButtonScaleZoom.Checked = true;
                this.comboBoxScaleMax.Text        = sacleMax;
                this.comboBoxScaleMin.Text        = scaleMin;
            }

            // 字段定义页
            IFields fields     = featureClass.Fields;
            int     fieldCount = fields.FieldCount;

            for (int i = 0; i < fieldCount; i++)
            {
                IField       field = fields.get_Field(i);
                ListViewItem item  = new ListViewItem(field.Name);
                item.SubItems.Add(field.AliasName);
                item.SubItems.Add(field.Editable ? "允许编辑" : "不允许编辑");
                item.SubItems.Add(field.IsNullable ? "允许为空" : "不允许为空");
                item.SubItems.Add(field.Length.ToString());
                item.SubItems.Add(field.Precision.ToString());
                item.SubItems.Add(field.Scale.ToString());
                item.SubItems.Add(GetFieldType(field.Type));
                listViewFields.Items.Add(item);
            }

            // 数据源及四至范围
            IEnvelope envelope = m_layer.AreaOfInterest;

            textBoxLeft.Text   = envelope.XMin.ToString();
            textBoxRight.Text  = envelope.XMax.ToString();
            textBoxTop.Text    = envelope.YMin.ToString();
            textBoxBottom.Text = envelope.YMax.ToString();

            IDataset dataset = (IDataset)featureLayer;

            textBoxDataSource.AppendText("数据源类型:           ");
            textBoxDataSource.AppendText(featureLayer.DataSourceType);
            textBoxDataSource.AppendText("\r\n数据集:               ");
            textBoxDataSource.AppendText(dataset.BrowseName);
            textBoxDataSource.AppendText("\r\n数据源名称:           ");
            textBoxDataSource.AppendText(dataset.Workspace.PathName);

            textBoxDataSource.AppendText("\r\n要素类:               ");
            textBoxDataSource.AppendText(featureClass.AliasName);
            textBoxDataSource.AppendText("\r\n要素类类型:           ");
            textBoxDataSource.AppendText(GetFeatureType(featureClass.FeatureType));
            textBoxDataSource.AppendText("\r\n几何类型:             ");
            textBoxDataSource.AppendText(GetGeometryType(featureClass.ShapeType));

            IGeoDataset geoDataset = (IGeoDataset)featureClass;
            // 通过IGeoDataset接口获取FeatureClass坐标系统
            ISpatialReference          spatialReference   = geoDataset.SpatialReference;
            IProjectedCoordinateSystem projectCoordSystem = null;

            if (spatialReference is IProjectedCoordinateSystem)
            {
                projectCoordSystem = (IProjectedCoordinateSystem)spatialReference;

                if (projectCoordSystem == null)
                {
                    return;
                }

                textBoxDataSource.AppendText("\r\n");

                IProjection project = projectCoordSystem.Projection;
                textBoxDataSource.AppendText("\r\n投影坐标系:           ");
                textBoxDataSource.AppendText(projectCoordSystem.Name);
                textBoxDataSource.AppendText("\r\n投影:                 ");
                textBoxDataSource.AppendText(project.Name);
                textBoxDataSource.AppendText("\r\nFalseEasting:         ");
                textBoxDataSource.AppendText(projectCoordSystem.FalseEasting.ToString());
                textBoxDataSource.AppendText("\r\nFalseNorthing:        ");
                textBoxDataSource.AppendText(projectCoordSystem.FalseNorthing.ToString());
                textBoxDataSource.AppendText("\r\n中央经线:             ");
                textBoxDataSource.AppendText(projectCoordSystem.get_CentralMeridian(true).ToString());
                textBoxDataSource.AppendText("\r\n缩放比例:             ");
                textBoxDataSource.AppendText(projectCoordSystem.ScaleFactor.ToString());
                textBoxDataSource.AppendText("\r\n高度原点:             ");
                try
                {
                    textBoxDataSource.AppendText(projectCoordSystem.LongitudeOfOrigin.ToString());
                }
                catch (Exception e)
                {
                    textBoxDataSource.AppendText("0");
                }

                textBoxDataSource.AppendText("\r\n单位:                 ");
                textBoxDataSource.AppendText(projectCoordSystem.CoordinateUnit.Name);

                textBoxDataSource.AppendText("\r\n");

                IGeographicCoordinateSystem geographCoordinateSystem = projectCoordSystem.GeographicCoordinateSystem;
                if (geographCoordinateSystem != null)
                {
                    textBoxDataSource.AppendText("\r\n地理坐标系:           ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.Name);
                    textBoxDataSource.AppendText("\r\n基准面:               ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.Datum.Name);
                    textBoxDataSource.AppendText("\r\n本初子午线:           ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.PrimeMeridian.Name);
                    textBoxDataSource.AppendText("\r\n单位:                 ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.CoordinateUnit.Name);
                }
            }
            else if (spatialReference is IGeographicCoordinateSystem)
            {
                IGeographicCoordinateSystem geographCoordinateSystem = spatialReference as IGeographicCoordinateSystem;
                if (geographCoordinateSystem != null)
                {
                    textBoxDataSource.AppendText("\r\n地理坐标系:           ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.Name);
                    textBoxDataSource.AppendText("\r\n基准面:               ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.Datum.Name);
                    textBoxDataSource.AppendText("\r\n本初子午线:           ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.PrimeMeridian.Name);
                    textBoxDataSource.AppendText("\r\n单位:                 ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.CoordinateUnit.Name);
                }
            }



            // filter

            IDisplayString displayString = (IDisplayString)featureLayer;

            textBoxFilter.AppendText(displayString.ExpressionProperties.Expression);

            // 标注
            IAnnotateLayerPropertiesCollection annoLayerPropsColl = geoLayer.AnnotationProperties;
            IAnnotateLayerProperties           annoLayerProps     = null;
            IElementCollection placedElements   = null;
            IElementCollection unplacedElements = null;

            annoLayerPropsColl.QueryItem(0, out annoLayerProps, out placedElements, out unplacedElements);
            ILabelEngineLayerProperties aLELayerProps = annoLayerProps as ILabelEngineLayerProperties;

            // annoLayerProps.DisplayAnnotation;
            checkBoxLabelVisibility.Checked = annoLayerProps.DisplayAnnotation;

            //初始化字体大小下拉框
            for (int k = 5; k <= 11; k++)
            {
                cmbFontSize.Items.Add(k);
            }
            for (int k = 12; k <= 72; k = k + 2)
            {
                cmbFontSize.Items.Add(k);
            }
            // cmbFontSize.Text = "8";

            //初始化字体下拉框
            foreach (FontFamily onefontfamily in FontFamily.Families)
            {
                //去掉名称头个字为@的字体
                if (onefontfamily.Name.Substring(0, 1) != "@")
                {
                    cmbFontName.Items.Add(onefontfamily.Name);
                }
            }
            // cmbFontName.Text = "宋体";
            ITextSymbol pTextSymbol = aLELayerProps.Symbol;

            stdole.IFontDisp pFontDisp = pTextSymbol.Font;
            cmbFontSize.Text = pFontDisp.Size.ToString();
            toolBarStyle.Buttons[0].Pushed = pFontDisp.Bold;
            toolBarStyle.Buttons[1].Pushed = pFontDisp.Italic;
            toolBarStyle.Buttons[2].Pushed = pFontDisp.Underline;
            cmbFontName.Text = pFontDisp.Name;
            IRgbColor rgbColor = (IRgbColor)pTextSymbol.Color;

            colorButtonFont.Color = Color.FromArgb(rgbColor.Transparency,
                                                   rgbColor.Red,
                                                   rgbColor.Green,
                                                   rgbColor.Blue);
            colorButtonFont.Refresh();
            for (int i = 0; i < fields.FieldCount; i++)
            {
                IField field = fields.get_Field(i);
                cmbFieldName.Items.Add(field.Name);
            }

            cmbFieldName.Enabled = aLELayerProps.IsExpressionSimple;
            String expr = aLELayerProps.Expression.Trim('[').Trim(']');

            cmbFieldName.SelectedIndex = cmbFieldName.FindString(expr);

            cmbMaxScale.Text = annoLayerProps.AnnotationMaximumScale.ToString();
            cmbMinScale.Text = annoLayerProps.AnnotationMinimumScale.ToString();

            if (cmbMaxScale.Text == "0" && cmbMinScale.Text == "0")
            {
                rbScaleWithLayer.Checked    = true;
                this.rbScaleDefined.Checked = false;
            }
            else
            {
                rbScaleWithLayer.Checked    = false;
                this.rbScaleDefined.Checked = true;
            }

            //ITextSymbol pTextSymbol = aLELayerProps.Symbol;
            //stdole.IFontDisp pFontDisp = pTextSymbol.Font;
            //pFontDisp.Size = decimal.Parse(fontSize);
            //pFontDisp.Bold = boldBool;
            //pFontDisp.Italic = italicBool;
            //pFontDisp.Name = fontStyle;
            //IRgbColor pRgbColor = new RgbColorClass();
            //pRgbColor.Red = int.Parse(fontColor.R.ToString());
            //pRgbColor.Blue = int.Parse(fontColor.B.ToString());
            //pRgbColor.Green = int.Parse(fontColor.G.ToString());
            //pTextSymbol.Font = pFontDisp;
            //pTextSymbol.Color = pRgbColor;
            //aLELayerProps.Symbol = pTextSymbol;
            //annoLayerProps = aLELayerProps as IAnnotateLayerProperties;
            //annoLayerProps.FeatureLayer = geoLayer;
            //annoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
            //annoLayerPropsColl.Add(annoLayerProps);

            // 符号
            checkBoxCostomSymbol.Checked = EPSUtils.IsLayerRenderer(featureLayer);
        }