用C#写一个灵活的要素Feature属性Properties质检WebAPI接口(三)

四大AI编程工具深度对比:Claude Code、Codex、OpenCode与WorkBuddy选型指南 AI编程助手正从代码补全走向自主执行的智能体形态,其核心原理是通过“规划-执行-观察”循环让模型自主完成文件修改、命令运行与错误修复。这类工具的技术价值在于提升长任务连续性与上下文理解能力,同时通过自定义指令与技能机制沉淀团队规范,适应不同工程场景。在实际选型中,开发者常面临终端CLI与图形化工作台、模型开放程度与绑定生态之间的权衡:Claude Code强调深度Agent体验,Codex支持灵活接入OpenAI兼容模型,OpenCode以开源多模型见长,WorkBuddy则提供全流程集成环境。本文基于真实 阅读详情

本文介绍一下功能实现,并给出核心部分代码。

首先要定义各种结构,包括传入参数、传出结果、规则集合等,如下:

using GeoJSON.Net.Feature;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Web;

namespace GISWebService.HttpRequestContent
{
    /// <summary>
    /// 属性质检的传入参数
    /// </summary>
    public class CheckFields
    {
        /// <summary>
        /// 图层
        /// </summary>
        [JsonProperty("layer")]
        public string Layer { get; set; }
        /// <summary>
        /// 要素集合
        /// </summary>
        [JsonProperty("feature")]
        public List<Feature> Feature { get; set; }
    }


    /// <summary>
    /// 要素属性质检结果
    /// </summary>
    public class CheckFieldsResult
    {
        /// <summary>
        /// OBJECTID
        /// </summary>
        [JsonProperty("objectid")]
        public int ObjectID { get; set; }
        /// <summary>
        /// 字段检查结果
        /// </summary>
        [JsonProperty("fields")]
        public List<string> FieldInfo { get; set; }
    }

    /// <summary>
    /// 属性质检结果
    /// </summary>
    public class CheckFieldsResponseBody
    {
        /// <summary>
        /// 图层
        /// </summary>
        [JsonProperty("layer")]
        public string Layer { get; set; }
        /// <summary>
        /// 质检结果
        /// </summary>
        [JsonProperty("info")]
        public List<CheckFieldsResult> Information { get; set; }
    }

    /// <summary>
    /// 规则:来自集合
    /// </summary>
    public class RuleCollection
    {
        /// <summary>
        /// 分隔符
        /// </summary>
        [JsonProperty("seperator")]
        [DefaultValue(",")]
        public string Seperator { get; set; }
        /// <summary>
        /// 集合
        /// </summary>
        [JsonProperty("list")]
        [JsonConverter(typeof(ValueToList))]
        public List<string> Items { get; set; }
    }

    /// <summary>
    /// 属性值质检规则
    /// </summary>
    public class RuleValueItem
    {
        /// <summary>
        /// 字段名
        /// </summary>
        [JsonProperty("name")]
        public string FieldName { get; set; }
        /// <summary>
        /// 允许空值(默认为true)
        /// </summary>
        [JsonProperty("nullable")]
        [DefaultValue(true)]
        public bool Nullable { get; set; }
        /// <summary>
        /// 来自集合
        /// </summary>
        [JsonProperty("collection", NullValueHandling = NullValueHandling.Ignore)]
        public RuleCollection RuleOfCollection { get; set; }
        /// <summary>
        /// 正则表达式
        /// </summary>
        [JsonProperty("expression", NullValueHandling = NullValueHandling.Ignore)]
        public string RegExp { get; set; }
    }

    /// <summary>
    /// 要素类属性值质检规则
    /// </summary>
    public class RuleValue
    {
        /// <summary>
        /// 要素类集合
        /// </summary>
        [JsonProperty("featureclass")]
        public List<string> FeatureClassNames { get; set; }
        /// <summary>
        /// 各字段规则
        /// </summary>
        [JsonProperty("rule")]
        public List<RuleValueItem> RuleItems { get; set; }
    }

    /// <summary>
    /// 属性空值限制质检规则
    /// </summary>
    public class RuleRestrictionItem
    {
        /// <summary>
        /// 主干(非空时要求分支不为空)
        /// </summary>
        [JsonProperty("trunk")]
        public string Trunk { get; set; }
        /// <summary>
        /// 分支
        /// </summary>
        [JsonProperty("branch")]
        [DefaultValue(true)]
        public List<string> Branches { get; set; }
    }

    /// <summary>
    /// 要素类属性值质检规则
    /// </summary>
    public class RuleRestriction
    {
        /// <summary>
        /// 要素类集合
        /// </summary>
        [JsonProperty("featureclass")]
        public List<string> FeatureClassNames { get; set; }
        /// <summary>
        /// 属性空值限制质检规则
        /// </summary>
        [JsonProperty("rule")]
        public List<RuleRestrictionItem> RuleItems { get; set; }
    }


    /// <summary>
    /// 属性空值限制质检规则
    /// </summary>
    public class RuleRelationItem
    {
        /// <summary>
        /// 较短的字段
        /// </summary>
        [JsonProperty("short")]
        public string ShortField { get; set; }
        /// <summary>
        /// 较长的字段(非空时,较短字段为其取值的一部分)
        /// </summary>
        [JsonProperty("long")]
        public string LongField { get; set; }

        /// <summary>
        /// 起始索引(从1起算,取值包含该索引)
        /// </summary>
        [JsonProperty("from")]
        public int FromIndex { get; set; }
        /// <summary>
        /// 终止索引(从1起算,大于起始索引,但小于总长度,取值包含该索引)
        /// </summary>
        [JsonProperty("to")]
        public int ToIndex { get; set; }
    }

    /// <summary>
    /// 要素类属性关系质检规则
    /// </summary>
    public class RuleRelation
    {
        /// <summary>
        /// 要素类集合
        /// </summary>
        [JsonProperty("featureclass")]
        public List<string> FeatureClassNames { get; set; }
        /// <summary>
        /// 属性关系质检规则
        /// </summary>
        [JsonProperty("rule")]
        public List<RuleRelationItem> RuleItems { get; set; }
    }

    public class ValueToList : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return true;
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            bool isTypeNullable = IsNullableType(objectType);
            Type t = isTypeNullable ? Nullable.GetUnderlyingType(objectType) : objectType;
            if (reader.TokenType == JsonToken.Null)
            {
                if (!IsNullableType(objectType))
                    throw new Exception(string.Format("不能转换null value to {0}.", objectType));
                return null;
            }
            try
            {
                List<string> ls = new List<string>();
                if (reader.TokenType == JsonToken.String)
                {
                    string sValue = reader.Value.ToString();
                    string[] arrayValue = sValue.Split(',');
                    foreach (string s in arrayValue)
                    {
                        if (string.IsNullOrWhiteSpace(s))
                            continue;
                        ls.Add(s);
                    }
                }
                return ls;
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Error converting value {0} to type '{1}'", reader.Value, objectType));
            }
            throw new Exception(string.Format("Unexpected token {0} when parsing enum", reader.TokenType));
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            if (null == value)
            {
                writer.WriteNull();
                return;
            }
            List<string> ls = value as List<string>;
            if (null == ls || 0 == ls.Count)
            {
                writer.WriteNull();
                return;
            }
            string result = "";
            foreach (string s in ls)
            {
                if (string.IsNullOrEmpty(s) || string.IsNullOrWhiteSpace(s))
                    continue;
                if (string.IsNullOrEmpty(result))
                {
                    result = s;
                }
                else
                {
                    result += "," + s;
                }
            }
            writer.WriteValue(result);
        }

        public bool IsNullableType(Type t)
        {
            if (t == null)
            {
                throw new ArgumentNullException("t");
            }
            return (t.BaseType.FullName == "System.ValueType" && t.GetGenericTypeDefinition() == typeof(Nullable<>));
        }
    }
}

先定义一个CheckValue类,来实现属性质检规则的加载:

using GeoJSON.Net.Feature;
using GISWebService.HttpRequestContent;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace GISWebService.Common
{
    public class CheckValue
    {
        private static string _CheckRelationConfig = "CheckRelation.json";
        private static string _CheckRestrictionConfig = "CheckRestriction.json";
        private static string _CheckValueConfig = "CheckValue.json";

        private static List<RuleRelation> _RuleRelations = null;
        private static List<RuleRestriction> _RuleRestrictions = null;
        private static List<RuleValue> _RuleValues = null;
        /// <summary>
        /// 属性关系检查规则
        /// </summary>
        public static List<RuleRelation> RuleRelations { get { return GetRules<RuleRelation>(_CheckRelationConfig, _RuleRelations as System.Collections.IList) as List<RuleRelation>; } }
        /// <summary>
        /// 属性空值约束检查规则
        /// </summary>
        public static List<RuleRestriction> RuleRestrictions { get { return GetRules<RuleRestriction>(_CheckRestrictionConfig, _RuleRestrictions as System.Collections.IList) as List<RuleRestriction>; } }
        /// <summary>
        /// 属性值检查规则
        /// </summary>
        public static List<RuleValue> RuleValues { get { return GetRules<RuleValue>(_CheckValueConfig, _RuleValues as System.Collections.IList) as List<RuleValue>; } }

        private static System.Collections.IList GetRules<T>(string name, System.Collections.IList rules)
        {
            if (null == rules)
            {
                Type aType = typeof(List<>).MakeGenericType(typeof(T));
                rules = Activator.CreateInstance(aType) as System.Collections.IList;
            }
            if (0 == rules.Count)
                rules = LoadRules<T>(name);
            return rules;
        }

        private static string GetConfigFile(string name)
        {
            string path = "";
            try
            {
                string s = System.IO.Path.Combine(AppSettings.PathByKey("tempdir"), name);
                path = System.IO.File.Exists(s) ? s : "";
            }
            catch (Exception e)
            {
                ExceptionHelper.LogActionException(e);
            }
            return path;
        }

        private static System.Collections.IList LoadRules<T>(string name)
        {
            string sPath = GetConfigFile(name);
            Type aType = typeof(List<>).MakeGenericType(typeof(T));
            System.Collections.IList ls = Activator.CreateInstance(aType) as System.Collections.IList;
            if (!string.IsNullOrEmpty(sPath))
            {
                string sContent = System.IO.File.ReadAllText(sPath, System.Text.Encoding.Default);
                ls = Newtonsoft.Json.JsonConvert.DeserializeObject(sContent, aType) as System.Collections.IList;
            }
            return ls;
        }

    }
}

在核心的质检类CheckValueHelper类中定义质检的方法,并让它继承自CheckValue类:

using GeoJSON.Net.Feature;
using GISWebService.HttpRequestContent;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;

namespace GISWebService.Common
{
    public class CheckValueHelper : CheckValue
    {
        public static CheckFieldsResult Check(string featureclass, Feature feature)
        {
            CheckFieldsResult result = new CheckFieldsResult() { ObjectID = -1, FieldInfo = new List<string>() };
            int oid = GetObjectID(feature);
            if (0 <= oid)
            {
                result.ObjectID = oid;
                result.FieldInfo.AddRange(CheckRelation(featureclass, feature.Properties, RuleRelations));
                result.FieldInfo.AddRange(CheckRestriction(featureclass, feature.Properties, RuleRestrictions));
                result.FieldInfo.AddRange(CheckValue(featureclass, feature.Properties, RuleValues));
            }
            return result;
        }

        private static int GetObjectID(Feature feature)
        {
            int n = -1;
            if (null == feature || null == feature.Properties || 0 == feature.Properties.Count)
                return n;
            foreach (var item in feature.Properties)
            {
                if (0 == string.Compare(item.Key, "objectid", true))
                {
                    if (null == item.Value)
                        continue;
                    int oid = -1;
                    if (int.TryParse(item.Value.ToString(), out oid) && 0 < oid)
                    {
                        n = Convert.ToInt32(item.Value.ToString());
                        break;
                    }
                }
            }
            return n;
        }

        private static string GetValueToString(Dictionary<string, object> dict, string key, bool ignoreCase = true, bool removeWhitespace = true)
        {
            string s = "";
            if (null == dict || 0 == dict.Count || string.IsNullOrEmpty(key))
                return s;
            foreach (var item in dict)
            {
                if (0 == string.Compare(item.Key, key, ignoreCase) && item.Value != null)
                {
                    s = removeWhitespace ? item.Value.ToString().Replace(" ", "") : item.Value.ToString();
                    break;
                }
            }
            return s;
        }

        private static List<string> CheckRelation(string featureclass, Dictionary<string, object> dict, List<RuleRelation> lsRule)
        {
            int nA = -1;
            for (int n = 0; n < lsRule.Count; n++)
            {
                int m = lsRule[n].FeatureClassNames.FindIndex((e) => { return 0 == string.Compare(e, featureclass, true); });
                if (m >= 0)
                {
                    nA = n;
                    break;
                }
            }
            if (nA < 0)
                return null;

            List<string> ls = new List<string>();
            List<RuleRelationItem> lsRuleItem = lsRule[nA].RuleItems;
            foreach (var item in lsRuleItem)
            {
                if (string.IsNullOrEmpty(item.ShortField) || string.IsNullOrEmpty(item.LongField) || item.FromIndex <= 0 || item.ToIndex <= 0 || item.FromIndex > item.ToIndex)
                {
                    Log.Loging.Info(string.Format("关联检查配置文件有误。Long = {0}, Short = {1}, From = {2} ,To = {3}", item.LongField, item.ShortField, item.FromIndex, item.ToIndex));
                    continue;
                }
                string sShortLengthValue = GetValueToString(dict, item.ShortField);
                string sLongLengthValue = GetValueToString(dict, item.LongField);
                if (string.IsNullOrEmpty(sShortLengthValue) || string.IsNullOrEmpty(sLongLengthValue))
                {
                    Log.Loging.Info(string.Format("有数据为空。{0} = {1}, {2} = {3}", item.ShortField, sShortLengthValue, item.LongField, sLongLengthValue));
                    continue;
                }
                if (sLongLengthValue.Length < item.ToIndex)
                {
                    Log.Loging.Info(string.Format("数据有误,{0} 字段取值 {1} 未能超过索引长度 {2}", item.LongField, sLongLengthValue, item.ToIndex));
                    continue;
                }
                string sSubString = sLongLengthValue.Substring(item.FromIndex - 1, item.ToIndex - item.FromIndex + 1);
                if (0 != string.Compare(sShortLengthValue, sSubString, true))
                {
                    if (item.FromIndex == item.ToIndex)
                        ls.Add(string.Format("字段 {0} 取值不为字段 {1} 取值的第 {2} 位", item.ShortField, item.LongField, item.FromIndex));
                    else
                        ls.Add(string.Format("字段 {0} 取值不为字段 {1} 取值的第 {2} 位至第 {3} 位", item.ShortField, item.LongField, item.FromIndex, item.ToIndex));
                }
            }
            return ls;
        }

        private static List<string> CheckRestriction(string featureclass, Dictionary<string, object> dict, List<RuleRestriction> lsRule)
        {
            int nA = -1;
            for (int n = 0; n < lsRule.Count; n++)
            {
                int m = lsRule[n].FeatureClassNames.FindIndex((e) => { return 0 == string.Compare(e, featureclass, true); });
                if (m >= 0)
                {
                    nA = n;
                    break;
                }
            }
            if (nA < 0)
                return null;
            List<string> ls = new List<string>();
            List<RuleRestrictionItem> lsRuleItem = lsRule[nA].RuleItems;
            foreach (var item in lsRuleItem)
            {
                if (string.IsNullOrEmpty(item.Trunk) || null == item.Branches || 0 == item.Branches.Count)
                {
                    Log.Loging.Info("主干字段配置有误");
                    continue;
                }
                string sTrunkFieldValue = GetValueToString(dict, item.Trunk);
                if (string.IsNullOrEmpty(sTrunkFieldValue))
                {
                    Log.Loging.Info(string.Format("不包含字段 {0} 或取值为空", item.Trunk));
                    continue;
                }
                foreach (var branch in item.Branches)
                {
                    if (string.IsNullOrEmpty(branch))
                    {
                        Log.Loging.Info("分支字段配置有误");
                        continue;
                    }
                    string sBrunchFieldValue = GetValueToString(dict, branch);
                    if (string.IsNullOrEmpty(sBrunchFieldValue))
                        ls.Add(string.Format("字段 {0} 不为空时要求字段 {1} 也不能为空", item.Trunk, branch));
                }
            }
            return ls;
        }

        private static List<string> CheckValue(string featureclass, Dictionary<string, object> dict, List<RuleValue> lsRule)
        {
            int nA = -1;
            for (int n = 0; n < lsRule.Count; n++)
            {
                int m = lsRule[n].FeatureClassNames.FindIndex((e) => { return 0 == string.Compare(e, featureclass, true); });
                if (m >= 0)
                {
                    nA = n;
                    break;
                }
            }
            if (nA < 0)
                return null;
            List<string> ls = new List<string>();
            List<RuleValueItem> lsRuleItem = lsRule[nA].RuleItems;
            foreach (var aPair in dict)
            {
                RuleValueItem fieldRule = null;
                for (int k = 0; k < lsRuleItem.Count; k++)
                {
                    if (0 == string.Compare(lsRuleItem[k].FieldName, aPair.Key, true))
                    {
                        fieldRule = lsRuleItem[k];
                        break;
                    }
                }
                if (null == fieldRule)
                    continue;

                string sValue = "";
                if (null != aPair.Value)
                    sValue = aPair.Value.ToString().Replace(" ", "");

                if (!fieldRule.Nullable)
                {
                    if (string.IsNullOrEmpty(sValue))
                    {
                        ls.Add(string.Format("字段 {0} 取值不允许非空", aPair.Key));
                        continue;
                    }
                }

                if (!string.IsNullOrEmpty(sValue) && null != fieldRule.RuleOfCollection)
                {
                    if (null != fieldRule.RuleOfCollection.Items && 0 < fieldRule.RuleOfCollection.Items.Count && !string.IsNullOrEmpty(fieldRule.RuleOfCollection.Seperator))
                    {
                        char[] cSeperator = fieldRule.RuleOfCollection.Seperator.ToCharArray();
                        string[] arrayValue = sValue.Split(cSeperator, StringSplitOptions.RemoveEmptyEntries);
                        foreach (var item in arrayValue)
                        {
                            if (0 > fieldRule.RuleOfCollection.Items.FindIndex(e => { return 0 == string.Compare(item, e, true); }))
                            {
                                ls.Add(string.Format("字段 {0} 取值不在指定的集合范围内", aPair.Key));
                                break;
                            }
                        }
                    }
                }
                if (!string.IsNullOrEmpty(sValue) && !string.IsNullOrEmpty(fieldRule.RegExp))
                {
                    if (!(new Regex(fieldRule.RegExp).IsMatch(sValue)))
                        ls.Add(string.Format("字段 {0} 取值不符合规范", aPair.Key));
                }
            }
            return ls;
        }

    }
}

调用的地方,即接口处实现如下:

        /// <summary>
        /// 属性质检(可配置式)
        /// </summary>
        /// <returns>质检结果</returns>
        /// <status>可用</status>
        [HttpPost]
        [ResponseType(typeof(List<CheckFieldsResponseBody>))]
        public IHttpActionResult CheckFields2([FromBody]List<CheckFields> param)
        {
            try
            {
                List<CheckFieldsResponseBody> lsResult = new List<CheckFieldsResponseBody>() { };
                foreach (var item in param)
                {
                    CheckFieldsResponseBody aResponse = new CheckFieldsResponseBody() { Layer = item.Layer, Information = new List<CheckFieldsResult>() };
                    foreach (var feature in item.Feature)
                        aResponse.Information.Add(CheckValueHelper.Check(aResponse.Layer, feature));
                    lsResult.Add(aResponse);
                }
                return Json(new JObject(new JProperty("status", 0), new JProperty("result", JToken.FromObject(lsResult))));
            }
            catch (Exception e)
            {
                ExceptionHelper.LogActionException(e);
                return Json(new ResponseInfo() { StatusCode = 1, Message = e.Message });
            }
        }


手把手教你用VSCode+SDL在Ubuntu上跑LVGL8.2模拟器(附插件清单) 本文详细介绍了在Ubuntu系统上使用VSCode和SDL库搭建LVGL8.2模拟器环境的完整流程,特别适合嵌入式开发者(如全志F1C100s平台)进行UI设计验证。从环境配置、项目编译到VSCode深度集成,提供了实用技巧和常见问题解决方案,帮助开发者实现'先模拟后真机'的高效开发模式。 阅读详情

相关推荐

RoboMaster新手必看:用STM32 HAL库搞定大疆M3508电机正反转(附完整代码)

本文详细介绍了如何使用STM32 HAL库驱动大疆M3508电机实现正反转控制,包括硬件准备、PWM配置、电机校准及完整代码实现。特别针对RoboMaster新手常见问题提供了解决方案,如电机抖动、不转等故障排查,并分享了缓启动、DMA更新等进阶技巧,帮助开发者快速掌握电机控制核心技术。

weixin_42519985的博客 228

用C#写一个灵活的要素Feature属性Properties质检WebAPI接口(二)

本文主要介绍质检规则的配置。CheckValue.json属性取值质检规则(单一字段)[ { "featureclass": [ "ZD_SHYQ", "ZD_SHYQ_WRK" ], "rule": [ { "name": "ZDTZM&q

a_dev的专栏 494

【 Git学习记录(三)】推荐四款主流的Git代码托管平台 —— GitHub、GitLab、Gitee、Coding

了解过Git之后,作为一个程序猿最基本的,你还需要了解目前主流的在线代码托管平台,并至少选择其中一款在平时开发中使用。这里特别介绍以下四款: 国外平台 GitHub —— 全球最流行的代码托管平台 GitLab —— 基于git的仓库管理程序 国内平台 Gitee —— 开源中国旗下的代码托管平台 Coding —— 支持社交元素的代码托管平台 一. GitHub 链接地址:https://github.com/ GitHub目前是全球最流行的代码托管平台(别称:全球最大的同性交友.

JZevin的博客 6094

C#从零开始的学习笔记(5)命名空间

文章目录概述命名空间的定义访问命名空间命名空间别名 概述 .NET Framework类库包含大量的类型,并且用户也能够自定义类型。为了有效组织C#程序中的类型以及保证其唯一性,C#引入了命名空间的概念,从而最大限度地避免类型重名的错误。 与通常的文件或者组件不同,命名空间是一种逻辑组合。在C#文件中定义类时,可以把它包括在命名空间定义中。C#程序中类型有指示逻辑层次结构完全限定名(fully qualified name)描述,例如Dtcloud.Test1.HelloWorld 表示Dtcloud命名空

DTCloud 1560

无实习经验?IT应届生简历封神思路:把校园经历写成offer收割机

摘要: IT应届生无实习经历如何打造竞争力简历?本文揭秘“无实习简历封神指南”,通过四大步骤将校园经历转化为HR认可的硬核技能: 素材挖掘:课程设计、个人项目、社团活动、竞赛证书都是隐藏的“实战经验”,用STAR法则细化成果。 技能转化:匹配岗位JD关键词,用“动词+量化结果”包装经历(如“优化查询效率30%”)。 避坑指南:避免流水账、夸大技能或堆砌无关经历,聚焦技术能力与岗位需求。 核心逻辑:HR看重潜力而非经验,用校园经历证明学习能力、问题解决能力和技术落地能力。 无实习≠无竞争力,学会“翻译”经历,

通俗易懂学IT 424

电磁阀颤振工作原理

颤振 颤振,弹性结构在均匀气(或液)流中受到空气(或液体)动力、弹性力和惯性力(见达朗伯原理)的耦合作用而发生的大幅度振动,它是气动弹性力学中最重要的问题之一。 随着机电液一体化技术的发展,电液比例控制技术的应用越来越广泛。电液比例控制系统范围较广,在液压传动与控制过程中,系统能够接受模拟信号或数字信号,使输出的流量或压力连续成比例地变化,都属于此类。该控制系统的优点是充分利用了液压控制与电气控制的长处,即功率传递靠液压,信号处理靠电气的优化措施。 电液比例控制原理与要求 液压控制系统中两个最重要的被控参数

小幽余生不加糖 1万+

C#.net 地图控件开发(八) 地图要素Feature

地图要素         地图要素(Feature)是构成地图图层的最小单元,它包括地物的几何形状,符号和描述信息。描述信息可以做成数据表的形式存储在图层类中,符号也可以存储在图层类中作为默认的要素符号,但是为了在图层中突出表示某个特殊的地物,所以在地图要素中也增加了符号属性。 要素类         作用:描述单个地物的图形信息和属性信息。         类:除了包括几何图形和符号外,

jackjian的专栏 2324

团体程序设计天梯赛竞赛题--登顶题【L3-042 污染大亨】

登顶级 3 道题,每道题 30 分,满分为 90 分。

Pretty Boy Fox的博客 1361

C# 使用AE获取feature的属性及字段操作

我就废话不多说了,大家还是直接看代码吧~ public static DataTable GetFeatureDataTable(IFeature pFeature) { DataTable dt = new DataTable(); dt.Columns.Add("位置:"); dt.Columns.Add("数据:"); for (int i = 0; i < pFeature.Fields.FieldCount; i++) {

chinaherolts2008的博客 1255

3、Tone Mapping色调映射(Advanced High Dynamic Range Imaging )

3、Tone Mapping色调映射(Advanced High Dynamic Range Imaging) 如今,大多数可用的显示设备无法本地显示HDR内容。 入门级显示器的对比度仅为200:1。 尽管高端液晶电视具有更高的对比度,但平均对比度约为10,000:1,但通常每个色彩通道的离散度为8位,很少为10位。 这意味着色调限制为255。在过去的二十年中,研究人员花费了大量时间和精力来压缩HDR图像和视频的范围,以便可以在LDR显示器上更“自然”地看到数据。 图3.1 色调映射和真实场景之间.

ISP行业的忠实粉丝 1866

【N32L40X】学习笔记12-规则组+注入组+外部触发启动

使用定时器触发规则通道开始采集数据,采集完成后使用dma传输数据,并启动注入通道转换数据,注入通道转换完成后产生中断,中断中读物注入通道数据。

Car12 425

用C#写一个灵活的要素Feature属性Properties质检WebAPI接口(四)

本文主要介绍接口的调用。接口页面测试参数[ { "layer": "ZRZ", "feature": [ { "type": "Feature", "geometry": null, "properties":

a_dev的专栏 351

华为OD机试真题 新系统 9月16号 【统计特殊数字】

华为OD新系统机试真题【统计特殊数字】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【统计特殊数字】。

qq_45776114的博客 778

用C#写一个灵活的要素Feature属性Properties质检WebAPI接口(一)

需求概述某项目中,要对宗地、自然幢数据进行质检。质检规则非常多,大致可以分为几类:一是要求某一属性字段值要么为空,要么为指定值;二是要求为某一属性字段值要么为空,要么从指定的集合中取值;三是要求当某一字段取值不为空时,某些字段也不能为空;四是要求当某一字段取值不为空,某一字段的取值必须为该字段值的某一位或某几位。设计思路把规则搞成配置文件,程序只负责解析规则,检查数据,以及输出结果。上述规则中,前...

a_dev的专栏 394

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C#AE获得feature的属性及字段

public static DataTable GetFeatureDataTable(IFeature pFeature) { DataTable dt = new DataTable(); dt.Columns.Add("位置:"); dt.Columns.Add("数据:"); ...

西柚2015地信小白GISer 2106

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

查询Feature的名称及ID

List<Guid> featIDs = new List<Guid>(); var dd = from i in SPFarm.Local.FeatureDefinitions where i != null && i.RootDirectory.Contains("NanmuThe...

weixin_34198762的博客 765

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Feature的命名规则

一直不是很了解feature的命名规则是什么,直到最近遇到一个名称很长的feature在用ps active的时候,想了一小会,还是觉得看下比较好 最终,我发现,feature的名字的命名规则是 projectname_featurename 比如说,一个项目的名字是 ABCSolutions.A.B.C, 它里面一个featuree的名字是NoticeBoard Feature,那么

cindoralla的专栏 2364

IFeatureClass --1

IFeatureClass 用于访问控制要素类行为和属性的成员 IFeatureClass接口是获取和设置要素类属性的主要接口。例如,使用IFeatureClass接口获取要素类类型、获取满足查询条件的要素数目或在要素类中创建新要素。IFeatureClass接口继承了IObjectClass接口。 成员 AddField         向这个类中添加一个字段。 AddIndex

jojojojo2002的专栏 1931

关于获得IFeature的属性字段

IGeometricNetwork,NetworkAnalysis,IEIDHelepr,IEnumEIDInfo,IEIDInfo

Sean的专栏 8301

C# 4.0 Features

C# is a language we work on regularly, it is a language that we love the most. It is always good to see updates to such a lovely language which is very common to most of us. C# 4.0 after its release

张彤的专栏 1160

C# GIS库 NetTopologySuite shp 转 geojson

将ShapeFile 读取为 FeatureCollection: public bool ShpToFeatureCollection1(string filename, out FeatureCollection collection) { collection = null; try ...

weixin_30333885的博客 1469

Arcengine编辑要素属性

AE中编辑要素属性     在Arcgis二次开发中经常用到对feature属性的编辑等工作,而对于从IFeaturelayer中QI得到的Itable填充C#中的datagridview,在修改数据后如何保存数据?网上的示例多数讲的是打开一个Iworkspace后进行编辑工作,而这对上面这种情况来说没多大关联性。因此,应该寻找一个直接的方法,保存在datagridview的数据修改。现将本

GIS探索者 6337

基于C#的MapInfo开发时常用的命名空间总结

命名空间:  MapInfo.DataMapInfo.Data 命名空间包含了实现 MapInfo .NET 数据提供方的类和接口。 对 MapInfo 数据的访问有两种形式:作为使用 SQL 与数据交互的 ADO.NET 数据提供程序和作为使用类与数据交互的 Feature 对象。 MapInfo ADO.NET 数据提供方是使用 MIConnection、M

it114的专栏 2234

地籍数据属性质检功能设计与实现

要质检的数据包括使用权宗地、所有权宗地、自然幢,属性质检规则如下:使用权宗地、所有权宗地属性质检项如下:1.       必填项区县代码(QXDM)、宗地特征码(ZDTZM)、坐落(ZL)、定着物特征码(DZWTZM)、权力人(QLR)、面积单位(MJDW)。2.       字段限制1)       要素代码(YSDM)为空,或不为空必须是10位数字组成;2)       宗地代码(ZDDM)为...

a_dev的专栏 3340

C# 6.0 Feature list

FeatureExampleC#VB Auto-property initializers public int X { get; set; }= x; Added Exists Getter-only auto-properties public int Y{ get; }= y; Added Added Ctor assignmen...

weixin_30652491的博客 148
上一篇: 用C#写一个灵活的要素Feature属性Properties质检WebAPI接口(二)
下一篇: 用C#写一个灵活的要素Feature属性Properties质检WebAPI接口(四)
acngiser
博客等级 码龄15年 118粉丝 214原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值