예제 #1
0
        //http://resources.esri.com/help/9.3/arcgisengine/arcobjects/esriGeoDatabase/IFeatureWorkspace.CreateFeatureClass_Example.htm
        static IFeatureClass CreateFeatureClass(string name, IFeatureWorkspace ftrSpc, esriGeometryType type, int epsg, List<dynamic> extraFields)
        {
            IFeatureClass ftrc = null;
            if(null != ftrSpc && null != name)
            {
                IFieldsEdit flds = new FieldsClass();
                flds.FieldCount_2 = 2 + (extraFields == null ? 0 : extraFields.Count);

                IFieldEdit fld = new FieldClass();
                fld.Name_2 = OBJECT_ID;
                fld.Type_2 = esriFieldType.esriFieldTypeOID;
                flds.Field_2[0] = fld;

                fld = new FieldClass();
                fld.Name_2 = SHP_NAME;
                fld.Type_2 = esriFieldType.esriFieldTypeGeometry;
                fld.GeometryDef_2 = CreateGeometryDef(type, epsg);
                flds.Field_2[1] = fld;
                int eidx = 2;
                foreach(var efld in extraFields)
                {
                    fld = new FieldClass();
                    fld.Name_2 = efld.Name;
                    fld.Type_2 = efld.Type;
                    flds.Field_2[eidx++] = fld;
                }
                ftrc = ftrSpc.CreateFeatureClass(name, flds, null, null, esriFeatureType.esriFTSimple, SHP_NAME, null);
            }
            return ftrc;
        }
예제 #2
0
 static IGeometryDefEdit CreateGeometryDef(esriGeometryType type, int epsg)
 {
     IGeometryDefEdit geomDef = new GeometryDefClass();
     geomDef.GeometryType_2 = type;
     geomDef.SpatialReference_2 = CreateSpatialRef(epsg);
     return geomDef;
 }
예제 #3
0
파일: GDBData.cs 프로젝트: chinasio/minegis
        public static IFeatureClass CreateFClassInPDB(IWorkspace accessworkspace, string feaDSname, string FCname, esriGeometryType esriGeometryType,ISpatialReference sprf)
        {
            try
            {
                IFeatureDataset featureDataset = ((IFeatureWorkspace)accessworkspace).OpenFeatureDataset(feaDSname);
                //IGeoDataset geoDataset = featureDataset as IGeoDataset;

                IFields pFields = new FieldsClass();
                IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;
                IField pField = new FieldClass();
                IFieldEdit pFieldEdit = pField as IFieldEdit;
                pFieldEdit.Name_2 = "SHAPE";
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

                IGeometryDef pGeometryDef = new GeometryDefClass();
                IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
                pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
                pFieldEdit.GeometryDef_2 = pGeometryDef;
                pFieldsEdit.AddField(pField);

                IFeatureClass fc = featureDataset.CreateFeatureClass(FCname, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
                return fc;
            }

            catch (Exception ee)
            {
                MessageBox.Show(ee.Message.ToString());
                return null;
            }
        }
		public SimplePointCursor(string filePath, IFields fields, int OID, 
			System.Array fieldMap, IEnvelope queryEnv, esriGeometryType geomType)	
		{
			//HIGHLIGHT: 0 - Set up cursor
			m_bIsFinished = false;
			m_pStreamReader = new System.IO.StreamReader(filePath);
			m_fields = fields;
			m_iOID = OID;
			m_fieldMap = fieldMap;
			m_searchEnv = queryEnv;
			switch (geomType)
			{
				case esriGeometryType.esriGeometryPolygon:
					m_wkGeom = new Polygon() as IGeometry;
					m_workPts = new PointClass[5];
					for (int i = 0; i < m_workPts.Length; i++)
						m_workPts[i] = new PointClass();
					break;
				case esriGeometryType.esriGeometryPolyline:
					m_wkGeom = new PolylineClass() as IGeometry;
					m_workPts = new PointClass[5];
					for (int i = 0; i < m_workPts.Length; i++)
						m_workPts[i] = new PointClass();
					break;
				
				case esriGeometryType.esriGeometryPoint:
					m_wkGeom = new PointClass() as IGeometry;
					break;
				default:	//doesn't need to set worker geometry if it is table 
					break;
			}

			//advance cursor so data is readily available
			this.NextRecord();
		}
 public FeatureExtractionResult(string ParamName, int TotalCount, double? TotalMeasure, double? TotalValue,
     Dictionary<string,int> CategoryCounts, Dictionary<string,double> CategoryMeasures,
     Dictionary<string,double> CategoryTotals,esriGeometryType ExtractionType)
 {
     this.m_successful = true;
     this.m_paramName = ParamName;
     // all parameters except for totalcount can be null
     // i.e. in the case where we have just counted the total number of points with no categories
     // or values
     this.m_totalcount = TotalCount;
     if (TotalMeasure.HasValue)
     {
         this.m_totalmeasure = TotalMeasure.Value;
         this.m_hasmeasures = true;
     }
     else
     {
         this.m_totalmeasure = -1;
         this.m_hasmeasures = false;
     }
     if (TotalValue.HasValue)
     {
         this.m_totalvalue = TotalValue.Value;
         this.m_hasvalues = true;
     }
     else
     {
         this.m_totalvalue = -1;
         this.m_hasvalues = false;
     }
     this.m_categorycounts = CategoryCounts;
     if (CategoryCounts != null)
     {
         this.m_hascategories = true;
     }
     else
     {
         this.m_hascategories = false;
     }
     this.m_categorymeasures = CategoryMeasures;
     if (CategoryMeasures != null)
     {
         this.m_hasmeasures = true;
     }
     else
     {
         // it must be points
         this.m_hasmeasures=false;
     }
     this.m_ExtractionType = ExtractionType;
     this.m_categorytotals = CategoryTotals;
     this.m_errormessage = "No errors occurred";
 }
예제 #6
0
        public GeometryDef(IXPathNavigable path) : base(path) {
            // Get Navigator
            XPathNavigator navigator = path.CreateNavigator();

            // <AvgNumPoints></AvgNumPoints>
            XPathNavigator navigatorAvgNumPoints = navigator.SelectSingleNode(Xml.AVGNUMPOINTS);
            if (navigatorAvgNumPoints != null) {
                this._avgNumPoints = navigatorAvgNumPoints.ValueAsInt;
            }

            // <GeometryType></GeometryType>
            XPathNavigator navigatorGeometryType = navigator.SelectSingleNode(Xml.GEOMETRYTYPE);
            if (navigatorGeometryType != null) {
                this._geometryType = (esriGeometryType)Enum.Parse(typeof(esriGeometryType), navigatorGeometryType.Value, true);
            }

            // <HasM></HasM>
            XPathNavigator navigatorHasM = navigator.SelectSingleNode(Xml.HASM);
            if (navigatorHasM != null) {
                this._hasM = navigatorHasM.ValueAsBoolean;
            }

            // <HasZ></HasZ>
            XPathNavigator navigatorHasZ = navigator.SelectSingleNode(Xml.HASZ);
            if (navigatorHasZ != null) {
                this._hasZ = navigatorHasZ.ValueAsBoolean;
            }

            // <SpatialReference></SpatialReference>
            XPathNavigator navigatorSpatialReference = navigator.SelectSingleNode(Xml.SPATIALREFERENCE);
            this._spatialReference = new SpatialReference(navigatorSpatialReference);

            // <GridSize0></GridSize0>
            XPathNavigator navigatorGridSize0 = navigator.SelectSingleNode(Xml.GRIDSIZE0);
            if (navigatorGridSize0 != null) {
                this._gridSize0 = navigatorGridSize0.ValueAsDouble;
            }

            // <GridSize1></GridSize1>
            XPathNavigator navigatorGridSize1 = navigator.SelectSingleNode(Xml.GRIDSIZE1);
            if (navigatorGridSize1 != null) {
                this._gridSize1 = navigatorGridSize1.ValueAsDouble;
            }

            // <GridSize2></GridSize2>
            XPathNavigator navigatorGridSize2 = navigator.SelectSingleNode(Xml.GRIDSIZE2);
            if (navigatorGridSize2 != null) {
                this._gridSize2 = navigatorGridSize2.ValueAsDouble;
            }
        }
예제 #7
0
        public static IField CreateGeometryField(esriGeometryType pGT, ISpatialReference pSR, bool pHasZ)
        {
            FieldClass class2 = new FieldClass();
            IFieldEdit edit = class2;
            edit.Name_2 = "SHAPE";
            edit.AliasName_2 = "图形对象";
            edit.Type_2 = esriFieldType.esriFieldTypeGeometry;
            IGeometryDef pGeoDef = new GeometryDefClass();
            IGeometryDefEdit class3 = (IGeometryDefEdit)pGeoDef;

            class3.GeometryType_2 = pGT;
            class3.HasM_2 = false;
            class3.HasZ_2 = pHasZ;
            class3.GridCount_2 = 1;
            class3.set_GridSize(0, 1000.0);
            class3.SpatialReference_2 = pSR;
            edit.GeometryDef_2 = class3;
            return class2;
        }
        private IFeatureClass CreateFeatureClass([NotNull] string name,
                                                 esriGeometryType type,
                                                 bool zAware = false)
        {
            ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         true);

            SpatialReferenceUtils.SetXYDomain(sref, -10000, -10000, 10000, 10000,
                                              0.0001, 0.001);

            IFields fields = FieldUtils.CreateFields(
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateShapeField(
                    "Shape",
                    type,
                    sref, 1000, zAware));

            return(DatasetUtils.CreateSimpleFeatureClass(_testWs, name, fields));
        }
        public ShapeVertexCountAliasColumnInfo([NotNull] ITable table,
                                               [NotNull] string columnName)
            : base(table, columnName, typeof(int))
        {
            Assert.ArgumentNotNull(table, nameof(table));
            Assert.ArgumentNotNullOrEmpty(columnName, nameof(columnName));

            var featureClass = table as IFeatureClass;

            if (featureClass == null)
            {
                _shapeType = esriGeometryType.esriGeometryNull;
            }
            else
            {
                _baseFieldNames.Add(featureClass.ShapeFieldName);

                _shapeType = featureClass.ShapeType;
            }
        }
예제 #10
0
        /// <summary>
        /// 根据点击位置和需要的element类型,取得在该位置的给类型的element
        /// </summary>
        /// <param name="pPoint"></param>
        /// <param name="geometryType"></param>
        /// <returns></returns>
        private IElement getElement(IPoint pPoint, esriGeometryType geometryType)
        {
            IEnumElement pEnumElement = this.pGraphicContainer.LocateElements(pPoint, this.axMapControl1.ActiveView.Extent.Width / 100);

            if (pEnumElement != null)
            {
                pEnumElement.Reset();
                IElement pElement;
                for (pElement = pEnumElement.Next(); pElement != null; pElement = pEnumElement.Next())
                {
                    if (pElement.Geometry.GeometryType == geometryType)
                    {
                        this.hitElement = pElement;
                        return(pElement);
                    }
                }
                return(null);
            }
            return(null);
        }
예제 #11
0
        public static IField CreateGeometryField(esriGeometryType pGT, ISpatialReference pSR, bool pHasZ)
        {
            Field      class2 = new Field();
            IFieldEdit edit   = class2 as IFieldEdit;

            edit.Name_2      = "SHAPE";
            edit.AliasName_2 = "图形对象";
            edit.Type_2      = esriFieldType.esriFieldTypeGeometry;
            IGeometryDef     pGeoDef = new GeometryDef();
            IGeometryDefEdit class3  = (IGeometryDefEdit)pGeoDef;

            class3.GeometryType_2 = pGT;
            class3.HasM_2         = false;
            class3.HasZ_2         = pHasZ;
            class3.GridCount_2    = 1;
            class3.set_GridSize(0, 1000.0);
            class3.SpatialReference_2 = pSR;
            edit.GeometryDef_2        = class3;
            return(class2);
        }
예제 #12
0
        private static IssueFeatureWriter CreateFeatureWriter(
            [NotNull] string className,
            [NotNull] IFeatureWorkspace featureWorkspace,
            [NotNull] IIssueTableFieldManagement fields,
            esriGeometryType geometryType,
            [NotNull] ISpatialReference spatialReference,
            double gridSize1, double gridSize2, double gridSize3,
            [NotNull] string aliasName)
        {
            IFeatureClass featureClass = CreateFeatureClass(className, featureWorkspace,
                                                            fields, geometryType,
                                                            spatialReference,
                                                            gridSize1, gridSize2, gridSize3);

            DatasetUtils.TrySetAliasName(featureClass, aliasName);

            var attributeWriter = new IssueAttributeWriter((ITable)featureClass, fields);

            return(new IssueFeatureWriter(featureClass, attributeWriter));
        }
        /// <summary>
        /// pstrFieldNameLt should not contain "FID" and "Shape", these two attributes will be generated automatically
        /// </summary>
        public static IFeatureLayer SaveCGeoEb <T>(IEnumerable <T> CGeoEb, esriGeometryType pesriGeometryType, string strFileName,
                                                   List <string> pstrFieldNameLt = null, List <esriFieldType> pesriFieldTypeLt = null, List <List <object> > pobjectValueLtLt = null,
                                                   int intRed        = _intColor, int intGreen = _intColor, int intBlue = _intColor, double dblWidth = 1,
                                                   int intOutlineRed = _intColor, int intOutlineGreen = _intColor, int intOutlineBlue = _intColor,
                                                   esriSimpleLineStyle pesriSimpleLineStyle = esriSimpleLineStyle.esriSLSSolid,
                                                   esriSimpleFillStyle pesriSimpleFillStyle = esriSimpleFillStyle.esriSFSSolid, string strSymbolLayerPath = null, bool blnVisible = true)
            where T : CGeoBase
        {
            if (CGeoEb.GetEnumerator().MoveNext() == false)
            {
                return(null);
            }

            CSaveFeature pSaveFeature = new CSaveFeature(pesriGeometryType, strFileName, pstrFieldNameLt, pesriFieldTypeLt,
                                                         intRed, intGreen, intBlue, dblWidth, intOutlineRed, intOutlineGreen, intOutlineBlue,
                                                         pesriSimpleLineStyle, pesriSimpleFillStyle, strSymbolLayerPath, blnVisible);
            IFeatureLayer pFLayer = pSaveFeature.SaveCGeosToLayer(CGeoEb, pstrFieldNameLt, pobjectValueLtLt);

            return(pFLayer);
        }
예제 #14
0
        private IFeatureLayer CreateFeatureLayer(esriGeometryType pesriGeometryType, string pstrLayerName,
                                                 List <string> pstrFieldNameLt = null, List <esriFieldType> pesriFieldTypeLt = null,
                                                 int intRed        = _intColor, int intGreen = _intColor, int intBlue = _intColor, double dblWidth = 1,
                                                 int intOutlineRed = _intColor, int intOutlineGreen = _intColor, int intOutlineBlue = _intColor,
                                                 esriSimpleFillStyle pesriSimpleFillStyle = esriSimpleFillStyle.esriSFSSolid,
                                                 string strSymbolLayerPath = null, bool blnVisible = true)
        {
            var pWorkspace    = CConstants.ParameterInitialize.pWorkspace;
            var pm_mapControl = CConstants.ParameterInitialize.m_mapControl;

            pstrLayerName += CHelpFunc.GetTimeStampWithPrefix();
            IFeatureClass pFeatureClass = CreateFeatureClass(pesriGeometryType, pstrLayerName, pWorkspace, pm_mapControl,
                                                             pstrFieldNameLt, pesriFieldTypeLt);
            IFeatureLayer pFLayer = new FeatureLayerClass();

            pFLayer.FeatureClass     = pFeatureClass;
            pFLayer.Name             = pFeatureClass.AliasName;
            pFLayer.SpatialReference = pm_mapControl.SpatialReference;

            RenderLayer(ref pFLayer, pesriGeometryType, intRed, intGreen, intBlue, dblWidth,
                        intOutlineRed, intOutlineGreen, intOutlineBlue, pesriSimpleFillStyle, strSymbolLayerPath);

            //save Layer as layer file ".lyr"
            //create a new LayerFile instance
            ILayerFile layerFile = new LayerFileClass();

            //create a new layer file
            layerFile.New(pWorkspace.PathName + "\\" + pstrLayerName + ".lyr");
            //attach the layer file with the actual layer
            layerFile.ReplaceContents((ILayer)pFLayer);
            //save the layer file
            layerFile.Save();


            //***********************************************是否添加到当前文档中来***********************************************//
            //m_mapControl.AddLayer(pFLayer,m_mapControl .LayerCount);
            pm_mapControl.AddLayer(pFLayer);
            pFLayer.Visible = blnVisible;
            pm_mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            return(pFLayer);
        }
예제 #15
0
        public SimplePointCursor(string filePath, IFields fields, int OID,
                                 System.Array fieldMap, IEnvelope queryEnv, esriGeometryType geomType)
        {
            //HIGHLIGHT: 0 - Set up cursor
            m_bIsFinished   = false;
            m_pStreamReader = new System.IO.StreamReader(filePath);
            m_fields        = fields;
            m_iOID          = OID;
            m_fieldMap      = fieldMap;
            m_searchEnv     = queryEnv;
            switch (geomType)
            {
            case esriGeometryType.esriGeometryPolygon:
                m_wkGeom  = new Polygon() as IGeometry;
                m_workPts = new PointClass[5];
                for (int i = 0; i < m_workPts.Length; i++)
                {
                    m_workPts[i] = new PointClass();
                }
                break;

            case esriGeometryType.esriGeometryPolyline:
                m_wkGeom  = new PolylineClass() as IGeometry;
                m_workPts = new PointClass[5];
                for (int i = 0; i < m_workPts.Length; i++)
                {
                    m_workPts[i] = new PointClass();
                }
                break;

            case esriGeometryType.esriGeometryPoint:
                m_wkGeom = new PointClass() as IGeometry;
                break;

            default:                            //doesn't need to set worker geometry if it is table
                break;
            }

            //advance cursor so data is readily available
            this.NextRecord();
        }
예제 #16
0
        private Geometry Buffer(Geometry geom, esriGeometryType shapeType, double margin,
                                MaskKind maskKind, bool isAnno = false)
        {
            var poly_outline = geom as Polygon;

            if (poly_outline.HasCurves)
            {
                poly_outline =
                    GeometryEngine.Instance.DensifyByDeviation(geom, 0.1 * margin) as Polygon;
            }

            if (margin > 0.0)
            {
                if (maskKind == MaskKind.Box || maskKind == MaskKind.ConvexHull)
                {
                    //strip out interior polygons
                    var ext_poly = PolygonBuilderEx.CreatePolygon(poly_outline.GetExteriorRings(true), AttributeFlags.None);

                    var joins = maskKind == MaskKind.Box ?
                                LineJoinType.Miter : LineJoinType.Bevel;
                    var buff_out = GeometryEngine.Instance.GraphicBuffer(ext_poly, margin, joins,
                                                                         LineCapType.Butt, 4, 0.05 * margin, 64);
                    poly_outline = GeometryEngine.Instance.Generalize(buff_out, 0.01 * margin) as Polygon;
                }
                else
                {
                    var buff_out = GeometryEngine.Instance.Buffer(poly_outline, margin);
                    if (maskKind == MaskKind.ExactSimplified)
                    {
                        poly_outline = GeometryEngine.Instance.Generalize(buff_out, 0.05 * margin) as Polygon;
                    }
                    else
                    {
                        poly_outline = buff_out as Polygon;
                    }
                }
            }
            //simplify if needed
            //return GeometryEngine.Instance.SimplifyAsFeature(poly_outline);
            return(poly_outline);
        }
예제 #17
0
        private int ReportError([NotNull] IRow row,
                                [NotNull] IPolyline consecutiveErrorSegments)
        {
            var segments = (ISegmentCollection)consecutiveErrorSegments;

            int segmentCount = segments.SegmentCount;

            string description;
            string issueCode;

            if (GroupIssuesBySegmentType)
            {
                esriGeometryType geometryType = segments.Segment[0].GeometryType;
                SegmentTypeInfo  segmentType  = _segmentTypes[geometryType];

                description = segmentCount > 1
                                                      ? string.Format("{0} consecutive {1} segments",
                                                                      segmentCount,
                                                                      segmentType.Description.ToLower())
                                                      : string.Format("{0} segment",
                                                                      segmentType.Description);

                issueCode = segmentType.IssueCode;
            }
            else
            {
                description = segmentCount > 1
                                                      ? string.Format("{0} consecutive non-linear segments",
                                                                      segmentCount)
                                                      : "Non-linear segment";
                issueCode = Code.NonLinearSegments;
            }

            // use from point of sequence as error geometry, if Simplify caused the
            // polyline to become empty (short segments)
            IGeometry errorGeometry = GetErrorGeometry(consecutiveErrorSegments);

            return(ReportError(description, errorGeometry,
                               Codes[issueCode], _shapeFieldName,
                               row));
        }
예제 #18
0
        public QaValidNonLinearSegments(
            [Doc(nameof(DocStrings.QaValidNonLinearSegments_featureClass))][NotNull]
            IFeatureClass featureClass,
            [Doc(nameof(DocStrings.QaValidNonLinearSegments_minimumChordHeight))]
            double minimumChordHeight)
            : base(new[] { (ITable)featureClass })
        {
            Assert.ArgumentNotNull(featureClass, nameof(featureClass));

            _featureClass       = featureClass;
            _minimumChordHeight = minimumChordHeight;

            esriGeometryType shapeType = featureClass.ShapeType;

            _canHaveNonLinearSegments =
                shapeType == esriGeometryType.esriGeometryPolyline ||
                shapeType == esriGeometryType.esriGeometryPolygon;

            _spatialReference = ((IGeoDataset)featureClass).SpatialReference;
            _xyTolerance      = GeometryUtils.GetXyTolerance(featureClass);
        }
예제 #19
0
        private IFields CreateFieldsCollection(ISpatialReference spatialReference, esriGeometryType geometryType)
        {
            IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
            IObjectClassDescription  ocDesc = fcDesc as IObjectClassDescription;

            IFields     fields     = ocDesc.RequiredFields;
            IFieldsEdit fieldsEdit = fields as IFieldsEdit;

            int    shapeFieldIndex = fields.FindField(fcDesc.ShapeFieldName);
            IField shapeField      = fields.get_Field(shapeFieldIndex);

            IGeometryDef     geometryDef     = shapeField.GeometryDef;
            IGeometryDefEdit geometryDefEdit = geometryDef as IGeometryDefEdit;

            geometryDefEdit.GeometryType_2 = geometryType;
            geometryDefEdit.GridCount_2    = 1;
            geometryDefEdit.set_GridSize(0, 0);
            geometryDefEdit.SpatialReference_2 = spatialReference;

            return(fields);
        }
예제 #20
0
        private int CheckSegment([NotNull] ISegment segment, [NotNull] IRow row)
        {
            esriGeometryType segmentType = segment.GeometryType;

            switch (segmentType)
            {
            case esriGeometryType.esriGeometryCircularArc:
                return(CheckCircularArc((ICircularArc)segment, row));

            case esriGeometryType.esriGeometryEllipticArc:
                // add checks as needed
                return(NoError);

            case esriGeometryType.esriGeometryBezier3Curve:
                // add checks as needed
                return(NoError);

            default:
                return(NoError);
            }
        }
예제 #21
0
        private void createFeatureClass(string fcPath, ISpatialReference srs, esriGeometryType geomType)
        {
            List <IField> attr = new List <IField>();

            attr.Add(geopuntHelper.createField("naam", esriFieldType.esriFieldTypeString, 255));
            if (geomType == esriGeometryType.esriGeometryPoint)
            {
                attr.Add(geopuntHelper.createField("Afstand", esriFieldType.esriFieldTypeDouble));
                attr.Add(geopuntHelper.createField("Hoogte", esriFieldType.esriFieldTypeDouble));
            }
            FileInfo fcInfo = new FileInfo(fcPath);

            IFeatureClass lyr = null;

            if (fcInfo.Extension == ".shp")
            {
                lyr = geopuntHelper.createShapeFile(fcInfo.FullName, attr, map.SpatialReference, geomType, true);
            }
            else if (fcInfo.DirectoryName.ToLowerInvariant().EndsWith(".gdb"))
            {
                lyr = geopuntHelper.createFeatureClass(fcInfo.DirectoryName, fcInfo.Name, attr, srs, geomType, true);
            }
            else
            {
                throw new Exception("Bestand is geen shapefile of FileGeodatabase Feature Class");
            }

            if (geomType == esriGeometryType.esriGeometryPolyline)
            {
                lineFC = lyr;
                gpExtension.profileLineLayer = lineFC;
                geopuntHelper.addFeatureClassToMap(view, lineFC);
            }
            else if (geomType == esriGeometryType.esriGeometryPoint)
            {
                pointsFC = lyr;
                gpExtension.profilePointsLayer = pointsFC;
                geopuntHelper.addFeatureClassToMap(view, pointsFC);
            }
        }
예제 #22
0
        /// <summary>
        /// create a filter that gets the lines crossing the current row,
        /// with the same attribute constraints as the table
        /// </summary>
        private void InitFilters()
        {
            _filters = new Dictionary <int, ISpatialFilter>();
            _helpers = new Dictionary <int, QueryFilterHelper>();

            bool caseSensitive = GetSqlCaseSensitivity();

            foreach (int tableIndex in NonNetworkClassIndexList)
            {
                ITable         nonNetworkClass = InvolvedTables[tableIndex];
                ISpatialFilter filter          = new SpatialFilterClass();

                var helper = new QueryFilterHelper(nonNetworkClass,
                                                   GetConstraint(tableIndex),
                                                   caseSensitive);

                ConfigureQueryFilter(tableIndex, filter);

                esriGeometryType geometryType =
                    ((IFeatureClass)nonNetworkClass).ShapeType;

                switch (geometryType)
                {
                case esriGeometryType.esriGeometryPolyline:
                    filter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                    break;

                case esriGeometryType.esriGeometryPolygon:
                    filter.SpatialRel = esriSpatialRelEnum.esriSpatialRelTouches;
                    break;

                default:
                    throw new NotImplementedException("Unhandled geometry type " +
                                                      geometryType);
                }

                _filters.Add(tableIndex, filter);
                _helpers.Add(tableIndex, helper);
            }
        }
예제 #23
0
 /// <summary>
 /// Opens a dialog so the user can select an existing shapefile or file geodatabase
 /// feature class.
 /// </summary>
 /// <param name="title">title for dialog</param>
 /// <returns>dataset name object for the selected feature class or null </returns>
 private IDatasetName SelectFeatureClass(string title, esriGeometryType geom)
 {
     try
     {
         IGxObjectFilter           shpFilter = new GxFilterShapefilesClass();
         IGxObjectFilter           gdbFilter = new GxFilterFGDBFeatureClassesClass();
         IGxDialog                 dlg       = new GxDialogClass();
         IGxObjectFilterCollection filters   = (IGxObjectFilterCollection)dlg;
         filters.AddFilter(shpFilter, false);
         filters.AddFilter(gdbFilter, true);
         dlg.Title = title;
         IDatasetName  dsName  = null;
         IEnumGxObject objects = null;
         if (dlg.DoModalOpen(0, out objects))
         {
             IGPUtilities2 util = new GPUtilitiesClass();
             string        name = objects.Next().FullName;
             dsName = (IDatasetName)util.CreateFeatureClassName(name);
             IFeatureWorkspace ws  = (IFeatureWorkspace)((IName)dsName.WorkspaceName).Open();
             IFeatureClass     fc  = ws.OpenFeatureClass(System.IO.Path.GetFileName(name));
             esriGeometryType  shp = fc.ShapeType;
             if (!(geom == esriGeometryType.esriGeometryAny &&
                   (shp == esriGeometryType.esriGeometryPoint ||
                    shp == esriGeometryType.esriGeometryPolyline ||
                    shp == esriGeometryType.esriGeometryPolygon)) &&
                 shp != geom)
             {
                 ShowError("Wrong geometry type.");
                 dsName = null;
             }
             dsName = (IDatasetName)((IDataset)fc).FullName;
         }
         return(dsName);
     }
     catch (Exception ex)
     {
         ShowError(ex.Message);
         return(null);
     }
 }
예제 #24
0
        public FeatureClassMock(int objectClassId, string name, string aliasName,
                                esriGeometryType shapeType,
                                esriFeatureType featureType,
                                [NotNull] ISpatialReference spatialReference,
                                bool hasZ = true,
                                bool hasM = false)
            : base(objectClassId, name, aliasName)
        {
            Assert.ArgumentNotNull(spatialReference, nameof(spatialReference));

            ShapeType         = shapeType;
            FeatureType       = featureType;
            _spatialReference = spatialReference;
            _hasZ             = hasZ;
            _hasM             = hasM;

            _geometryBuilder =
                new GeometryBuilder(spatialReference, shapeType, hasZ, hasM);

            ShapeField = CreateShapeField();
            AddFields(ShapeField);
        }
예제 #25
0
        private ISymbol CreateSymbol(esriGeometryType pGeometryType, int intR, int intG, int intB)
        {
            ISymbol           pSymbol           = null;
            ISimpleLineSymbol pSimpleLineSymbol = null;
            IColor            pColor            = SysCommon.Gis.ModGisPub.GetRGBColor(intR, intG, intB);

            switch (pGeometryType)
            {
            case esriGeometryType.esriGeometryPolygon:
                pSimpleLineSymbol       = new SimpleLineSymbolClass();
                pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
                pSimpleLineSymbol.Color = SysCommon.Gis.ModGisPub.GetRGBColor(156, 156, 156);
                pSimpleLineSymbol.Width = 0.01;
                ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
                pSimpleFillSymbol.Outline = pSimpleLineSymbol;
                pSimpleFillSymbol.Color   = pColor;
                pSimpleFillSymbol.Style   = esriSimpleFillStyle.esriSFSSolid;
                pSymbol = pSimpleFillSymbol as ISymbol;
                break;

            case esriGeometryType.esriGeometryPoint:
                ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();
                pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;
                pSimpleMarkerSymbol.Color = pColor;
                pSimpleMarkerSymbol.Size  = 2;
                pSymbol = pSimpleMarkerSymbol as ISymbol;
                break;

            case esriGeometryType.esriGeometryPolyline:
                pSimpleLineSymbol       = new SimpleLineSymbolClass();
                pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
                pSimpleLineSymbol.Color = pColor;
                pSimpleLineSymbol.Width = 0.1;
                pSymbol = pSimpleLineSymbol as ISymbol;
                break;
            }

            return(pSymbol);
        }
예제 #26
0
        private bool IsAllowedCurveType(esriGeometryType geometryType)
        {
            if (geometryType == esriGeometryType.esriGeometryLine)
            {
                return(true);
            }

            if (AllowedNonLinearSegmentTypes == null)
            {
                return(false);
            }

            SegmentTypeInfo segmentType;

            if (!_segmentTypes.TryGetValue(geometryType, out segmentType))
            {
                throw new InvalidOperationException("Unhandled geometry type: " + geometryType);
            }

            return(AllowedNonLinearSegmentTypes.Any(
                       nonLinearSegmentType => nonLinearSegmentType == segmentType.Type));
        }
예제 #27
0
        public static SegmentsPlaneProvider Create(
            [NotNull] IFeature feature,
            esriGeometryType shapeType,
            bool includeAssociatedParts)
        {
            if (shapeType == esriGeometryType.esriGeometryMultiPatch)
            {
                IIndexedMultiPatch indexedMultiPatch = GetIndexedMultiPatch(feature);

                return(includeAssociatedParts
                                               ? (SegmentsPlaneProvider)
                       new SurfaceSegmentsPlaneProvider(indexedMultiPatch)
                                               : new PartSegmentsPlaneProvider(indexedMultiPatch, shapeType));
            }

            IIndexedSegments indexedSegments = GetIndexedSegments(feature);

            return(includeAssociatedParts
                                       ? (SegmentsPlaneProvider)
                   new FullSegmentsPlaneProvider(indexedSegments, shapeType)
                                       : new PartSegmentsPlaneProvider(indexedSegments, shapeType));
        }
예제 #28
0
        /// <summary>
        /// 根据图层的几何类型,获取需要加载的符号类别
        /// </summary>
        /// <param name="shapeType"></param>
        /// <returns></returns>
        private esriSymbologyStyleClass GetSymbologyStyleClassType(esriGeometryType shapeType)
        {
            esriSymbologyStyleClass eType = esriSymbologyStyleClass.esriStyleClassMarkerSymbols;

            if (shapeType == esriGeometryType.esriGeometryPoint)
            {
                eType = esriSymbologyStyleClass.esriStyleClassMarkerSymbols;
            }
            else if (shapeType == esriGeometryType.esriGeometryPolyline)
            {
                eType = esriSymbologyStyleClass.esriStyleClassLineSymbols;
            }
            else if (shapeType == esriGeometryType.esriGeometryPolygon)
            {
                eType = esriSymbologyStyleClass.esriStyleClassFillSymbols;
            }
            else if (shapeType == esriGeometryType.esriGeometryMultiPatch)
            {
                eType = esriSymbologyStyleClass.esriStyleClassFillSymbols;
            }
            return(eType);
        }
예제 #29
0
        private static int ProcessReplacedExceptions(
            [NotNull] ITable targetTable,
            [NotNull] IIssueTableFields targetFields,
            [NotNull] IDictionary <esriGeometryType, HashSet <int> > replacedExceptionObjects,
            DateTime importDate,
            out int fixedStatusCount)
        {
            esriGeometryType shapeType = GetShapeType(targetTable);

            HashSet <int> replacedOids;

            if (!replacedExceptionObjects.TryGetValue(shapeType, out replacedOids))
            {
                // no replaced exception objects for this shape type
                fixedStatusCount = 0;
                return(0);
            }

            return(ProcessReplacedExceptions(targetTable, targetFields,
                                             importDate, replacedOids,
                                             out fixedStatusCount));
        }
예제 #30
0
 public void InitBitmap()
 {
     this.bitmap_0 = null;
     if (this.Symbol != null)
     {
         IStyleDraw styleDraw = StyleDrawFactory.CreateStyleDraw(this.Symbol);
         if (styleDraw != null)
         {
             this.bitmap_0 = styleDraw.StyleGalleryItemToBmp(new Size(16, 16), 96, 1);
             this.string_0 = Guid.NewGuid().ToString();
         }
     }
     if (this.bitmap_0 == null)
     {
         esriGeometryType shapeType = this.FeatureLayer.FeatureClass.ShapeType;
         if (this.FeatureLayer.FeatureClass.FeatureType == esriFeatureType.esriFTAnnotation)
         {
             this.bitmap_0 = BitmapResources.Anno;
             this.string_0 = "A1DD7E5C-E48D-49D2-962C-AC98FF5BD25D";
         }
         else if (shapeType == esriGeometryType.esriGeometryPolyline)
         {
             this.bitmap_0 = BitmapResources.Line;
             this.string_0 = "BF5BE334-1BD8-49B4-BAF9-41292C0D74ED";
         }
         else if (shapeType == esriGeometryType.esriGeometryPolygon)
         {
             this.bitmap_0 = BitmapResources.Area;
             this.string_0 = "830C9A6D-AA74-49A8-9794-3B2AD01613AF";
         }
         else if ((shapeType == esriGeometryType.esriGeometryPoint
             ? true
             : shapeType == esriGeometryType.esriGeometryMultipoint))
         {
             this.bitmap_0 = BitmapResources.Point;
             this.string_0 = "6D20F51F-BBB0-4551-91CB-24B7F2216B40";
         }
     }
 }
예제 #31
0
        public override void OnClick()
        {
            Yutai.ArcGIS.Common.Editor.Editor.EditWorkspace.StartEditOperation();
            IEnumFeature enumFeature = _context.FocusMap.FeatureSelection as IEnumFeature;

            enumFeature.Reset();
            for (IFeature feature = enumFeature.Next(); feature != null; feature = enumFeature.Next())
            {
                esriGeometryType geometryType = feature.Shape.GeometryType;
                if ((geometryType == esriGeometryType.esriGeometryPolyline ||
                     geometryType == esriGeometryType.esriGeometryPolygon) &&
                    Yutai.ArcGIS.Common.Editor.Editor.CheckWorkspaceEdit(feature.Class as IDataset, "IsBeingEdited"))
                {
                    IPolycurve polycurve = feature.Shape as IPolycurve;
                    polycurve.ReverseOrientation();
                    feature.Shape = polycurve;
                    feature.Store();
                    (_context.FocusMap as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
                }
            }
            Yutai.ArcGIS.Common.Editor.Editor.EditWorkspace.StopEditOperation();
        }
예제 #32
0
        public static bool IsMultipart([NotNull] IGeometry geometry)
        {
            Assert.ArgumentNotNull(geometry, nameof(geometry));

            esriGeometryType geometryType = geometry.GeometryType;

            if (geometryType == esriGeometryType.esriGeometryPoint)
            {
                return(false);
            }

            if (geometryType == esriGeometryType.esriGeometryPolygon)
            {
                var polygon = (IPolygon)geometry;

                return(GetExteriorRingCount(polygon) > 1);
            }

            var geometryCollection = geometry as IGeometryCollection;

            return(geometryCollection != null && geometryCollection.GeometryCount > 1);
        }
예제 #33
0
        /// <summary>
        /// Gets the spatialite geometry type of the IFeatureClass
        /// </summary>
        /// <param name="fc">The IFeatureClass.</param>
        /// <returns>geometry type string (e.g. POINT|LINESTRING|POLYGON|MULTIPOINT)</returns>
        internal static string GetGeometryType(ref IFeatureClass fc)
        {
            esriGeometryType geomType = fc.ShapeType;

            switch (geomType)
            {
            case esriGeometryType.esriGeometryPoint:
                return("POINT");

            case esriGeometryType.esriGeometryPath:
            case esriGeometryType.esriGeometryPolyline:
            case esriGeometryType.esriGeometryLine:
                return("LINESTRING");

            case esriGeometryType.esriGeometryEnvelope:
            case esriGeometryType.esriGeometryPolygon:
                return("POLYGON");

            case esriGeometryType.esriGeometryMultipoint:
                return("MULTIPOINT");

            case esriGeometryType.esriGeometryAny:
            case esriGeometryType.esriGeometryBag:
            case esriGeometryType.esriGeometryBezier3Curve:
            case esriGeometryType.esriGeometryCircularArc:
            case esriGeometryType.esriGeometryEllipticArc:
            case esriGeometryType.esriGeometryMultiPatch:
            case esriGeometryType.esriGeometryNull:
            case esriGeometryType.esriGeometryRay:
            case esriGeometryType.esriGeometryRing:
            case esriGeometryType.esriGeometrySphere:
            case esriGeometryType.esriGeometryTriangleFan:
            case esriGeometryType.esriGeometryTriangleStrip:
            case esriGeometryType.esriGeometryTriangles:

            default:
                throw new ArgumentException(geomType.ToString() + " not supported with sde2spatialite.exe");
            }
        }
예제 #34
0
 private static IFeatureClass BuildQueryFeatureClass(string connection, string query, string name, string oidFields, int? srid, esriGeometryType? geometryType)
 {
     var factory = new SqlWorkspaceFactoryClass();
     var workspace = factory.OpenFromString(connection, 0);
     //var workspace = factory.OpenFromFile(@"c:\tmp\AnimalMovement.sde", 0);
     var sqlWorkspace = (ISqlWorkspace)workspace;
     var queryDescription = sqlWorkspace.GetQueryDescription(query);
     if (!String.IsNullOrEmpty(oidFields))
         queryDescription.OIDFields = oidFields;
     if (srid.HasValue)
     {
         queryDescription.Srid = srid.Value.ToString(CultureInfo.InvariantCulture);
         var srEnv = new SpatialReferenceEnvironmentClass();
         queryDescription.SpatialReference = srEnv.CreateSpatialReference(srid.Value);
     }
     if (geometryType.HasValue)
         queryDescription.GeometryType = geometryType.Value;
     sqlWorkspace.CheckDatasetName(name, queryDescription, out name);
     var queryClass = sqlWorkspace.OpenQueryClass(name, queryDescription);
     var featureClass = (IFeatureClass)queryClass;
     return featureClass;
 }
예제 #35
0
        private IFeatureClass CreateFeatureClass([NotNull] string name,
                                                 esriGeometryType geometryType,
                                                 params IField[] attributeFields)
        {
            ISpatialReference sref = SpatialReferenceUtils.CreateSpatialReference
                                         ((int)esriSRProjCS2Type.esriSRProjCS_CH1903Plus_LV95,
                                         true);

            SpatialReferenceUtils.SetXYDomain(sref, -10000, -10000, 10000, 10000, 0.0001,
                                              0.001);

            var fields = new List <IField>
            {
                FieldUtils.CreateOIDField(),
                FieldUtils.CreateShapeField("Shape", geometryType, sref, 1000)
            };

            fields.AddRange(attributeFields);

            return(DatasetUtils.CreateSimpleFeatureClass(_testWs, name,
                                                         FieldUtils.CreateFields(fields)));
        }
        /// <summary>
        /// 创建一个只包含几何字段的简单内存要素类
        /// </summary>
        /// <param name="geometryType"></param>
        /// <param name="spatialReference"></param>
        /// <param name="className"></param>
        /// <returns></returns>
        public static IFeatureClass CreateMemorySimpleFeatureClass(esriGeometryType geometryType, ISpatialReference spatialReference, string className)
        {
            // 创建内存工作空间
            IWorkspaceFactory pWSF     = new InMemoryWorkspaceFactoryClass();
            IWorkspaceName    pWSName  = pWSF.Create("", "Temp", null, 0);
            IName             pName    = (IName)pWSName;
            IWorkspace        memoryWS = (IWorkspace)pName.Open();
            //创建字段集
            IField      field      = new FieldClass();
            IFields     fields     = new FieldsClass();
            IFieldsEdit fieldsEdit = fields as IFieldsEdit;
            IFieldEdit  fieldEdit  = field as IFieldEdit;

            //创建图形字段
            field     = new FieldClass();
            fieldEdit = field as IFieldEdit;
            IGeometryDef     geoDef     = new GeometryDefClass();
            IGeometryDefEdit geoDefEdit = (IGeometryDefEdit)geoDef;

            geoDefEdit.AvgNumPoints_2     = 5;
            geoDefEdit.GeometryType_2     = geometryType;
            geoDefEdit.GridCount_2        = 1;
            geoDefEdit.HasM_2             = false;
            geoDefEdit.HasZ_2             = false;
            geoDefEdit.SpatialReference_2 = spatialReference;
            fieldEdit.Name_2        = "SHAPE";
            fieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
            fieldEdit.GeometryDef_2 = geoDef;
            fieldEdit.IsNullable_2  = true;
            fieldEdit.Required_2    = true;
            fieldsEdit.AddField(field);
            //创建要素类
            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)memoryWS;
            IFeatureClass     featureClass     = featureWorkspace.CreateFeatureClass(
                className, fields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");

            return(featureClass);
        }
예제 #37
0
        public IFeatureClass CreateFeatureClassWithoutAttribute(string feaClassName, esriGeometryType enumGometryType)
        {
            string featureClassName = feaClassName + "Time" + DateTime.Now.ToString("yyyyMMddHHmmss");
            //Basic field settings of FeatureClass
            IFields     fields     = new FieldsClass();
            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;

            ISpatialReferenceFactory spatialrefFactory = new SpatialReferenceEnvironmentClass();//SpatialReference settings
            ISpatialReference        spatialReference  = spatialrefFactory.CreateProjectedCoordinateSystem(
                (int)(esriSRProjCS4Type.esriSRProjCS_Xian1980_GK_CM_111E));
            IGeometryDef geometryDef = new GeometryDefClass();

            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;//Geometry field settings

            geometryDefEdit.GeometryType_2 = enumGometryType;
            geometryDefEdit.GridCount_2    = 1;
            geometryDefEdit.set_GridSize(0, 0);
            geometryDefEdit.SpatialReference_2 = spatialReference;

            IField     fieldUserDefined = new FieldClass();//Field creation
            IFieldEdit fieldEdit        = (IFieldEdit)fieldUserDefined;

            fieldEdit.Name_2        = "Shape";
            fieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
            fieldEdit.GeometryDef_2 = geometryDef;
            fieldEdit.IsNullable_2  = true;
            fieldEdit.Required_2    = true;

            fieldsEdit.AddField(fieldUserDefined);

            //Create FeatureClass
            UID CLSID = new UIDClass();

            CLSID.Value = "esriGeodatabase.Feature";
            IFeatureClass createdFeatureClass = pFeaWorkspace.CreateFeatureClass(featureClassName, fields, CLSID, null, esriFeatureType.esriFTSimple, "Shape", " ");

            return(createdFeatureClass);
        }
        private bool doesGeometryTypeEqualGeometryString(esriGeometryType geoType, string geometryString)
        {
            if ((geometryString == SicToFeatureClassMapper.POINT_STRING) &&
                (geoType == esriGeometryType.esriGeometryPoint))
            {
                return(true);
            }

            if ((geometryString == SicToFeatureClassMapper.LINE_STRING) &&
                ((geoType == esriGeometryType.esriGeometryPolyline) ||
                 (geoType == esriGeometryType.esriGeometryMultipoint)))
            {
                return(true);
            }

            if ((geometryString == SicToFeatureClassMapper.AREA_STRING) &&
                (geoType == esriGeometryType.esriGeometryPolygon))
            {
                return(true);
            }

            return(false);
        }
        private bool IsGeometryTypeEqual(esriGeometryType featureGeometryType, ESRI.ArcGIS.OSM.OSMClassExtension.geometrytype[] osmGeometryType)
        {
            bool geometryEquality = false;

            try
            {
                for (int typeIndex = 0; typeIndex < osmGeometryType.Length; typeIndex++)
                {
                    switch (osmGeometryType[typeIndex])
                    {
                        case ESRI.ArcGIS.OSM.OSMClassExtension.geometrytype.point:
                            if (featureGeometryType == esriGeometryType.esriGeometryPoint)
                            {
                                geometryEquality = true;
                            }
                            break;
                        case ESRI.ArcGIS.OSM.OSMClassExtension.geometrytype.line:
                            if (featureGeometryType == esriGeometryType.esriGeometryPolyline)
                            {
                                geometryEquality = true;
                            }
                            break;
                        case ESRI.ArcGIS.OSM.OSMClassExtension.geometrytype.mpolyline:
                            if (featureGeometryType == esriGeometryType.esriGeometryPolyline)
                            {
                                geometryEquality = true;
                            }
                            break;
                        case ESRI.ArcGIS.OSM.OSMClassExtension.geometrytype.polygon:
                            if (featureGeometryType == esriGeometryType.esriGeometryPolygon)
                            {
                                geometryEquality = true;
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            catch { }

            return geometryEquality;
        }
예제 #40
0
 public override bool SupportsGeometryType(esriGeometryType test)
 {
     return true;
 }
        private bool doesGeometryTypeEqualGeometryString(esriGeometryType geoType, string geometryString)
        {
            if ((geometryString == SicToFeatureClassMapper.POINT_STRING) &&
                (geoType == esriGeometryType.esriGeometryPoint))
                return true;

            if ((geometryString == SicToFeatureClassMapper.LINE_STRING) &&
                ((geoType == esriGeometryType.esriGeometryPolyline) ||
                (geoType == esriGeometryType.esriGeometryMultipoint)))
                return true;

            if ((geometryString == SicToFeatureClassMapper.AREA_STRING) &&
                (geoType == esriGeometryType.esriGeometryPolygon))
                return true;

            return false;
        }
예제 #42
0
        public static bool ogr_geo_type_to_esri_geo_type(OSGeo.OGR.wkbGeometryType ogrType,
                                                        out esriGeometryType outGDBType, out bool outHasZ)
        {
            switch (ogrType)
            {
                case OSGeo.OGR.wkbGeometryType.wkbPoint25D:
                    {
                        outGDBType = esriGeometryType.esriGeometryPoint;
                        outHasZ = true;
                        break;
                    }

                case OSGeo.OGR.wkbGeometryType.wkbMultiPoint25D:
                    {
                        outGDBType = esriGeometryType.esriGeometryMultipoint;
                        outHasZ = true;
                        break;
                    }

                case OSGeo.OGR.wkbGeometryType.wkbLineString25D:
                case OSGeo.OGR.wkbGeometryType.wkbMultiLineString25D:
                    {
                        outGDBType = esriGeometryType.esriGeometryPolyline;
                        outHasZ = true;
                        break;
                    }

                case OSGeo.OGR.wkbGeometryType.wkbPolygon25D:
                case OSGeo.OGR.wkbGeometryType.wkbMultiPolygon25D:
                    {
                        outGDBType = esriGeometryType.esriGeometryPolygon;
                        outHasZ = true;
                        break;
                    }

                /* 2D forms */
                case OSGeo.OGR.wkbGeometryType.wkbPoint:
                    {
                        outGDBType = esriGeometryType.esriGeometryPoint;
                        outHasZ = false;
                        break;
                    }

                case OSGeo.OGR.wkbGeometryType.wkbMultiPoint:
                    {
                        outGDBType = esriGeometryType.esriGeometryMultipoint;
                        outHasZ = false;
                        break;
                    }

                case OSGeo.OGR.wkbGeometryType.wkbLineString:
                case OSGeo.OGR.wkbGeometryType.wkbMultiLineString:
                    {
                        outGDBType = esriGeometryType.esriGeometryPolyline;
                        outHasZ = false;
                        break;
                    }

                case OSGeo.OGR.wkbGeometryType.wkbPolygon:
                case OSGeo.OGR.wkbGeometryType.wkbMultiPolygon:
                    {
                        outGDBType = esriGeometryType.esriGeometryPolygon;
                        outHasZ = false;
                        break;
                    }

                default:
                    {
                        //CPLError( CE_Failure, CPLE_AppDefined, "Cannot map OGRwkbGeometryType (%s) to ESRI type",
                        //          OGRGeometryTypeToName(ogrType));

                        outGDBType = esriGeometryType.esriGeometryNull;
                        outHasZ = false;

                        return false;
                    }
            }
            return true;
        }
		public void PrepareFilter(IFeatureClass fc, IQueryFilter queryFilter)
		{
			// prepare filter for drawing

			// must add OID
			queryFilter.AddField(fc.OIDFieldName);

			m_ShapeType = fc.ShapeType;
			if (m_ShapeType == esriGeometryType.esriGeometryPoint)
			{
                if (m_sRotationField != null)
                {
                    if (m_sRotationField != "")
                    {
                        queryFilter.AddField(m_sRotationField);
                    }
                }
			}

			// save the fc and the query filter so that multiple cursors can be built in DrawSymbols
			m_pFeatureClass = fc;
			m_pQueryFilter = queryFilter;

			// prepare filters on constituent renderers so I can use SymbolByFeature in Draw
			if (m_pShapePatternRend != null)
					m_pShapePatternRend.PrepareFilter(fc, queryFilter);
			if (m_pColorRend1 != null)
					m_pColorRend1.PrepareFilter(fc, queryFilter);
			if (m_pColorRend2 != null)
					m_pColorRend2.PrepareFilter(fc, queryFilter);
			if (m_pSizeRend != null)
					m_pSizeRend.PrepareFilter(fc, queryFilter);

			// if we're combining colors from two (sequential) quantitative schemes, build color matrix now
			//   this gives flexibility to extend in future
			// in current impl. we determine combined color based on two colors, one from each constituent 
			//   ClassBreaksRenderer.  so, we could determine color on demand when drawing. but, by creating 
			//   the color matrix here and storing for later use, we leave open the possibility of swapping in 
			//   different logic for determining combined colors based on all known colors in each constituent
			//   renderer, not just the colors for the given feature
			if ((m_pColorRend1 != null) & (m_pColorRend2 != null))
			{
				if (! (m_eColorCombinationMethod == EColorCombinationType.enuComponents))
					BuildColorMatrix();
			}
			
			//implementation of IExportSupport
			AddExportFields(fc, queryFilter);

		}
예제 #44
0
 public GeometryDef(GeometryDef prototype) : base(prototype) {
     this._avgNumPoints = prototype.AvgNumPoints;
     this._geometryType = prototype.GeometryType;
     this._hasM = prototype.HasM;
     this._hasZ = prototype.HasZ;
     if (prototype.SpatialReference != null) {
         this._spatialReference = prototype.SpatialReference.Clone() as SpatialReference;
     }
     this._gridSize0 = prototype.GridSize0;
     this._gridSize1 = prototype.GridSize1;
     this._gridSize2 = prototype.GridSize2;
 }
예제 #45
0
파일: GDBData.cs 프로젝트: chinasio/minegis
        public static IFeatureClass CreateFeatureClassInPGDB(IWorkspace2 workspace, IFeatureDataset featureDataset, string featureClassName, IFields fields, UID CLSID, UID CLSEXT, string strConfigKeyword, esriGeometryType esriGeometryType)
        {
            if (featureClassName == "") return null; // name was not passed in
            ESRI.ArcGIS.Geodatabase.IFeatureClass featureClass;
            ESRI.ArcGIS.Geodatabase.IFeatureWorkspace featureWorkspace = (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)workspace; // Explicit Cast
            if (workspace.get_NameExists(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureClass, featureClassName)) //feature class with that name already exists
            {

                featureClass = featureWorkspace.OpenFeatureClass(featureClassName);
                return featureClass;
            }

            // assign the class id value if not assigned

            if (CLSID == null)
            {
                CLSID = new ESRI.ArcGIS.esriSystem.UIDClass();
                CLSID.Value = "esriGeoDatabase.Feature";
            }

            ESRI.ArcGIS.Geodatabase.IObjectClassDescription objectClassDescription = new ESRI.ArcGIS.Geodatabase.FeatureClassDescriptionClass();

            // if a fields collection is not passed in then supply our own

            if (fields == null)
            {

                // create the fields using the required fields method

                fields = objectClassDescription.RequiredFields;

                ESRI.ArcGIS.Geodatabase.IFieldsEdit fieldsEdit = (ESRI.ArcGIS.Geodatabase.IFieldsEdit)fields; // Explicit Cast
                ESRI.ArcGIS.Geodatabase.IField field = new ESRI.ArcGIS.Geodatabase.FieldClass();

                // create a user defined text field
                ESRI.ArcGIS.Geodatabase.IFieldEdit fieldEdit = (ESRI.ArcGIS.Geodatabase.IFieldEdit)field; // Explicit Cast

                // setup field properties
                fieldEdit.Name_2 = "SampleField";
                fieldEdit.Type_2 = ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString;
                fieldEdit.IsNullable_2 = true;
                fieldEdit.AliasName_2 = "Sample Field Column";
                fieldEdit.DefaultValue_2 = "test";
                fieldEdit.Editable_2 = true;
                fieldEdit.Length_2 = 100;

                // add field to field collection
                fieldsEdit.AddField(field);
                fields = (ESRI.ArcGIS.Geodatabase.IFields)fieldsEdit; // Explicit Cast
            }

            System.String strShapeField = "";

            // locate the shape field
            for (int j = 0; j < fields.FieldCount; j++)
            {
                if (fields.get_Field(j).Type == esriFieldType.esriFieldTypeGeometry)
                {
                    strShapeField = fields.get_Field(j).Name;
                    ((IGeometryDefEdit)fields.get_Field(j).GeometryDef).GeometryType_2 = esriGeometryType;
                }
            }

            // Use IFieldChecker to create a validated fields collection.
            ESRI.ArcGIS.Geodatabase.IFieldChecker fieldChecker = new ESRI.ArcGIS.Geodatabase.FieldCheckerClass();
            ESRI.ArcGIS.Geodatabase.IEnumFieldError enumFieldError = null;
            ESRI.ArcGIS.Geodatabase.IFields validatedFields = null;
            fieldChecker.ValidateWorkspace = (ESRI.ArcGIS.Geodatabase.IWorkspace)workspace;
            fieldChecker.Validate(fields, out enumFieldError, out validatedFields);
            // The enumFieldError enumerator can be inspected at this point to determine
            // which fields were modified during validation.

            // finally create and return the feature class

            if (featureDataset == null)// if no feature dataset passed in, create at the workspace level
            {
                featureClass = featureWorkspace.CreateFeatureClass(featureClassName, validatedFields, CLSID, CLSEXT, ESRI.ArcGIS.Geodatabase.esriFeatureType.esriFTSimple, strShapeField, strConfigKeyword);
            }
            else
            {
                featureClass = featureDataset.CreateFeatureClass(featureClassName, validatedFields, CLSID, CLSEXT, ESRI.ArcGIS.Geodatabase.esriFeatureType.esriFTSimple, strShapeField, strConfigKeyword);
            }
            return featureClass;
        }
 bool IMarkerPlacement.get_AcceptGeometryType(esriGeometryType inputType)
 {
     if (inputType == esriGeometryType.esriGeometryPoint)
         return true;
     else
         return false;
 }
예제 #47
0
 private ISymbol GetSymbolBySymbolSelector(esriGeometryType geometryType)
 {
     try
     {
         ISymbolSelector pSymbolSelector = new SymbolSelectorClass();
         ISymbol symbol = null;
         switch (geometryType)
         {
             case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
                 symbol = new SimpleMarkerSymbolClass();
                 break;
             case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
                 symbol = new SimpleLineSymbolClass();
                 break;
             case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
                 symbol = new SimpleFillSymbolClass();
                 break;
             default:
                 break;
         }
         pSymbolSelector.AddSymbol(symbol);
         bool response = pSymbolSelector.SelectSymbol(0);
         if (response)
         {
             symbol = pSymbolSelector.GetSymbolAt(0);
             return symbol;
         }
         return null;
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
         ISymbol symbol = null;
         switch (geometryType)
         {
             case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
                 symbol = new SimpleMarkerSymbolClass();
                 break;
             case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
                 symbol = new SimpleLineSymbolClass();
                 break;
             case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
                 symbol = new SimpleFillSymbolClass();
                 break;
             default:
                 break;
         }
         return symbol;
     }
 }
예제 #48
0
 public override bool SupportsGeometryType(esriGeometryType test)
 {
     return (test == esriGeometryType.esriGeometryPolygon
         || test == esriGeometryType.esriGeometryPolyline
         || test == esriGeometryType.esriGeometryPoint);
 }
예제 #49
0
 private Geometry GetFilterGeometry(string geometry,esriGeometryType geometryType)
 {
     Geometry resultGeometry = null;
     switch (geometryType)
     {
         // todo: add other filter geometry types
         case esriGeometryType.esriGeometryEnvelope:
             resultGeometry = JsonConvert.DeserializeObject<Extent>(geometry);
             break;
     }
     return resultGeometry;
 }
예제 #50
0
        public HttpResponseMessage GetQuery(string serviceName, string layerId, string operation = "",
            bool returnGeometry=true,
            string f = "json",
            string objectids = "",
            string where = "",
            string time = "",
            string geometry = "",
            esriGeometryType geometryType = esriGeometryType.esriGeometryPoint,
            string geometryPrecision = "",
            string inSr = "",
            esriSpatialRelType spatialRel = esriSpatialRelType.esriSpatialRelIntersects,
            string outSr = "",
            string returnIdsOnly = "",
            string returnCountOnly = "",
            string maxAllowableOffset = "",
            string returnDistinctValues = "",
            string groupByFieldsForStatistics = "",
            string outStatistics = "",
            string outFields = "",
            string orderByFields="",
            string objectIds ="",
            bool returnZ = false,
            bool returnM= false
            )
        {
            FeatureCollection result = null;

            // first let's read the server config file
            var agsConfigDir = ConfigurationManager.AppSettings["AgsConfigDir"];
            var serverconfigFile = agsConfigDir + @"FeatureServer\" + serviceName + @"\"+ serviceName + "_" + layerId + "_server.json";
            if (File.Exists(serverconfigFile))
            {
                var content = File.ReadAllText(serverconfigFile);
                dynamic serverConfig = JsonConvert.DeserializeObject(content);

                // get client config
                var featureLayerConfig = ConfigDataReader.GetFeatureLayerConfig(agsConfigDir, serviceName, layerId);
                result = FeatureCollectionDataReader.GetFeatureCollection(serverConfig, featureLayerConfig);

                // Get the geographic filter
                if (!string.IsNullOrEmpty(geometry))
                {
                    var filterGeometry = GetFilterGeometry(geometry, geometryType);
                    // todo convert filtergemotry to wgs84....

                    result.features = result.FilterFeatureCollection((Extent)filterGeometry);
                }
            }

            return Request.CreateResponse(HttpStatusCode.OK, result);
        }
예제 #51
0
        public static IFields CreateFields(esriGeometryType geoType)
        {
            IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass();
            IObjectClassDescription ocDescription = (IObjectClassDescription)fcDescription;
            IFields fields = ocDescription.RequiredFields;

            int shapeFieldIndex = fields.FindField(fcDescription.ShapeFieldName);
            IField field = fields.get_Field(shapeFieldIndex);
            IGeometryDef geometryDef = field.GeometryDef;
            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
            geometryDefEdit.GeometryType_2 = geoType;
            ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            var sr = spatialReferenceFactory.CreateGeographicCoordinateSystem(4326);
            geometryDefEdit.SpatialReference_2 = sr;

            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
            field = new FieldClass();
            IFieldEdit fieldEdit = (IFieldEdit)field;
            fieldEdit.Name_2 = "Name";
            fieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            fieldsEdit.AddField(field);

            return fields;
        }
예제 #52
0
        //---------------------------------------------------------------------

        /// <summary>
        /// Creates a new feature class. Returns the feature class or null if not successful. Throws but does not handle errors. 
        /// </summary>
        /// <param name="sFeatName">Feature class name.</param>
        /// <param name="configWord">Configuration keywords for the new feature class.</param>
        /// <param name="oWorkspace">Workspace in which to create the new feature class.</param>
        /// <param name="theFields">Fields collection of the new feature class.</param>
        /// <param name="featureType">Feature type of the new feature class.</param>
        /// <param name="geometryType">geometry type of the new feature class.</param>
        /// <param name="CLSID">Class ID of the new feature class. May be null if featureType is not null.</param>
        /// <param name="CLSEXT">Class extension ID of the new feature class. Pass null if none.</param>
        /// <returns>Returns the cloned feature class. Throws an error if no feature class can be created.</returns>
        private IFeatureClass CreateFeatureClass(string featureClassName, string configWord, object outWorkspace,
            IFields fields, esriFeatureType featureType, esriGeometryType geometryType, UID CLSID, UID CLSEXT)
        {
            IFeatureClass featureClass = null;
            if (outWorkspace == null) throw (new Exception("Workspace cannot be null"));
            if (!((outWorkspace is IWorkspace) || (outWorkspace is IFeatureDataset)))
                throw (new Exception("Workspace must be IWorkspace or IFeatureDataset"));
            if (featureClassName == "") throw (new Exception("Feature class name cannot be empty string"));
            UID uidCLSID = new UIDClass();
            if (CLSID == null)
            {
                switch (featureType)
                {
                    case (esriFeatureType.esriFTSimple):
                        uidCLSID.Value = "{52353152-891A-11D0-BEC6-00805F7C4268}";
                        break;
                    case (esriFeatureType.esriFTSimpleJunction):
                        geometryType = esriGeometryType.esriGeometryPoint;
                        uidCLSID.Value = "{CEE8D6B8-55FE-11D1-AE55-0000F80372B4}";
                        break;
                    case (esriFeatureType.esriFTComplexJunction):
                        uidCLSID.Value = "{DF9D71F4-DA32-11D1-AEBA-0000F80372B4}";
                        break;
                    case (esriFeatureType.esriFTSimpleEdge):
                        geometryType = esriGeometryType.esriGeometryPolyline;
                        uidCLSID.Value = "{E7031C90-55FE-11D1-AE55-0000F80372B4}";
                        break;
                    case (esriFeatureType.esriFTComplexEdge):
                        geometryType = esriGeometryType.esriGeometryPolyline;
                        uidCLSID.Value = "{A30E8A2A-C50B-11D1-AEA9-0000F80372B4}";
                        break;
                    case (esriFeatureType.esriFTAnnotation):
                        geometryType = esriGeometryType.esriGeometryPolygon;
                        uidCLSID.Value = "{E3676993-C682-11D2-8A2A-006097AFF44E}";
                        break;
                    case (esriFeatureType.esriFTDimension):
                        geometryType = esriGeometryType.esriGeometryPolygon;
                        uidCLSID.Value = "{496764FC-E0C9-11D3-80CE-00C04F601565}";
                        break;
                }
            }
            else
            {
                uidCLSID = CLSID;
            }
            UID uidCLSEXT = new UIDClass();
            if (CLSEXT == null)
            {
                switch (featureType)
                {
                    case (esriFeatureType.esriFTAnnotation):
                        uidCLSEXT.Value = "{24429589-D711-11D2-9F41-00C04F6BC6A5}";
                        break;
                    case (esriFeatureType.esriFTDimension):
                        uidCLSEXT.Value = "{48F935E2-DA66-11D3-80CE-00C04F601565}";
                        break;
                    default:
                        uidCLSEXT = null;
                        break;
                }
            }
            else
                uidCLSEXT = CLSEXT;
            string shapeFieldName = "";
            for (int i = 0; i <= fields.FieldCount - 1; i++)
            {
                if (fields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
                {
                    shapeFieldName = fields.get_Field(i).Name;
                    break;
                }
            }
            if (shapeFieldName == "") throw new Exception("Cannot locate geometry field");
            if (outWorkspace is IWorkspace)
            {
                IWorkspace workspace = (IWorkspace)outWorkspace;
                IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
                featureClass = featureWorkspace.CreateFeatureClass(featureClassName, fields, uidCLSID, uidCLSEXT,
                    featureType, shapeFieldName, configWord);
            }
            else if (outWorkspace is IFeatureDataset)
            {
                IFeatureDataset featureDataset = (IFeatureDataset)outWorkspace;
                featureClass = featureDataset.CreateFeatureClass(featureClassName, fields, uidCLSID, uidCLSEXT,
                    featureType, shapeFieldName, configWord);
            }
            return featureClass;
        }
예제 #53
0
        private void createFeatureClass(string fcPath, ISpatialReference srs, esriGeometryType geomType)
        {
            List<IField> attr = new List<IField>();
            attr.Add(geopuntHelper.createField("naam", esriFieldType.esriFieldTypeString, 255));
            if (geomType == esriGeometryType.esriGeometryPoint)
            {
                attr.Add(geopuntHelper.createField("Afstand", esriFieldType.esriFieldTypeDouble));
                attr.Add(geopuntHelper.createField("Hoogte", esriFieldType.esriFieldTypeDouble));
            }
            FileInfo fcInfo = new FileInfo(fcPath);

            IFeatureClass lyr = null;
            if (fcInfo.Extension == ".shp")
            {
                lyr = geopuntHelper.createShapeFile(fcInfo.FullName, attr, map.SpatialReference, geomType, true);
            }
            else if (fcInfo.DirectoryName.ToLowerInvariant().EndsWith(".gdb"))
            {
                lyr = geopuntHelper.createFeatureClass(fcInfo.DirectoryName, fcInfo.Name, attr, srs, geomType, true);
            }
            else
            {
                throw new Exception("Bestand is geen shapefile of FileGeodatabase Feature Class");
            }

            if (geomType == esriGeometryType.esriGeometryPolyline)
            {
                lineFC = lyr;
                gpExtension.profileLineLayer = lineFC;
                geopuntHelper.addFeatureClassToMap(view, lineFC);
            }
            else if (geomType == esriGeometryType.esriGeometryPoint)
            {
                pointsFC = lyr;
                gpExtension.profilePointsLayer = pointsFC;
                geopuntHelper.addFeatureClassToMap(view, pointsFC);
            }
        }
예제 #54
0
        public static FeatureClass CreateFeatureClass(esriFeatureType featureType, esriGeometryType geometryType) {
            XPathNodeIterator iterator = null;
            switch (featureType) {
                case esriFeatureType.esriFTSimple:
                    switch (geometryType) {
                        case esriGeometryType.esriGeometryMultiPatch:
                            iterator = Factory.LoadXml(Resources.FILE_FEATURECLASS_MULTIPATCH, "WorkspaceDefinition/DatasetDefinitions/DataElement");
                            break;
                        case esriGeometryType.esriGeometryPoint:
                            iterator = Factory.LoadXml(Resources.FILE_FEATURECLASS_POINT, "WorkspaceDefinition/DatasetDefinitions/DataElement");
                            break;
                        case esriGeometryType.esriGeometryPolygon:
                            iterator = Factory.LoadXml(Resources.FILE_FEATURECLASS_POLYGON, "WorkspaceDefinition/DatasetDefinitions/DataElement");
                            break;
                        case esriGeometryType.esriGeometryPolyline:
                            iterator = Factory.LoadXml(Resources.FILE_FEATURECLASS_POLYLINE, "WorkspaceDefinition/DatasetDefinitions/DataElement");
                            break;
                    }
                    break;
                case esriFeatureType.esriFTAnnotation:
                    iterator = Factory.LoadXml(Resources.FILE_FEATURECLASS_ANNOTATION, "WorkspaceDefinition/DatasetDefinitions/DataElement");
                    break;
                case esriFeatureType.esriFTDimension:
                    iterator = Factory.LoadXml(Resources.FILE_FEATURECLASS_DIMENSION, "WorkspaceDefinition/DatasetDefinitions/DataElement");
                    break;
            }
            if (iterator == null) { return null; }
            if (!iterator.MoveNext()) { return null; }

            XPathNavigator navigator = iterator.Current;
            FeatureClass featureClass = new FeatureClass(navigator); ;
            return featureClass;
        }
예제 #55
0
 private static ILayer BuildQueryLayer(string connection, string query, string name, string oidFields, int? srid, esriGeometryType? geometryType)
 {
     var featureClass = BuildQueryFeatureClass(connection, query, name, oidFields, srid, geometryType);
     var featureLayer = new FeatureLayerClass { FeatureClass = featureClass, Name = name };
     return featureLayer;
 }
예제 #56
0
 private void LoadMap(string layerType, esriGeometryType targetType)
 {
     try
     {
         //如果存在,删除
         if (_mapIndex.ContainsKey(layerType))
         {
             var pLayer = _axMapControl.Map.Layer[_mapIndex[layerType]];
             _axMapControl.Map.DeleteLayer(pLayer);
             _mapIndex.Remove(layerType);
         }
         //添加
         var pFeatureClass = _shapeOp.OpenFeatureClass();
         if (!pFeatureClass.GeometryTypeCheck(targetType))
         {
             throw new Exception("打开要素类型不正确");
         }
         _axMapControl.Map.AddLayer(new FeatureLayerClass()
         {
             FeatureClass = pFeatureClass
         });
         _mapIndex.Add(layerType, _axMapControl.Map.LayerCount - 1);
     }
     catch (Exception e)
     {
         Messenger.Default.Send(new GenericMessage<string>(e.Message),"Exception");
     }
 }   
예제 #57
0
 public GeometryDef(SerializationInfo info, StreamingContext context) : base(info, context) {
     this._avgNumPoints = info.GetInt32(GeometryDef.AVGNUMPOINTS);
     this._geometryType = (esriGeometryType)Enum.Parse(typeof(esriGeometryType), info.GetString(GeometryDef.GEOMETRYTYPE), true);
     this._hasM = info.GetBoolean(GeometryDef.HASM);
     this._hasZ = info.GetBoolean(GeometryDef.HASZ);
     this._spatialReference = (SpatialReference)info.GetValue(GeometryDef.SPATIALREFERENCE, typeof(SpatialReference));
     this._gridSize0 = info.GetDouble(GeometryDef.GRIDSIZE0);
     this._gridSize1 = info.GetDouble(GeometryDef.GRIDSIZE1);
     this._gridSize2 = info.GetDouble(GeometryDef.GRIDSIZE2);
 }
 public static string GetDescription(esriGeometryType type) {
     switch (type) {
         case esriGeometryType.esriGeometryAny: return "Any";
         case esriGeometryType.esriGeometryBag: return "Bag";
         case esriGeometryType.esriGeometryBezier3Curve: return "Bezier Curve";
         case esriGeometryType.esriGeometryCircularArc: return "Circular Arc";
         case esriGeometryType.esriGeometryEllipticArc: return "Elliptic Arc";
         case esriGeometryType.esriGeometryEnvelope: return "Envelope";
         case esriGeometryType.esriGeometryLine: return "Line";
         case esriGeometryType.esriGeometryMultiPatch: return "MultiPatch";
         case esriGeometryType.esriGeometryMultipoint: return "Multipoint";
         case esriGeometryType.esriGeometryNull: return "Null";
         case esriGeometryType.esriGeometryPath: return "Path";
         case esriGeometryType.esriGeometryPoint: return "Point";
         case esriGeometryType.esriGeometryPolygon: return "Polygon";
         case esriGeometryType.esriGeometryPolyline: return "Polyline";
         case esriGeometryType.esriGeometryRay: return "Ray";
         case esriGeometryType.esriGeometryRing: return "Ring";
         case esriGeometryType.esriGeometrySphere: return "Sphere";
         case esriGeometryType.esriGeometryTriangleFan: return "Triangle Fan";
         case esriGeometryType.esriGeometryTriangles: return "Triangles";
         case esriGeometryType.esriGeometryTriangleStrip: return "Triangle Strip";
         default:
             return "UNKNOWN";
     }
 }
예제 #59
0
        /// <summary>
        /// Creates the field collection for a new feature class or standalone table.
        /// </summary>
        /// <param name="bSpatial">True if the new fields collection is for a feature class, false if a table.</param>
        /// <param name="bHasZ">True if the geometry field of the fields collection to be created is to be Z aware.</param>
        /// <param name="bHasM">True if the geometry field of the fields collection to be created is to be M aware.</param>
        /// <param name="oWorkspace">The workspace in which a new feature class will be created from the fields collection.</param>
        /// <param name="geomType">The geometry type of the feature class to be created from the new fields collection.</param>
        /// <param name="aFldLengths">An array of field lengths of the fields collection to be created.</param>
        /// <param name="aFldNames">An array of field names of the fields collection to be created.</param>
        /// <param name="aFldAliases">An array of field aliases of the fields collection to be created.</param>
        /// <param name="aFldTypes">An array of field types of the fields collection to be created.</param>
        /// <param name="spatialReference">The coordinate system to be assigned to the new feature class.</param>
        /// <returns>Returns the new field collection. Throws an error if no field collection can be created.</returns>
        private IFields CreateFieldsCollection(bool hasGeom, bool hasZ, bool hasM, object outWorkspace,
            esriGeometryType geometryType, int[] fieldLengths, string[] fieldNames, string[] fieldAliases,
            esriFieldType[] fieldTypes, bool[] fieldNullable, ISpatialReference spatialReference)
        {
            if ((hasGeom) && (outWorkspace is IWorkspace) && (spatialReference == null))
                throw new Exception("Spatial reference must be defined for standalone feature classes");

            IWorkspace outputWorkspace = null;
            if (outWorkspace is IWorkspace)
            {
                outputWorkspace = outWorkspace as IWorkspace;
            }
            else if (outWorkspace is IFeatureDataset)
            {
                outputWorkspace = ((IDataset)((IFeatureDataset)outWorkspace)).Workspace;
            }

            IFields fields = new FieldsClass();
            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
            if (hasGeom)
            {
                IGeometryDef geometryDef = new GeometryDefClass();
                IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
                geometryDefEdit.GeometryType_2 = geometryType;
                geometryDefEdit.GridCount_2 = 1;
                geometryDefEdit.set_GridSize(0, 0); // (0, 0.5);
                geometryDefEdit.AvgNumPoints_2 = 2;
                geometryDefEdit.HasM_2 = hasM;
                geometryDefEdit.HasZ_2 = hasZ;
                if (outWorkspace is IWorkspace) geometryDefEdit.SpatialReference_2 = spatialReference;
                IField fieldOID = new FieldClass();
                IFieldEdit fieldEditOID = (IFieldEdit)fieldOID;
                fieldEditOID.Name_2 = "OBJECTID";
                fieldEditOID.AliasName_2 = "OBJECTID";
                fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID;
                fieldsEdit.AddField(fieldOID);
                IField fieldShape = new FieldClass();
                IFieldEdit fieldEditShape = (IFieldEdit)fieldShape;
                fieldEditShape.Name_2 = "SHAPE";
                fieldEditShape.AliasName_2 = "SHAPE";
                fieldEditShape.Type_2 = esriFieldType.esriFieldTypeGeometry;
                fieldEditShape.GeometryDef_2 = geometryDef;
                fieldsEdit.AddField(fieldShape);
            }
            else
            {
                IField fieldOID = new FieldClass();
                IFieldEdit fieldEditOID = (IFieldEdit)fieldOID;
                fieldEditOID.Name_2 = "OBJECTID";
                fieldEditOID.AliasName_2 = "OBJECTID";
                fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID;
                fieldsEdit.AddField(fieldOID);
            }

            if (fieldAliases == null) fieldAliases = fieldNames;

            IField fieldAtt;
            IFieldEdit fieldEditAtt;
            for (int i = 0; i < fieldTypes.Length; i++)
            {
                if (String.IsNullOrEmpty(fieldNames[i]))
                    throw new Exception(String.Format("Error creating field {0}", i));
                if ((fieldTypes[i] == esriFieldType.esriFieldTypeOID) ||
                    (fieldTypes[i] == esriFieldType.esriFieldTypeGeometry))
                    continue;
                fieldAtt = new FieldClass();
                fieldEditAtt = (IFieldEdit)fieldAtt;
                fieldEditAtt.Name_2 = fieldNames[i];
                if (!String.IsNullOrEmpty(fieldAliases[i]))
                    fieldEditAtt.AliasName_2 = fieldAliases[i];
                fieldEditAtt.Type_2 = fieldTypes[i];
                fieldEditAtt.Editable_2 = true;
                fieldEditAtt.Required_2 = false;
                fieldEditAtt.IsNullable_2 = fieldNullable[i];// true;
                if (fieldTypes[i] == esriFieldType.esriFieldTypeString)
                {
                    //if ((fieldLengths[i] == -1) || ((fieldLengths[i] > 0) && (fieldLengths[i] < 256)))
                    fieldEditAtt.Length_2 = fieldLengths[i];
                    //else
                    //    fieldEditAtt.Length_2 = 255;
                }
                fieldsEdit.AddField(fieldAtt);
            }
            IFieldChecker fldChk = new FieldCheckerClass();
            fldChk.ValidateWorkspace = outputWorkspace;

            IFields outFields;
            IEnumFieldError fieldErrors;
            fldChk.Validate(fields, out fieldErrors, out outFields);
            return outFields;
        }
예제 #60
0
 /// <summary>
 /// 根据点击位置和需要的element类型,取得在该位置的给类型的element
 /// </summary>
 /// <param name="pPoint"></param>
 /// <param name="geometryType"></param>
 /// <returns></returns>
 private IElement getElement(IPoint pPoint,esriGeometryType geometryType)
 {
     IEnumElement pEnumElement = this.pGraphicContainer.LocateElements(pPoint, this.axMapControl1.ActiveView.Extent.Width / 100);
     if (pEnumElement != null)
     {
         pEnumElement.Reset();
         IElement pElement;
         for (pElement=pEnumElement.Next(); pElement!= null;pElement=pEnumElement.Next())
         {
             if (pElement.Geometry.GeometryType == geometryType)
             {
                 this.hitElement = pElement;
                 return pElement;
             }
         }
         return null;
     }
     return null;
 }