Newer
Older
GHFX_REFACTOR / FeatureTools.cs
wxn on 29 Nov 2016 5 KB FeatureTools方法整理
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GeoScene.Data;
using GeoScene.Globe;

namespace Cyberpipe
{
    class FeatureTools
    {
        /// <summary>
        /// 清除地球上所有高亮的要素
        /// </summary>
        /// <param name="glb"></param>
        public static void ClearAllFeatureHighLight(GSOGlobeControl glb)
        {
            for (int i = 0; i < glb.Globe.Layers.Count; i++)
            {
                GSOLayer layer = glb.Globe.Layers[i];
                if (!(layer is GSOFeatureLayer)) continue;
                GSOFeatures feats = layer.GetAllFeatures();
                for (int j = 0; j < feats.Length; j++)
                {
                    feats[j].HighLight = false;
                }
            }
        }

        public static bool DeleteFeature(GSOFeature feature)
        {
            try
            {
                string layerName = feature.Dataset.Caption;

                //编号为空,为了限制删除的仅是用户自己添加的feature
                string bh = feature.GetFieldAsString("编号");
                if (bh == null) return false;
                if (!bh.EndsWith("TMP"))
                {
                    return false;
                }
                feature.Delete();//地球上删除该feature
                string sql = "delete from " + layerName + " where LSSYS_ID =" + feature.ID + " and (编号 is null or substr(编号,length(编号)-2)='TMP')";
                OledbHelper.sqlExecuteNonQuery(sql);//目前无法取到LSSYS_ID,所以这个判断条件不太合适,会导致把该类所有新建的都删除了
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        /// <summary>
        /// 根据编码,获取要素的种类描述
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public static string GetFeatureTypeByCode(string code)
        {
            if (code == null || code.Trim().Equals("")) return "";
            string result = "";
            foreach (PipelineType pipelineType in Utility.listPipelineType)
            {
                if (pipelineType == null || pipelineType.code.Trim() != code.Trim()) continue;
                result = pipelineType.type;
                if (!pipelineType.type.Equals(pipelineType.name))
                {
                    result += "   " + pipelineType.name;  
                }
                break;
            }
            return result;
        }

        public static string GetFieldValueByName(GSOFeature feature, string fieldName)
        {
            if (fieldName.Equals("图片编码"))
            {
                return null;
            }
            if (fieldName.Equals("模型路径"))
            {
                return null;
            }
            GSOFieldDefn field = feature.GetFieldDefn(fieldName);
            string value = "";
            if (field.Type == EnumFieldType.Text)
            {
                value = feature.GetFieldAsString(fieldName);
            }
            else if (field.Type == EnumFieldType.Date)
            {
                DateTime dd = Convert.ToDateTime(feature.GetFieldAsDataTime(fieldName));
                value = dd.Year <= 1 ? "" : dd.ToShortDateString();
            }
            else if (field.Type == EnumFieldType.Double)
            {
                double dl1 = feature.GetFieldAsDouble(fieldName);
                value = dl1.ToString("0.00");
            }
            else if (!feature.IsFieldValueNull(fieldName))
            {
                value = feature.GetValue(fieldName).ToString();
            }
            return value;
        }

        /// <summary>
        /// 根据附属物图层名字得到里面含有的附属物
        /// </summary>
        /// <param name="layername"></param>
        /// <returns></returns>
        public static string[] GetAccStrsByLayer(string layername)
        {
            string[] accStrs = null;
            string sql = "select 附属物名称 from " + layername + " group by 附属物名称";
            DataSet dataset = OledbHelper.getDataSet(sql, layername);
            if (dataset == null) return null;
            accStrs = new string[dataset.Tables[0].Rows.Count];
            for (int i = 0; i < dataset.Tables[0].Rows.Count; i++)
            {
                accStrs[i] = dataset.Tables[0].Rows[i][0].ToString();
            }
            return accStrs;
        }
    
        /// <summary>
        /// 删除内存图层中指定名称的feature
        /// </summary>
        /// <param name="globeControl1"></param>
        /// <param name="featureName"></param>
        public static void RemoveFeatureFromName(GSOGlobeControl globeControl1, string featureName)
        {
            GSOFeatures features = globeControl1.Globe.MemoryLayer.GetFeatureByName(featureName, true);
            if (features != null)
            {
                for (int i = features.Length - 1; i >= 0; i--)
                {
                    GSOFeature feature = features[i];
                    if (feature != null)
                    {
                        globeControl1.Globe.MemoryLayer.RemoveFeatureByID(feature.ID);
                    }
                }
            }
            globeControl1.Refresh();
        }
    }
}