|
阅读:1495回复:3
multipoint feature 到point feature的转换问题
<P>multipoint feature 到point feature的转换问题</P>
<P>C# ArcEngine ArcSDE环境下</P> <P>esriGeometryMultipoint怎么不支持编辑呢</P> <P>怎么转换成esriGeometryPoint</P> <P>esriGeometryPoint格式的支持编辑</P> |
|
|
|
1楼#
发布于:2008-03-12 08:45
<P>关注中。。。 我感觉是不是要用pointcollection 接口</P>
|
|
|
2楼#
发布于:2008-03-12 09:05
<P>IFeatureClass pFC = pFlyr.FeatureClass;</P>
<P>pFeature = pFC.CreateFeature();</P> <P>pFeature.Shape = pGeo;</P> <P>提示pFeature.Shape是esriGeometryType.esriGeometryMultipoint类型</P> <P>pGeo是 esriGeometryType.esriGeometryPoint类型</P> <P>报错 提示 不支持这种类型的编辑。</P> <P>请高手指教 感激不尽 谢谢</P><img src="images/post/smile/dvbbs/em23.gif" /><img src="images/post/smile/dvbbs/em01.gif" /> |
|
|
|
3楼#
发布于:2008-03-14 00:21
本例要实现的功能是根据一个FeatureLayer中被选择一个或多个MultiPoint,生成多个Point并把这些新生成的Point保存在一个Point类型的Feature Layer上。<BR>  要点<BR> 本例将选择的Multipoints上的每个点都生成一个对应得Point,并用一个接口IPointCollection的变量来接收。利用IPointCollection的方法point(index),取出新生成的每个点,用来创建Point类型的Feature。<BR>  程序说明<BR> 本例要求在ArcMap中添加两个层,最上面的是层Multipoint,下面是层wind。根据循环得到选择的每个Multipoint的每个点,为wind层生成新的Feature并保存<BR>  代码<BR> Sub convertMultipointToPoints()<BR> Dim pMxDocument As IMxDocument<BR> Dim pMap As IMap<BR> Dim pActiveView As IActiveView<BR> Dim pEnumFeature As IEnumFeature<BR> Dim pFeature0 As IFeature<BR> Dim pFeatureLayer0 As IFeatureLayer<BR> Dim pFeatureClass0 As IFeatureClass<BR> Dim pFeature1 As IFeature<BR> Dim pFeatureLayer1 As IFeatureLayer<BR> Dim pFeatureClass1 As IFeatureClass<BR> Dim pPointCollection As IPointCollection<BR> Dim pDataSet As IDataset<BR> Dim pWorkspaceFactory As IWorkspaceFactory<BR> Dim pWorkspaceEdit As IWorkspaceEdit<BR> Dim lPointIndex As Long<BR> Dim lPointFieldIndex As Long<BR> <BR> On Error GoTo ErrorHanlder<BR> '得到当前层<BR> Set pMxDocument = ThisDocument<BR> Set pMap = pMxDocument.FocusMap<BR> Set pActiveView = pMap<BR> '得到0层和1层的FeatureClass<BR> Set pFeatureLayer0 = pMxDocument.FocusMap.Layer(0)<BR> Set pFeatureClass0 = pFeatureLayer0.FeatureClass<BR> Set pFeatureLayer1 = pMxDocument.FocusMap.Layer(1)<BR> Set pFeatureClass1 = pFeatureLayer1.FeatureClass<BR> '建立编辑工作区<BR> Set pDataSet = pFeatureClass1<BR> Set pWorkspaceFactory = New ShapefileWorkspaceFactory<BR> Set pWorkspaceEdit = pWorkspaceFactory.OpenFromFile(pDataSet.Workspace.PathName, 0)<BR> pWorkspaceEdit.StartEditOperation<BR> pWorkspaceEdit.StartEditing True<BR> '得到Feature<BR> Set pEnumFeature = pMxDocument.FocusMap.FeatureSelection<BR> Set pFeature0 = pEnumFeature.Next<BR> <BR> If pFeature0 Is Nothing Then<BR> MsgBox "Must have Select in Position 0"<BR> Exit Sub<BR> End If<BR> <BR> '循环,通过每个MultiPoint,在1图层上,生成以每个点为特征的Points<BR> While Not pFeature0 Is Nothing<BR> If pFeature0.ShapeCopy.GeometryType = esriGeometryMultipoint Then<BR> Set pPointCollection = pFeature0.ShapeCopy<BR> For nPointIndex = 0 To pPointCollection.PointCount - 1<BR> Set pFeature1 = pFeatureClass1.CreateFeature<BR> '在pFeature1上生成Point<BR> Set pFeature1.Shape = pPointCollection.Point(nPointIndex)<BR> '如果两Feature的FieldCount相同,赋每个Field的值,ID,<BR> 'TypeGeometry的Field除外<BR> If pFeature1.Fields.FieldCount = pFeature0.Fields.FieldCount Then<BR> For lPointFieldIndex = 0 To pFeature1.Fields.FieldCount - 1<BR> If Not pFeature1.Fields.Field(lPointFieldIndex).Type = _<BR> esriFieldTypeGeometry And Not pFeature1.Fields. _<BR> Field(lPointFieldIndex).Type = esriFieldTypeOID Then<BR> pFeature1.Value(lPointFieldIndex) = _<BR> pFeature0.Value(lPointFieldIndex)<BR> End If<BR> Next<BR> End If<BR> '保存Feature<BR> pFeature1.Store<BR> Next<BR> Else<BR> MsgBox "Must have Multipoint in position 0"<BR> Exit Sub<BR> End If<BR> Set pFeature0 = pEnumFeature.Next<BR> Wend<BR> '停止编辑<BR> pWorkspaceEdit.StopEditOperation<BR> pWorkspaceEdit.StopEditing True<BR> Exit Sub<BR> <BR> ErrorHanlder:<BR> pWorkspaceEdit. AbortEditOperation<BR> MsgBox Err.Description<BR> End Sub
|
|
|