|
阅读:1071回复:1
vb.net + AO 怎样向已有图层中添加图元
<P>小弟向已有的图层中添加一个图元(矩形)时遇到问题不知怎样解决(刚学AO),希望大家帮帮忙,附上小弟的原码</P>
<P>Private Sub CreateFeature()<BR> 'Dim rect As Rectangle 'MapObjects2.Rectangle<BR> 'Dim pt As New Point<BR> 'rect = New Rectangle 'MapObjects2.Rectangle<BR> 'rect.X = AxMapControl1.Bounds.X<BR> 'rect.Y = AxMapControl1.Bounds.Y<BR> 'rect.Width = AxMapControl1.Bounds.Width<BR> 'rect.Height = AxMapControl1.Bounds.Height</P> <P> 'If Not rect = Nothing Then<BR> ' Dim pSFillSymbol As ISimpleFillSymbol<BR> ' Dim pColor = New RgbColor</P> <P> ' pSFillSymbol = New SimpleFillSymbol<BR> ' pSFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid<BR> ' pColor.rgb = RGB(0, 0, 255)<BR> ' pSFillSymbol.Color = pColor<BR> ' AxMapControl1.DrawShape(rect, pSFillSymbol)<BR> ' AxMapControl1.Refresh()<BR> 'End If</P> <P> Dim pGeoms_Polyline As IGeometryCollection<BR> Dim mPoint As IPoint<BR> Dim m_pMpt As IMultipoint<BR> Dim m_pPtColl As IPointCollection</P> <P> Dim pSegs_Ring As ISegmentCollection<BR> Dim pPolygon As IPolygon<BR> '-------------------------<BR> Dim pWorkspaceFactory As IWorkspaceFactory<BR> Dim pWorkspaceEdit As IWorkspaceEdit<BR> Dim pFeatureLayer As IFeatureLayer<BR> Dim pDataSet As IDataset<BR> Dim pFeature As IFeature<BR> Dim pClone As IClone<BR> Dim i As Integer</P> <P> 'pGeoms_Polyline = New Collection<BR> mPoint = New Point<BR> m_pMpt = New Multipoint<BR> m_pPtColl = m_pMpt<BR> '第一个点<BR> mPoint.X = AxMapControl1.Bounds.X<BR> mPoint.Y = AxMapControl1.Bounds.Y<BR> m_pPtColl.AddPoint(mPoint)<BR> '第二个点<BR> mPoint.X = AxMapControl1.Bounds.X + AxMapControl1.Bounds.Width<BR> mPoint.Y = AxMapControl1.Bounds.Y<BR> m_pPtColl.AddPoint(mPoint)<BR> '第三个点<BR> mPoint.X = AxMapControl1.Bounds.X + AxMapControl1.Bounds.Width<BR> mPoint.Y = AxMapControl1.Bounds.Y + AxMapControl1.Bounds.Height<BR> m_pPtColl.AddPoint(mPoint)<BR> '第四个点<BR> mPoint.X = AxMapControl1.Bounds.X<BR> mPoint.Y = AxMapControl1.Bounds.Y + AxMapControl1.Bounds.Height<BR> m_pPtColl.AddPoint(mPoint)<BR> '第五个点<BR> mPoint.X = AxMapControl1.Bounds.X<BR> mPoint.Y = AxMapControl1.Bounds.Y<BR> m_pPtColl.AddPoint(mPoint)</P> <P> pClone = m_pPtColl<BR> pGeoms_Polyline = pClone.Clone<BR> pPolygon = New Polygon<BR> For i = 0 To pGeoms_Polyline.GeometryCount - 1<BR> pSegs_Ring = New Ring<BR> pSegs_Ring.AddSegmentCollection(pGeoms_Polyline.Geometry(i)) //此句报错<BR> pPolygon.AddGeometry(pSegs_Ring)<BR> Next i<BR> pPolygon.SimplifyPreserveFromTo()</P> <P> '得到0层的FeatureClass<BR> pWorkspaceFactory = New ShapefileWorkspaceFactory<BR> pFeatureLayer = AxMapControl1.ActiveView.FocusMap.Layer(0)<BR> '创建一个编辑工作区<BR> pDataSet = pFeatureLayer.FeatureClass<BR> MsgBox(pDataSet.Workspace.PathName)<BR> pWorkspaceEdit = pWorkspaceFactory.OpenFromFile(pDataSet.Workspace.PathName, 0)<BR> '开始编辑<BR> pWorkspaceEdit.StartEditOperation()<BR> pWorkspaceEdit.StartEditing(True)<BR> '将创建的Polygon,加到Polygon层上,新建的Feature中<BR> pFeature = pFeatureLayer.FeatureClass.CreateFeature<BR> pFeature.Shape = pPolygon<BR> '保存Feature<BR> pFeature.Store()<BR> AxMapControl1.ActiveView.Refresh()<BR> '停止编辑<BR> pWorkspaceEdit.StopEditOperation()<BR> pWorkspaceEdit.StopEditing(True)</P> <P>上面的代码是小弟查找资料后总结出来的,也不知道从原理上来说对不对,但在运行时会报错,运行到pSegs_Ring.AddSegmentCollection(pGeoms_Polyline.Geometry(i)) 此句时报错。</P> |
|
|
1楼#
发布于:2007-08-08 20:00
<P>小弟已经解决上面的问题了,现在可以向图层中添加图元,但什么也看不见,应该是需要设置Symbol后再添加,但应该什么加呢?下面是修改后的代码</P>
<P> Dim mPoint As IPoint<BR> Dim m_pMpt As IMultipoint<BR> Dim m_pPtColl As IPointCollection<BR> Dim pPolygon As Polygon<BR> Dim pWorkspaceFactory As IWorkspaceFactory<BR> Dim pWorkspaceEdit As IWorkspaceEdit<BR> Dim pFeatureLayer As IFeatureLayer<BR> Dim pDataSet As IDataset<BR> Dim pFeature As IFeature</P> <P> 'pGeoms_Polyline = New Collection<BR> mPoint = New Point<BR> m_pMpt = New Multipoint<BR> m_pPtColl = m_pMpt<BR> '第一个点<BR> mPoint.X = AxMapControl1.Bounds.X<BR> mPoint.Y = AxMapControl1.Bounds.Y<BR> m_pPtColl.AddPoint(mPoint)<BR> '第二个点<BR> mPoint.X = AxMapControl1.Bounds.X + AxMapControl1.Bounds.Width<BR> mPoint.Y = AxMapControl1.Bounds.Y<BR> m_pPtColl.AddPoint(mPoint)<BR> '第三个点<BR> mPoint.X = AxMapControl1.Bounds.X + AxMapControl1.Bounds.Width<BR> mPoint.Y = AxMapControl1.Bounds.Y + AxMapControl1.Bounds.Height<BR> m_pPtColl.AddPoint(mPoint)<BR> '第四个点<BR> mPoint.X = AxMapControl1.Bounds.X<BR> mPoint.Y = AxMapControl1.Bounds.Y + AxMapControl1.Bounds.Height<BR> m_pPtColl.AddPoint(mPoint)<BR> '第五个点<BR> mPoint.X = AxMapControl1.Bounds.X<BR> mPoint.Y = AxMapControl1.Bounds.Y<BR> m_pPtColl.AddPoint(mPoint)</P> <P> pPolygon = New Polygon<BR> pPolygon.AddPointCollection(m_pPtColl)</P> <P> '得到0层的FeatureClass<BR> pWorkspaceFactory = New ShapefileWorkspaceFactory<BR> pFeatureLayer = AxMapControl1.ActiveView.FocusMap.Layer(0)<BR> '创建一个编辑工作区<BR> pDataSet = pFeatureLayer.FeatureClass<BR> MsgBox(pDataSet.Workspace.PathName)<BR> pWorkspaceEdit = pWorkspaceFactory.OpenFromFile(pDataSet.Workspace.PathName, 0)<BR> '开始编辑<BR> pWorkspaceEdit.StartEditOperation()<BR> pWorkspaceEdit.StartEditing(True)<BR> '将创建的Polygon,加到Polygon层上,新建的Feature中<BR> pFeature = pFeatureLayer.FeatureClass.CreateFeature<BR> pFeature.Shape = pPolygon<BR> '保存Feature<BR> pFeature.Store()<BR> AxMapControl1.ActiveView.Refresh()<BR> '停止编辑<BR> pWorkspaceEdit.StopEditOperation()<BR> pWorkspaceEdit.StopEditing(True)</P> |
|