阅读:2132回复:5
急!
大家好!这段时间我正在用c#和arcgis engine 做个项目,在做新建图层(包括点、线、面层)时遇到些问题,请知道这块怎么做的各位兄弟姐妹指点一下怎么做,在此谢过!希望大家以后共同探讨和交流。
|
|
1楼#
发布于:2004-09-10 14:20
多谢各位了!<img src="images/post/smile/dvbbs/em02.gif" />
|
|
2楼#
发布于:2004-09-10 09:26
看帮助是very important<img src="images/post/smile/dvbbs/em01.gif" />
|
|
|
3楼#
发布于:2004-09-10 09:00
<P>//====esriFeatureType Constants (esriGeoDatabase)=====</P><P>//esriFTSimple 1
//esriFTSimpleJunction 7 //esriFTSimpleEdge 8 //esriFTComplexJunction 9 //esriFTComplexEdge 10 //esriFTAnnotation 11 //esriFTCoverageAnnotation 12 //esriFTDimension 13 //esriFTRasterCatalogItem 14</P><P> //-------esriGeometryType Constants (esriGeometry)-----</P><P>//esriGeometryNull 0 //esriGeometryPoint 1 //esriGeometryMultipoint 2 //esriGeometryLine 13 //esriGeometryCircularArc 14 //esriGeometryEllipticArc 16 //esriGeometryBezier3Curve 15 //esriGeometryPath 6 //esriGeometryPolyline 3 //esriGeometryRing 11 //esriGeometryPolygon 4 //esriGeometryEnvelope 5 //esriGeometryAny 7 //esriGeometryBag 17 //esriGeometryMultiPatch 9 //esriGeometryTriangleStrip 18 //esriGeometryTriangleFan 19 //esriGeometryRay 20 //esriGeometrySphere 21 //esriGeometryTriangles 22 </P><P>public static IFeatureClass CreateFeatureClass(object objectWorkspace, string name, ISpatialReference spatialReference, esriFeatureType featureType, esriGeometryType geometryType, IFields fields, UID uidCLSID, UID uidCLSEXT, string configWord) { // Check for invalid parameters. if (objectWorkspace == null) { throw(new Exception("[objectWorkspace] cannot be null")); } if (!((objectWorkspace is IWorkspace) || (objectWorkspace is IFeatureDataset))) { throw(new Exception("[objectWorkspace] must be IWorkspace or IFeatureDataset")); } if (name == "") { throw(new Exception("[name] cannot be empty")); } if ((objectWorkspace is IWorkspace) ;; (spatialReference == null)) { throw(new Exception("[spatialReference] cannot be null for StandAlong FeatureClasses")); }</P><P> // Set ClassID (if Null) if (uidCLSID == null) { uidCLSID = new UIDClass(); 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; } }</P><P> // Set uidCLSEXT (if Null) if (uidCLSEXT == null) { switch(featureType) { case(esriFeatureType.esriFTAnnotation): uidCLSEXT = new UIDClass(); uidCLSEXT.Value = "{24429589-D711-11D2-9F41-00C04F6BC6A5}"; break; case(esriFeatureType.esriFTDimension): uidCLSEXT = new UIDClass(); uidCLSEXT.Value = "{48F935E2-DA66-11D3-80CE-00C04F601565}"; break; } }</P><P> // Add Fields if (fields == null) { // Create fields collection fields = new FieldsClass(); IFieldsEdit fieldsEdit = (IFieldsEdit) fields;</P><P> // Create the geometry field IGeometryDef geometryDef = new GeometryDefClass(); IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit) geometryDef;</P><P> // Assign Geometry Definition geometryDefEdit.GeometryType_2 = geometryType; geometryDefEdit.GridCount_2 = 1; geometryDefEdit.set_GridSize(0, 0.5); geometryDefEdit.AvgNumPoints_2 = 2; geometryDefEdit.HasM_2 = false; geometryDefEdit.HasZ_2 = true; if (objectWorkspace is IWorkspace) { // If this is a STANDALONE FeatureClass then add spatial reference. geometryDefEdit.SpatialReference_2 = spatialReference; }</P><P> // Create OID Field IField fieldOID = new FieldClass(); IFieldEdit fieldEditOID = (IFieldEdit) fieldOID; fieldEditOID.Name_2 = "OBJECTID"; fieldEditOID.AliasName_2 = "OBJECTID"; fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID; fieldsEdit.AddField(fieldOID);</P><P> // Create Geometry Field 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); } // Locate Shape Field string stringShapeFieldName = ""; for (int i = 0; i <= fields.FieldCount - 1; i++) { if (fields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { stringShapeFieldName = fields.get_Field(i).Name; break; } } if (stringShapeFieldName == "") { throw(new Exception("Cannot locate geometry field in FIELDS")); } IFeatureClass featureClass = null; if (objectWorkspace is IWorkspace) { // Create a STANDALONE FeatureClass IWorkspace workspace = (IWorkspace) objectWorkspace; IFeatureWorkspace featureWorkspace = (IFeatureWorkspace) workspace;</P><P> featureClass = featureWorkspace.CreateFeatureClass(name, fields, uidCLSID, uidCLSEXT, featureType, stringShapeFieldName, configWord); } else if (objectWorkspace is IFeatureDataset) { IFeatureDataset featureDataset = (IFeatureDataset) objectWorkspace; featureClass = featureDataset.CreateFeatureClass(name, fields, uidCLSID, uidCLSEXT, featureType, stringShapeFieldName, configWord); } // Return FeatureClass return featureClass; }</P><P>Ao 在线帮助里有很多源代码可以参考。这是其中一个例子。</P> |
|
|
4楼#
发布于:2004-09-09 18:05
我不知道怎么样指定新建图层的类型,包括点、线、面。我想应该是根据层的FeatureClass定,但是新建的图层是个空层啊,怎么指定,还请指教,谢谢!如果有人知道怎么创建一个空层的话,请把思路讲一下,谢了!
|
|
5楼#
发布于:2004-09-09 17:51
什么问题。说清楚点,才有讨论的前提。
|
|
|