chen222246lei
路人甲
路人甲
  • 注册日期2004-11-04
  • 发帖数3
  • QQ
  • 铜币118枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1071回复:1

vb.net + AO 怎样向已有图层中添加图元

楼主#
更多 发布于:2007-08-08 18:13
<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>
喜欢0 评分0
chen222246lei
路人甲
路人甲
  • 注册日期2004-11-04
  • 发帖数3
  • QQ
  • 铜币118枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部