コード例 #1
0
        private void FillUniqueValues()
        {
            if (_tc == null)
            {
                return;
            }
            lstUniqueValues.Items.Clear();
            if (lstFields.SelectedItem == null)
            {
                return;
            }

            string colName = lstFields.SelectedItem.ToString();

            colName = colName.Replace("[", String.Empty).Replace("]", String.Empty); // Joined Fields
            IField field = _tc.FindField(colName);

            if (field == null)
            {
                return;
            }

            List <string> list;

            if (_values.TryGetValue(colName, out list))
            {
                foreach (string val in list)
                {
                    if (field.type == FieldType.String)
                    {
                        lstUniqueValues.Items.Add("'" + val + "'");
                    }
                    else
                    {
                        lstUniqueValues.Items.Add(val);
                    }
                }
            }
            else
            {
                foreach (DataRow row in _table.Table.Select("", colName))
                {
                    string val = row[colName].ToString();
                    if (field.type == FieldType.String)
                    {
                        val = "'" + val + "'";
                    }
                    if (lstUniqueValues.Items.IndexOf(val) != -1)
                    {
                        continue;
                    }

                    lstUniqueValues.Items.Add(val);
                }
            }
        }
コード例 #2
0
        public FormSelectFields(ITableClass tcFrom, ITableClass tcTo)
        {
            InitializeComponent();

            if (tcFrom == null || tcTo == null ||
                tcFrom.Fields == null || tcTo.Fields == null)
            {
                return;
            }

            foreach (IField field in tcFrom.Fields.ToEnumerable())
            {
                if (field == null ||
                    field.type == FieldType.ID || field.type == FieldType.Shape ||
                    tcTo.FindField(field.name) != null)
                {
                    continue;
                }
                lstBox.Items.Add(new FieldItem(field), true);
            }
        }
コード例 #3
0
ファイル: MapServerHelper.cs プロジェクト: am2222/gViewGisOS
        public static bool ModifyFilter(IServiceMap map, ITableClass tClass, IQueryFilter filter)
        {
            if (filter == null || tClass == null)
            {
                return(false);
            }
            string subFields = filter.SubFields;

            if (subFields != "*")
            {
                filter.SubFields = String.Empty;
                foreach (string subField in subFields.Split(' '))
                {
                    string fname = subField;
                    if (subFields.StartsWith(filter.fieldPrefix) &&
                        subFields.EndsWith(filter.fieldPostfix))
                    {
                        fname = fname.Substring(filter.fieldPrefix.Length, fname.Length - filter.fieldPrefix.Length - filter.fieldPostfix.Length);
                    }

                    if (tClass.Fields != null)
                    {
                        if (tClass.FindField(fname) != null ||
                            (tClass is IFeatureClass && ((IFeatureClass)tClass).ShapeFieldName == fname))
                        {
                            filter.AddField(fname);
                        }
                    }
                }
            }

            try
            {
                XmlDocument xmlFilter = new XmlDocument();
                string      xml       = Xml.ToXml(tClass, filter);
                xmlFilter.LoadXml(xml);

                XmlNodeList propertyNames = xmlFilter.SelectNodes("//PropertyName");

                foreach (XmlNode propertyName in propertyNames)
                {
                    if (propertyName.InnerText == MergedObjectIDName)
                    {
                        XmlNode literal = propertyName.ParentNode.SelectSingleNode("Literal");
                        if (literal == null)
                        {
                            return(false);
                        }

                        long mergedID;
                        if (!long.TryParse(literal.InnerText, out mergedID))
                        {
                            return(false);
                        }
                        int classID = GetClassID(map, tClass), propertyClassID = GetClassID(mergedID);

                        if (classID != propertyClassID)
                        {
                            propertyName.ParentNode.ParentNode.RemoveChild(propertyName.ParentNode);
                            continue;
                        }
                        propertyName.InnerText = tClass.IDFieldName;
                        literal.InnerText      = GetObjectID(mergedID).ToString();
                    }
                    else if (tClass.Fields.FindField(propertyName.InnerText) == null)
                    {
                        propertyName.ParentNode.ParentNode.RemoveChild(
                            propertyName.ParentNode);
                    }
                }

                // keine Properties übgrig geblieben sind -> nicht abfraten...
                if (propertyNames.Count > 0 && xmlFilter.SelectNodes("//PropertyName").Count == 0)
                {
                    return(false);
                }
                IQueryFilter f = Xml.FromXml(tClass, xmlFilter.SelectSingleNode("Filter"));

                // Prüfen, ob vom Filter noch was übrig bleibt...
                if (!String.IsNullOrEmpty(filter.WhereClause) &&
                    String.IsNullOrEmpty(f.WhereClause))
                {
                    return(false);
                }

                filter.WhereClause = f.WhereClause;
            }
            catch { return(false); }
            return(true);
        }
コード例 #4
0
        public SdeQueryInfo(ArcSdeConnection connection, ITableClass tc, IQueryFilter filter)
        {
            if (tc == null)
            {
                return;
            }

            try
            {
                if (filter is ISpatialFilter && ((ISpatialFilter)filter).Geometry != null && tc is IFeatureClass && tc.Dataset is SdeDataset)
                {
                    SE_ENVELOPE maxExtent = new SE_ENVELOPE();
                    SE_COORDREF coordRef  = ((SdeDataset)tc.Dataset).GetSeCoordRef(connection, tc.Name, ((IFeatureClass)tc).ShapeFieldName, ref maxExtent);
                    if (((SdeDataset)tc.Dataset).lastErrorMsg != "")
                    {
                        return;
                    }

                    _isSpatial = true;
                    _err_no    = Wrapper92.SE_shape_create(coordRef, ref _shape);
                    ((SdeDataset)tc.Dataset).FreeSeCoordRef(coordRef);
                    if (_err_no != 0)
                    {
                        return;
                    }

                    //IEnvelope env = ((ISpatialFilter)filter).Geometry.Envelope;
                    //SE_ENVELOPE seEnvelope = new SE_ENVELOPE();

                    //seEnvelope.minx = Math.Max(env.minx, maxExtent.minx);
                    //seEnvelope.miny = Math.Max(env.miny, maxExtent.miny);
                    //seEnvelope.maxx = Math.Min(env.maxx, maxExtent.maxx);
                    //seEnvelope.maxy = Math.Min(env.maxy, maxExtent.maxy);

                    //if (seEnvelope.minx == seEnvelope.maxx && seEnvelope.miny == seEnvelope.maxy)
                    //{
                    //    /* fudge a rectangle so we have a valid one for generate_rectangle */
                    //    /* FIXME: use the real shape for the query and set the filter_type
                    //       to be an appropriate type */
                    //    seEnvelope.minx = seEnvelope.minx - 0.001;
                    //    seEnvelope.maxx = seEnvelope.maxx + 0.001;
                    //    seEnvelope.miny = seEnvelope.miny - 0.001;
                    //    seEnvelope.maxy = seEnvelope.maxy + 0.001;
                    //}

                    //_err_no = Wrapper92.SE_shape_generate_rectangle(ref seEnvelope, _shape);
                    _err_no = gView.SDEWrapper.Functions.SE_GenerateGeometry(_shape, ((ISpatialFilter)filter).Geometry, maxExtent);
                    if (_err_no != 0)
                    {
                        return;
                    }

                    _seFilter.shape = _shape;

                    /* set spatial constraint column and table */
                    _seFilter.table  = tc.Name.PadRight(CONST.SE_QUALIFIED_TABLE_NAME, '\0');;
                    _seFilter.column = ((IFeatureClass)tc).ShapeFieldName.PadRight(CONST.SE_MAX_COLUMN_LEN, '\0');

                    /* set a couple of other spatial constraint properties */
                    _seFilter.method      = (((ISpatialFilter)filter).SpatialRelation == spatialRelation.SpatialRelationEnvelopeIntersects) ? CONST.SM_ENVP_BY_GRID /*CONST.SM_AI*/ : CONST.SM_AI;
                    _seFilter.filter_type = CONST.SE_SHAPE_FILTER;
                    _seFilter.truth       = true; // True;
                }

                _err_no = Wrapper92.SE_queryinfo_create(ref _queryInfo);
                if (_err_no != 0)
                {
                    return;
                }

                _err_no = Wrapper92.SE_queryinfo_set_tables(_queryInfo, 1, new string[] { tc.Name }, null);
                if (_err_no != 0)
                {
                    return;
                }

                string [] fields;
                if (filter.SubFields == "" || filter.SubFields == "*" || filter.SubFields == null)
                {
                    StringBuilder subFields = new StringBuilder();
                    foreach (IField field in tc.Fields.ToEnumerable())
                    {
                        if (subFields.Length != 0)
                        {
                            subFields.Append(" ");
                        }
                        subFields.Append(tc.Name + "." + field.name);
                        _queryFields.Add(field);
                    }
                    fields = subFields.ToString().Split(' ');
                }
                else
                {
                    fields = filter.SubFields.Split(' ');
                    foreach (string fieldname in fields)
                    {
                        string fname = fieldname;
                        if (fieldname.ToLower().IndexOf("distinct(") == 0)
                        {
                            fname = fieldname.Substring(9, fieldname.IndexOf(")") - 9);
                        }

                        IField field = tc.FindField(fname);
                        if (field == null)
                        {
                            _errMsg = "Can't get Field " + fname;
                            Cleanup();
                            return;
                        }
                        _queryFields.Add(field);
                    }
                }

                _err_no = Wrapper92.SE_queryinfo_set_columns(_queryInfo, fields.Length, fields);
                if (_err_no != 0)
                {
                    return;
                }

                string where = "";
                if (filter != null)
                {
                    if (filter is IRowIDFilter)
                    {
                        where = ((IRowIDFilter)filter).RowIDWhereClause;
                    }
                    else
                    {
                        where = filter.WhereClause;
                    }
                }
                if (where != "")
                {
                    _err_no = Wrapper92.SE_queryinfo_set_where_clause(_queryInfo, where);
                    if (_err_no != 0)
                    {
                        return;
                    }
                }

                _err_no = Wrapper92.SE_queryinfo_set_query_type(_queryInfo, CONST.SE_QUERYTYPE_JSFA);
                if (_err_no != 0)
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                _errMsg = "SeQueryInfo:" + ex.Message + "\n" + ex.StackTrace;
                _err_no = -1;
            }
            finally
            {
                if (_err_no != 0)
                {
                    _errMsg = Wrapper92.GetErrorMsg(new SE_CONNECTION(), _err_no);
                    Cleanup();
                }
            }
        }
コード例 #5
0
ファイル: Xml.cs プロジェクト: jugstalt/gview5
        private static string ParseWFSFilterNode(ITableClass fc, XmlNode node, XmlNamespaceManager ns)
        {
            //if(fc==null)
            //    throw new ArgumentException("ParseWFSFilterNode: FeatureClass is null...");
            if (node == null)
            {
                return(String.Empty);
            }

            string op = String.Empty;

            switch (node.Name)
            {
            case "PropertyIsEqualTo":
                op = "=";
                break;

            case "PropertyIsLike":
                op = " like ";
                break;

            case "PropertyIsGreaterThan":
                op = ">";
                break;

            case "PropertyIsGreaterThanOrEqualTo":
                op = ">=";
                break;

            case "PropertyIsLessThan":
                op = "<";
                break;

            case "PropertyIsLessThanOrEqualTo":
                op = "<=";
                break;

            case "PropertyIsNotEqualTo":
                op = "<>";
                break;

            default:
                throw new Exception("Unknown operation: " + node.Name + ". Xml is case sensitive.");
            }

            XmlNodeList propertyName = (ns != null) ? node.SelectNodes("OGC:PropertyName", ns) : node.SelectNodes("PropertyName");

            if (propertyName.Count > 1)
            {
                throw new Exception("More than one PropertyName in Property: " + node.OuterXml);
            }
            if (propertyName.Count == 0)
            {
                throw new Exception("No PropertyName in Property: " + node.OuterXml);
            }
            XmlNodeList Literal = (ns != null) ? node.SelectNodes("OGC:Literal", ns) : node.SelectNodes("Literal");

            if (Literal.Count > 1)
            {
                throw new Exception("More than one Literal in Property: " + node.OuterXml);
            }
            if (Literal.Count == 0)
            {
                throw new Exception("No Literal in Property: " + node.OuterXml);
            }

            string fieldname  = propertyName[0].InnerText;
            string fieldvalue = Literal[0].InnerText;

            if (fc != null)
            {
                IField field = fc.FindField(fieldname);
                if (field == null)
                {
                    throw new Exception("Type " + fc.Name + " do not has field " + fieldname);
                }

                switch (field.type)
                {
                case FieldType.String:
                    fieldvalue = "'" + fieldvalue + "'";
                    break;

                case FieldType.Date:
                    fieldvalue = "'" + fieldvalue + "'";
                    break;
                }
            }

            return(fieldname + op + fieldvalue);
        }