文档库 最新最全的文档下载
当前位置:文档库 › ArcGIS二次开发测量功能

ArcGIS二次开发测量功能

ArcGIS二次开发测量功能
ArcGIS二次开发测量功能

ArcGIS二次开发之实现测量功能

ArcGIS二次开发之实现测量功能,源代码如下:copyright dedecms

public override void OnMouseDown(int Button, int Shift, int X, int Y) https://www.wendangku.net/doc/784300904.html,

{

// TODO: Add Tool2.OnMouseDown implementation

m_bInUse = true;

m_pStartPoint =

m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);

}

public override void OnMouseMove(int Button, int Shift, int X, int Y)

{

// TODO: Add Tool2.OnMouseMove implementation

bFirstTime = false;

IPoint pPoint;

IRgbColor pRGBColor;

ILine pLine;

ISymbol pSymbol = null;

double dAngle;

double dDeltaX;

double dDeltaY;

double dDistance;

IPolyline pPolyline;

ISegmentCollection pSegmentCollection;

内容来自dedecms

if (m_pLinePolyline == null)

{

bFirstTime = true;

}

pPoint = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);

m_hookHelper.ActiveView.ScreenDisplay.StartDrawing(m_hookHelper.ActiveView.ScreenDis play.hDC, -1);

if (bFirstTime)

{

m_pLineSymbol = new SimpleLineSymbolClass();

m_pLineSymbol.Width = 1;

pRGBColor = new RgbColorClass();

pRGBColor.Red = 222;

pRGBColor.Green = 222;

pRGBColor.Blue = 222;

m_pLineSymbol.Color = pRGBColor;

pSymbol = m_pLineSymbol as ISymbol;

pSymbol.ROP2 = esriRasterOpCode.esriROPXOrPen;

m_pTextSymbol = new TextSymbolClass();

织梦好,好织梦

m_pTextSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHACenter;

m_pTextSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVACenter;

m_pTextSymbol.Size = 10;

pSymbol = m_pTextSymbol as ISymbol;

System.Drawing.Font pFont = new System.Drawing.Font("Arial", 10, FontStyle.Bold);

m_pTextSymbol.Font = (stdole.IFontDisp)OLE.GetIFontDispFromFont(pFont);

pSymbol.ROP2 = esriRasterOpCode.esriROPXOrPen;

copyright dedecms

m_pTextPoint = new PointClass();

}

else

{

m_hookHelper.ActiveView.ScreenDisplay.SetSymbol((ISymbol)m_pTextSymbol);

m_hookHelper.ActiveView.ScreenDisplay.DrawText(m_pTextPoint, m_pTextSymbol.Text);

m_hookHelper.ActiveView.ScreenDisplay.SetSymbol((ISymbol)m_pLineSymbol);

if (m_pLinePolyline.Length > 0)

{

m_hookHelper.ActiveView.ScreenDisplay.DrawPolyline(m_pLinePolyline);

}

}

pLine = new LineClass();

pLine.PutCoords(m_pStartPoint, pPoint);

dAngle = pLine.Angle;

dAngle = dAngle * (180.0 / 3.14159);

if ((dAngle > 90.0) && (dAngle < 180.0))

dAngle = dAngle + 180.0;

else if ((dAngle < 0.0) && (dAngle > -90.0))

dAngle = dAngle - 180.0;

else if ((dAngle < -90.0) && (dAngle > -180.0))

dAngle = dAngle - 180.0;

else if (dAngle > 180)

dAngle = dAngle - 180;

织梦好,好织梦

dDeltaX = pPoint.X - m_pStartPoint.X;

dDeltaY = pPoint.Y - m_pStartPoint.Y;

m_pTextPoint.X = m_pStartPoint.X + dDeltaX / 2.0;

m_pTextPoint.Y = m_pStartPoint.Y + dDeltaY / 2.0;

m_pTextSymbol.Angle = dAngle;

dDistance = System.Math.Round(pLine.Length, 3);

m_pTextSymbol.Text = "[" + dDistance + "]";

m_hookHelper.ActiveView.ScreenDisplay.SetSymbol((ISymbol)m_pTextSymbol);

m_hookHelper.ActiveView.ScreenDisplay.DrawText(m_pTextPoint, m_pTextSymbol.Text);

织梦内容管理系统

object o=Type.Missing;

pPolyline = new PolylineClass();

pSegmentCollection = pPolyline as ISegmentCollection;

pSegmentCollection.AddSegment((ISegment)pLine, ref o, ref o);

m_pLinePolyline = GetSmashedLine(m_hookHelper.ActiveView.ScreenDisplay, (ISymbol)m_pTextSymbol, m_pTextPoint, pPolyline);

m_hookHelper.ActiveView.ScreenDisplay.SetSymbol((ISymbol)m_pLineSymbol);

if (m_pLinePolyline.Length > 0)

m_hookHelper.ActiveView.ScreenDisplay.DrawPolyline(m_pLinePolyline);

m_hookHelper.ActiveView.ScreenDisplay.FinishDrawing();

https://www.wendangku.net/doc/784300904.html,

}

public override void OnMouseUp(int Button, int Shift, int X, int Y)

{

// TODO: Add Tool2.OnMouseUp implementation

m_bInUse = false;

m_hookHelper.ActiveView.ScreenDisplay.StartDrawing(m_hookHelper.ActiveView.ScreenDis play.hDC, -1);

m_hookHelper.ActiveView.ScreenDisplay.SetSymbol((ISymbol)m_pTextSymbol);

m_hookHelper.ActiveView.ScreenDisplay.DrawText(m_pTextPoint, m_pTextSymbol.Text);

m_hookHelper.ActiveView.ScreenDisplay.SetSymbol((ISymbol)m_pLineSymbol);

if (m_pLinePolyline.Length > 0)

m_hookHelper.ActiveView.ScreenDisplay.DrawPolyline(m_pLinePolyline);

织梦内容管理系统

m_hookHelper.ActiveView.ScreenDisplay.FinishDrawing();

}

public override bool Deactivate()

{

m_pTextSymbol = null;

m_pTextPoint = null;

m_pLinePolyline = null;

m_pLineSymbol = null;

m_bInUse = false;

return true;

}

private IPolyline GetSmashedLine(IScreenDisplay pDisplay, ISymbol pTextSymbol, IPoint pPoint, IPolyline pPolyline)

{

IPolygon pBoundary;

ITopologicalOperator pTopologicalOperator;

IPolyline pIntersect;

本文来自织梦

pBoundary=new PolygonClass();

pTextSymbol.QueryBoundary(pDisplay.hDC,pDisplay.DisplayTransformation,pPoint,pBoundar y);

pTopologicalOperator=pBoundary as ITopologicalOperator;

pIntersect = pTopologicalOperator.Intersect(pPolyline,

esriGeometryDimension.esriGeometry1Dimension) as IPolyline;

pTopologicalOperator = pPolyline as ITopologicalOperator;

return pTopologicalOperator.Difference(pIntersect) as IPolyline;

}

public override void OnDblClick()

{

m_hookHelper.ActiveView.Refresh();

}

#endregion

}

距离的测量:要实现的是测量两个点之间的距离。用ToolControl实现,选中工具后,在测量的开始点按鼠标左键,鼠标拖动过程中实时画一条从开始点到鼠标当前位置的橡皮线,计算并显示开始点到目标点的距离,释放左键后擦除所画的线和文本。

l 要点

要实时显示结果,计算过程应该在MouseMove事件中处理。

要绘制橡皮线,必须设置当前绘图模式为esriROPXOrPen。即混合后的颜色取为当前背景色和画笔颜色的“异或”结果。这样在设定了画笔颜色后,在同一位置第二次画同一图形,就会将图形“擦除”,并恢复原来的背景色。

所有的对设备(包括显示器、打印机、内存位图)的绘图操的前后都应分别调用IDisplay 的两个方法StartDrawing和EndDrawing。StartDrawing可以准备特定的设备环境,管理本例中要用到的各种Symbols,FinishDrawing完成收尾工作,以保证下一次对StartDrawing 的调用不会出错。

l 程序说明

函数UITMeasureDistance_Deactivate是Deactivate属性的处理代码,当工具失去焦点时,清除已创建的对象。过程UITMeasureDistance_MouseDown是MouseDown事件的处理代码,当鼠标键按下时,记录起始点。过程UITMeasureDistance_MouseMove是MouseMove事件的处理代码,鼠标移动过程中测量距离,计算文本显示的角度,以及完成屏幕上橡皮线的绘制。过程UITMeasureDistance_MouseUp是MouseUp事件的处理代码,

当释放鼠标键时,擦除刚绘制的图形。函数GetSmashedLine将获得一条IPolyline对象,这条Polyline在要显示文本的地方留下了空白,以防止出现所画线穿过文字的现象。

另外,本例未考虑坐标系的转换,在球面地理坐标系是测量结果为经度差或纬度差。

l 代码

Option Explicit

Private m_bInUse As Boolean

Private m_pLineSymbol As ILineSymbol

Private m_pLinePolyline As IPolyline

Private m_pTextSymbol As ITextSymbol

Private m_pStartPoint As IPoint

Private m_pTextPoint As IPoint

Private Function UITMeasureDistance_Deactivate() As Boolean

' Stop doing operation

Set m_pTextSymbol = Nothing

Set m_pTextPoint = Nothing

Set m_pLinePolyline = Nothing

Set m_pLineSymbol = Nothing

m_bInUse = False

UITMeasureDistance_Deactivate = True

End Function

Private Sub UITMeasureDistance_MouseDown(ByVal Button As Long, ByVal Shift As Long, _ByVal X As Long, ByVal Y As Long)

Dim pMxDocument As IMxDocument

Dim pActiveView As IActiveView

m_bInUse = True

Set pMxDocument = ThisDocument

Set pActiveView = pMxDocument.FocusMap

' Get point to measure distance from

Set m_pStartPoint =

pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y)

End Sub

Private Sub UITMeasureDistance_MouseMove(ByVal Button As Long, ByVal Shift As Long, _ByVal X As Long, ByVal Y As Long)

Dim pMxDocument As IMxDocument

Dim pActiveView As IActiveView

Dim bFirstTime As Boolean

Dim pPoint As IPoint

Dim pRGBColor As IRgbColor

Dim pSymbol As ISymbol

Dim pFont As IFontDisp

Dim pLine As ILine

Dim dAngle As Double

Dim dDeltaX As Double

Dim dDeltaY As Double

Dim dDistance As Double

Dim pPolyLine As IPolyline

Dim pSegmentCollection As ISegmentCollection

On Error GoTo ErrorHandler

If (Not m_bInUse) Then

Exit Sub

End If

Set pMxDocument = ThisDocument

Set pActiveView = pMxDocument.FocusMap

If (m_pLineSymbol Is Nothing) Then

bFirstTime = True

End If

' Get current point

Set pPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y) pActiveView.ScreenDisplay.StartDrawing pActiveView.ScreenDisplay.hDC, -1 If bFirstTime Then

' Set Line Symbol

Set m_pLineSymbol = New SimpleLineSymbol

m_pLineSymbol.Width = 2

Set pRGBColor = New RgbColor

With pRGBColor

.Red = 222

.Green = 222

.Blue = 222

End With

m_pLineSymbol.Color = pRGBColor

Set pSymbol = m_pLineSymbol

pSymbol.ROP2 = esriROPXOrPen

' Set Text Symbol

Set m_pTextSymbol = New TextSymbol

m_pTextSymbol.HorizontalAlignment = esriTHACenter

m_pTextSymbol.VerticalAlignment = esriTVACenter

m_pTextSymbol.Size = 16

Set pSymbol = m_pTextSymbol

Set pFont = m_pTextSymbol.Font

https://www.wendangku.net/doc/784300904.html, = "Arial"

pSymbol.ROP2 = esriROPXOrPen

' Create point to draw text in

Set m_pTextPoint = New Point

Else

' Use existing symbols and draw existing text and polyline

pActiveView.ScreenDisplay.SetSymbol m_pTextSymbol

pActiveView.ScreenDisplay.DrawText m_pTextPoint, m_pTextSymbol.Text pActiveView.ScreenDisplay.SetSymbol m_pLineSymbol

If (m_pLinePolyline.Length > 0) Then

pActiveView.ScreenDisplay.DrawPolyline m_pLinePolyline End If

End If

' Get line between from and to points, and dAngle for text

Set pLine = New esriCore.Line

pLine.PutCoords m_pStartPoint, pPoint

dAngle = pLine.angle

dAngle = dAngle * (180# / 3.14159)

If ((dAngle > 90#) And (dAngle < 180#)) Then

dAngle = dAngle + 180#

ElseIf ((dAngle < 0#) And (dAngle < -90#)) Then

dAngle = dAngle - 180#

ElseIf ((dAngle < -90#) And (dAngle > -180)) Then

dAngle = dAngle - 180#

ElseIf (dAngle > 180) Then

dAngle = dAngle - 180#

End If

' For drawing text, get text(dDistance), dAngle, and point

dDeltaX = pPoint.X - m_pStartPoint.X

dDeltaY = pPoint.Y - m_pStartPoint.Y

m_pTextPoint.X = m_pStartPoint.X + dDeltaX / 2#

m_pTextPoint.Y = m_pStartPoint.Y + dDeltaY / 2#

m_pTextSymbol.angle = dAngle

dDistance = Round(pLine.Length, 3)

m_pTextSymbol.Text = "[" & dDistance & "]"

' Draw text

pActiveView.ScreenDisplay.SetSymbol m_pTextSymbol

pActiveView.ScreenDisplay.DrawText m_pTextPoint, m_pTextSymbol.Text ' Get polyline with blank space for text

Set pPolyLine = New Polyline

Set pSegmentCollection = pPolyLine

pSegmentCollection.AddSegment pLine

Set m_pLinePolyline = GetSmashedLine(pActiveView.ScreenDisplay,

m_pTextSymbol, _m_pTextPoint, pPolyLine)

' Draw polyline

pActiveView.ScreenDisplay.SetSymbol m_pLineSymbol

If (m_pLinePolyline.Length > 0) Then

pActiveView.ScreenDisplay.DrawPolyline m_pLinePolyline

End If

pActiveView.ScreenDisplay.FinishDrawing

Exit Sub

ErrorHandler:

MsgBox Err.Description

End Sub

Private Sub UITMeasureDistance_MouseUp(ByVal Button As Long, ByVal Shift As Long, _ByVal X As Long, ByVal Y As Long)

Dim pMxDocument As IMxDocument

Dim pActiveView As IActiveView

On Error GoTo ErrorHandler

If (Not m_bInUse) Then

Exit Sub

End If

m_bInUse = False

If (m_pLineSymbol Is Nothing) Then

Exit Sub

End If

Set pMxDocument = ThisDocument

Set pActiveView = pMxDocument.FocusMap

'Draw measure line and text

pActiveView.ScreenDisplay.StartDrawing pActiveView.ScreenDisplay.hDC, -1 pActiveView.ScreenDisplay.SetSymbol m_pTextSymbol

pActiveView.ScreenDisplay.DrawText m_pTextPoint, m_pTextSymbol.Text pActiveView.ScreenDisplay.SetSymbol m_pLineSymbol

If (m_pLinePolyline.Length > 0) Then

pActiveView.ScreenDisplay.DrawPolyline m_pLinePolyline

End If

pActiveView.ScreenDisplay.FinishDrawing

Set m_pTextSymbol = Nothing

Set m_pTextPoint = Nothing

Set m_pLinePolyline = Nothing

Set m_pLineSymbol = Nothing

Exit Sub

ErrorHandler:

MsgBox Err.Description

End Sub

Private Function GetSmashedLine(pDisplay As IScreenDisplay, pTextSymbol As ISymbol, _pPoint As IPoint, pPolyLine As IPolyline) As IPolyline

' Returns a Polyline with a blank space for the text to go in

Dim pSmashed As IPolyline

Dim pBoundary As IPolygon

Dim pTopologicalOperator As ITopologicalOperator

Dim pIntersect As IPolyline

On Error GoTo ErrorHandler

Set pBoundary = New Polygon

pTextSymbol.QueryBoundary pDisplay.hDC, pDisplay.DisplayTransformation, pPoint, pBoundary

Set pTopologicalOperator = pBoundary

Set pIntersect = pTopologicalOperator.Intersect(pPolyLine,

esriGeometry1Dimension)

Set pTopologicalOperator = pPolyLine

Set GetSmashedLine = pTopologicalOperator.Difference(pIntersect)

Exit Function

ErrorHandler:

MsgBox Err.Description

End Function

本例要实现的是如何在ArcMap上测量一个Polygon的面积。

l 要点

首先用IRubberBand.TrackNew方法在ArcMap上画出一个Polygon,然后由这个Polygon 获得一个IArea的实例,最后使用IArea.Area方法计算出这个Polygon的面积。

主要用到IRubberBand接口,IPolygon接口和IArea接口。

l 程序说明

函数DrawPolygon实现在ArcMap上画一个Polygon。

函数MeasurePolygon实现测量pPolygon的面积。

l 代码

Private Function DrawPolygon() As IPolygon

Dim pMxDocument As IMxDocument

Dim pActiveView As IActiveView

Dim pSimpleFillS As ISimpleFillSymbol

Dim pRgbColor As IRgbColor

Dim pRubberBand As IRubberBand

Dim pPolygon As IPolygon

On Error GoTo ErrorHandler:

Set pMxDocument = ThisDocument

Set pActiveView = pMxDocument.ActiveView

Set pSimpleFillS = New SimpleFillSymbol

Set pRgbColor = New RgbColor

pRgbColor.Red = 255

pSimpleFillS.Color = pRgbColor

Set pRubberBand = New esriCore.RubberPolygon

Set pPolygon = pRubberBand.TrackNew(pActiveView.ScreenDisplay, pSimpleFillS) With pActiveView.ScreenDisplay

.StartDrawing pActiveView.ScreenDisplay.hDC, esriNoScreenCache

.SetSymbol pSimpleFillS

.DrawPolygon pPolygon

.FinishDrawing

End With

Set DrawPolygon = pPolygon

Exit Function

ErrorHandler:

MsgBox Err.Desciption

End Function

Private Function MeasurePolygon(pPolygon As IPolygon) As Double Dim pArea As IArea

On Error GoTo ErrorHandler:

Set pArea = pPolygon

MeasurePolygon = Abs(pArea.Area())

Exit Function

ErrorHandler:

MsgBox Err.Desciption

End Function

Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, _ByVal x As Long, ByVal y As Long)

Dim pPolygon As IPolygon

Dim dArea As Double

On Error GoTo ErrorHandler:

Set pPolygon = DrawPolygon()

dArea = MeasurePolygon(pPolygon)

MsgBox "面积为:" & dArea

Exit Sub

ErrorHandler:

MsgBox Err.Desciption

End Sub

ArcGISEngine二次开发——提高篇

ArcGIS Engine二次开发 ——提高篇

1缩略图(鹰眼) 鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地图的范围。在本小节中我们将学习如何制作这种鹰眼。 1.1添加控件 新建一个C#.Net项目,项目名称为OverView,将Form1的名字设置为MainForm,并添加ToolbarControl 、两个MapControl和LicenceControl等四个控件。布局如下图所示。左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。 图 1 界面布局 在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。 图2添加按钮 1.2代码添加及解释 鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在ArcMap中使用一个线框在鹰眼视图中标识。当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼视图中的红线框时,主视图中的视图范围也随之改变。 下面开始实现鹰眼功能,添加、、 三个引用。首先在axMapControl1中视图范围改变时鹰眼窗体要做出对应的响应,即绘制线框并显示,在OnExtentUpdated事件中添加代码如下: private void axMapControl1_OnExtentUpdated(object sender, e) { et项目,项目名称为Buffer,将Form1的名字设置为MainForm,并添加ToolbarControl 、MapControl、TOCControl、LicenceControl和Button等五个控件。并将ToolbarControl 、TOCControl的伙伴控件设为MapControl,Button控件的Name属性设定为btnBuffer,Text属性设定为“缓冲区分析”。控件布局效果如下图所示。 图3控件布局效果 在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示。 图4添加按钮 1.2.1代码添加及解释 首先添加如下四个命名空间的引用。 在使用Geoprocessor工具实现缓冲区分析时,需要首先定义一个Geoprocessor对象,因为命名空间“也包含Geoprocessor类,为了避免混淆,我们使用命名空间来定义Geoprocessor,然后设置Geoprocessor中的环境参数,这里我们使用默认参数。然后定义一个操作类Buffer,并设置参数,生成缓冲区的参数包含原始图层,缓冲半径和输出路径,最后使用已定义的Geoprocessor对象执行即可。双击“生成缓存区”按钮,添加代码如下: private void btnBuffer_Click(object sender, EventArgs e) {

Arcgis二次开发软件安装教程

Arcgis二次开发软件安装教程 1.环境配置 Win7 32位系统,Arcgis for Desktop 10.2,jdk-8u101-windows-i586,eclipse-jee-mars-2-win32,ArcGIS_Engine_DevKit_Windows_102_134944 64位win7系统可参考文档:https://www.wendangku.net/doc/784300904.html,/shugui/p/3795803.html 2.安装过程 1)安装Arcgis for Desktop 10.2 下载地址 https://https://www.wendangku.net/doc/784300904.html,/share/link?shareid=4262105946&uk=1913532136#path=%252 F 安装教程:https://www.wendangku.net/doc/784300904.html,/article/e73e26c0cb5c1324adb6a791.html 2)安装jdk 下载地址 https://www.wendangku.net/doc/784300904.html,/technetwork/java/javase/downloads/jdk8-downloads-2133151. html

具体安装过程参考 https://www.wendangku.net/doc/784300904.html,/article/6dad5075d1dc40a123e36ea3.html 3)安装Eclipse 下载地址:https://https://www.wendangku.net/doc/784300904.html,/downloads/packages/release/Mars/2 解压后即可使用 安装教程参考:https://www.wendangku.net/doc/784300904.html,/article/d7130635194f1513fcf47557.html 4) 安装windowbuilder插件 找到对应版本的windowbuilder,本教程使用4.5版本 https://www.wendangku.net/doc/784300904.html,/windowbuilder/download.php eclipse在线更新 打开eclipse-->help-->Install New Software-->Add 在location中粘贴刚才复制的链接,OK,等待加载插件信息

ArcGIS_Engine二次开发——基础篇

ArcGIS_Engine二次开发——基础篇 ArcGIS Engine二次开发 ——基础篇

1ArcGIS Engine二次开发——基础篇 1.1第一个简单的A rcGIS Engine地图显示程序 这个例子将引导您创建第一个简单的地图显示程序,并添加基本的缩放和漫游功能。如果您之前没有接触过ArcGIS Engine的开发,那么这个例子是您迈入ArcGIS Engine二次开发大门的极好例子,将从零开始引导您一步一步完成任务。 1.1.1创建一个新的工程 首先打开Microsoft Visual Studio 2005,点击菜单栏中的“文件”—>“新建”—>“项目”,在弹出的对话框中选择新建一个Visual C#的Windows应用程序,之后更改项目名称为“地图浏览”,更改文件的路径为个人实习文件夹,点击“确定”即可。 图1新建项目对话框 选中项目“地图浏览”中的窗体“Form1”,修改其Name属性为“MainForm”,Text 属性为“地图浏览”,

图2窗体命名 1.1.2添加控件及引用 点击编译器最左侧的“工具箱”(不存在时可通过“视图”“工具箱”打开),在弹出的选择项中找到“ArcGIS Windows Forms”项,单击其中的MapControl,之后在Form1的空白处单击鼠标左键不放并拖拽鼠标,直到调整MapControl到合适的大小再松开鼠标(您也可以直接在工具箱中双击MapControl,该控件则会自动加入到Form1中)。用同样的方法,再将LicenseControl添加到Form1中。 图 3 打开工具箱

图4工具箱 如果您在工具箱中找不到MapControl,则请依次尝试以下两种解决方案。首先单击工具栏,待工具箱弹出之后,在工具箱的任意位置上单击鼠标右键,从弹出菜单中选择“重置工具箱”。如果这一步操作之后仍然无法看到MapControl,则在工具箱的任意位置上单击鼠标右键,找到“常规”选项卡,然后在“常规”选项卡上单击鼠标右键,在弹出菜单中单击“选择项(I)…”,在弹出的对话框中选择“.NET Framework组件”,找到“LicenseControl”和“MapControl”,将这两项前的复选框打上勾,最后点击确定即可(如果在“.NET Framework 组件”这个面板中找不到这两项,则选择“COM 组件”面板,在“ESRI LicenseControl”和“ESRI MapControl”前面打勾)。

VS2013中ArcGIS二次开发部分问题问题解决方法

VS2013中ArcGIS二次开发部分问题问题解决方法 1、VS2013中新建项目时没有ArcGIS模板解决办法: 安装ArcGIS10.x会自动生成C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\ArcGIS文件夹 和C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ProjectTemplates\CSharp\ArcGIS文件夹

打开vs2013安装目录: 将上面所说的两个ArcGIS文件夹复制到vs2013安装目录下对应的ItemTemplates\CSharp文件夹和ProjectTemplates\CSharp文件夹, 继续返回vs2013安装目录,找到devenv.exe文件,右击该文件选择属性----兼容性---以管理员身份运行此程序。

在开始菜单栏的所有程序中找到下图文件夹,打开Visual StudioTools, 如下图所示:以管理员身份运行VS2013开发人员命令提示,在打开的命令窗口输入devenv.exe /InstallVSTemplates后回车即可

2、vs2013中工具箱中没有ArcGIS控件解决方法: 在工具箱中右键添加选项卡,并起名为ArcGIS, 在ArcGIS下拉后的空白处右击选择项,在弹出的窗口中点击浏览 找到安装ArcObjects SDK for https://www.wendangku.net/doc/784300904.html, Framework时的目录DeveloperKit10.2,打开该目录下的DotNet文件夹,选中ESRI.ArcGIS.AxControls.dll文件,

ArcGIS二次开发课程设计

地理信息系统GIS二次开发程序设计 实验报告 班级:10级测绘1班学号: 姓名: 指导教师:

面向接口编程 一、实验目的: 1.理解接口编程、面向对象编程的思想,两者的区别,以及各自的优缺点; 2.掌握AE接口实现图层加载的方法: IworkspaceFactory-->Workspace->IfeatureWorkSpace->IFeatrueClass->IFeature(); 3.理解并掌握使用UI进行属性查询和空间查询; 二.实验内容: 1. 利用IWorkSpace接口在Map中增加一个GeoDatabase图层; 2. 利用Imap的SelectBy*实现简单选择; 3. 利用IQueryFilter实现简单空间查询。(未实现) 三、实验过程 1.接口、面向接口编程基本知识点。 (1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则;是在一定粒度视图上同类事物的抽象表示。接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。接口应有两类:第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);第二类是对一个体某一方面的抽象,即形成一个抽象面(interface); 一个体有可能有多个抽象面。 (2)面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法;是与“面向过程”即“我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现”相对应的。 面向对象实现了对象属性与行为的分离,对象之间通过消息进行通信;具有同一属性和行为的对象被抽象成类,每一个类是相同或相似属性和方法的封装;类与类之间具有继承和派生关系。 (3)面向接口与面向对象的区别: 接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)是针对编程开发的对象而言的,不是同一感念。 interface关键字用来声明一个接口,它可以产生一个完全抽象的类,并且不提供任何具体实现。 2.GeoDatabase的数据加载: (1)理解 Workspace是一个容器,包含了空间和非空间数据集,如feature class,raster dataset,table。提供了一系列创建和操作数据集的方法。 FeatureClass 是空间事物的顶级类,类似与C#中的Object类,提供了一系列属性和方法。在同一个FeatureClass中的Feature具有相同的属性字段。 FeatureLayer是一个基于矢量数据的图层,典型的数据包括Geodatabase、coverage和shapefile等,FeatureLayer可以直接在MapControl中显示。

arcgis 二次开发

gis的开发方法有三种,即独立开发,宿主型二次开发,基于gis组件的二次开发,其中独立开发为底层开发,不依赖于任何gis工具软件,开发难度太大,后两者是基于一种软件的二次开发,这样的二次开发则相对较简单,他的好处也是显而易见的。 宿主型二次开发是指基于GIS平台软件上进行应用系统开发。大多数GIS 平台软件都提供了可供用户进行二次开发的脚本语言,如ESRI的ArcView提供 了Avenue语言,Maplnfo公司的MapInfo Professional提供了MapBasic语言 等等。用户可以利用这些脚本语言,以原GIS软件为开发平台,开发出自己的 针对不同应用对象的应用程序。这种方式省时省心,但进行二次开发的脚本语言, 作为编程语言,功能极弱,用它们来开发应用程序仍然不尽如人意,并且所开发 的系统不能脱离GIS平台软件,是解释执行的,效率不高。相比基于组件的二次开发可以根据自己的需要扩展系统的功能,并且可以脱离原gis平台软件,综合看来,单纯二次开发受gis基础平台提供的编程语言的限制,而基于组件式的二次开发不仅能提高开发效率,同时可靠性好,易于移植,便于维护。所以,结合gis基础平台软件与当今可视化开发语言的组件式二次开发成为gis开发的主流。但是二次开发也不是十全十美的,只要我们使其中的瑕疵减少,误差也就会减少。 ArcGIS Engine开发工具包是一个基于组件的软件开发产品,用于建立和部署自定义GIS和制图应用程序。ArcGIS Engine开发工具包不是一个终端用户产品,而是一个应用程序开发人员的工具包。可以用ArcGIS Engine开发工具包建立基本的地图浏览器或综合、动态的GIS编辑工具。使用ArcGIS Engine开发工具包,开发人员在建立定制的地图接口方面具有前所未有的灵活性。开发人员可以使用几个API中的任何一个来建立独一无二的应用程序,或者将ArcGIS Engine组件与其他软件组件组合起来实现地图与用户管理信息之间的协同关系。 (可选资料) 从第一个GIS系统一加拿大地理信息系统(CGIS)到目前用户可以自己定制 的GIS系统,GIS二次开发经历了巨大的变化。在这个发展过程中主要出现了两 种GIS二次方式,即宿主型二次开发和基于GIS组件的二次开发131。 GIS开发过程中常用的两种构架(c/s和B/S) 基于c/s结构的GIS是 由客户机完成GIS分析、输出工作。GIS数据和分析工具最初放在服务器上,运 行时下载到客户机,操作灵活。但是c/s应用软件模式大都是基于“胖客户机” 结构下的两层结构应用软件。客户端软件一般由应用程序及相应的数据库连接程 序组成,服务器端软件一般是某种数据库系统。客户机端软件的主要功能是处理 与用户的交互、按照某种应用逻辑实现与数据库系统的交互;服务器端软件的主 要功能是数据库系统根据客户端软件的请求进行数据库操作,然后将结果传送到 客户端软件。客户端软件与服务器端软件之问的通信主要是通过SQL语句。两层 C/S结构应用软件的开发工作主要集中在客户端,客户端端软件不但要完成用户

应用型ArcGIS开发的三种实现方式

应用型ArcGIS开发的三种实现方式 (1)独立开发 指不依赖于任何GIS工具软件,从空间数据的采集、编辑到数据的处理分析及结果输出,所有的算法都由开发者独立设计,然后选用某种程序设计语言,如Visual C++、Delphi等,在一定的操作系统平台上编程实现。这种方式的好处在于无须依赖任何商业GIS工具软件,减少了开发成本,但一方面对于大多数开发者来说,能力、时间、财力方面的限制使其开发出来的产品很难在功能上与商业化GIS工具软件相比,而且在购买GIS工具软件上省下的钱可能还抵不上开发者在开发过程中绞尽脑汁所花的代价。 (2)单纯二次开发 指完全借助于GIS工具软件提供的开发语言进行应用系统开发。GIS工具软件大多提供了可供用户进行二次开发的宏语言,如ESRI的ArcView提供了Aven ue语言,MapInfo公司研制的MapInfo Professional提供了MapBasic语言等等。用户可以利用这些宏语言,以原GIS工具软件为开发平台,开发出自己的针对不同应用对象的应用程序。这种方式省时省心,但进行二次开发的宏语言,作为编程语言只能算是二流,功能极弱,用它们来开发应用程序仍然不尽如人意。 (3)集成二次开发 集成二次开发是指利用专业的GIS工具软件,如ArcView、MapInfo等,实现GIS的基本功能,以通用软件开发工具尤其是可视化开发工具,如Delphi、V isual C++、Visual Basic、Power Builder等为开发平台,进行二者的集成开发。 集成二次开发目前主要有两种方式: 1.OLE/DDE 采用OLE Automation技术或利用DDE技术,用软件开发工具开发前台可执行应用程序,以OLE自动化方式或DDE方式启动GIS工具软件在后台执行,利用回调技术动态获取其返回信息,实现应用程序中的地理信息处理功能; 2. GIS 控件 利用GIS工具软件生产厂家提供的建立在OCX技术基础上的GIS功能控件,如ESRI的MapObjects、MapInfo公司的MapX等,在Delphi等编程工具编制的应用程序中,直接将GIS功能嵌入其中,实现地理信息系统的各种功能。

ArcGIS进行二次开发别人经验

请问怎样利用ArcGIS进行二次开发? 2012-10-05 17:42|分类:|浏览1995次 我装了arcgis10.上面有arcGlobe,arcSence,arcCatalog,arcMap.只有这些能进行开发吗?l 另外需要装arcgis object和arcEngine吗? 分享到: 2012-10-07 16:10提问者采纳 安装ArcGIS10.0后,装(如Visual Studio),如果已经有,跳过这一步直接安装ArcGIS SDK 及AE并授权,即可在中使用来做。 ArcGIS Map、Server、Catalog、Scene、Globe都是基于ArcGIS Object开发出来的产品;ArcGIS Engine也是基于ArcGIS Object的类库封装起来的一个开发产品,用来自定义开发C/S端应用GIS。 追问 我比较擅长使用C#,但是好像所提供的开发包没有支持c#语言的??我装的vs2010也是C#环境。 回答 好,C#属于.NET,装SDK For .NET就行了。 提问者评价 谢谢你耐心的指导,问题算是解决了。 想自学ArcGIS二次开发,Java语言 2012-03-28 12:11|分类:|浏览529次 想自学ArcGIS二次开发,使用Java语言,本人目前水平:C语言一点基础,做过谭浩强C程序设计上的大部分题,无实际开发经验,会一点ArcGIS简单操作。请问各位高手、大侠:我该如何入手,学习步骤、方法,再推荐一些书籍。谢谢! 分享到:

2012-03-28 15:25提问者采纳 要学开发,必须要先学Java语言,了解编程;之后要熟悉软件的架构与原理,然后你就可以进行的学习了。不过现实中用的ArcGIS Server开发比较多,学习的时候可以偏重些。 追问 能推荐些书籍吗,哪些书比较好,有没有一些相关学习资源? 回答 学习Java的话当然是《Java入门经典》 学习Server的话,比较好的书比较少,不过你可以看一下AE的书籍。当然如果你的英语比较好的话建议你上https://www.wendangku.net/doc/784300904.html,和程序中自带的一些例子 用JAVA进行ARCGIS二次开发的源代码 2012-09-03 16:56提问者悬赏:5分||分类:|浏览19次 我有更好的答案 分享到: 1条回答 2012-09-04 20:00|三级最快回答 可用装好sdk for java,在program lifes下会有实例。。

ArcGIS二次开发测量功能

ArcGIS二次开发之实现测量功能 ArcGIS二次开发之实现测量功能,源代码如下:copyright dedecms public override void OnMouseDown(int Button, int Shift, int X, int Y) https://www.wendangku.net/doc/784300904.html, { // TODO: Add Tool2.OnMouseDown implementation m_bInUse = true; m_pStartPoint = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y); } public override void OnMouseMove(int Button, int Shift, int X, int Y) { // TODO: Add Tool2.OnMouseMove implementation bFirstTime = false; IPoint pPoint; IRgbColor pRGBColor; ILine pLine; ISymbol pSymbol = null; double dAngle; double dDeltaX; double dDeltaY; double dDistance; IPolyline pPolyline; ISegmentCollection pSegmentCollection; 内容来自dedecms if (m_pLinePolyline == null) { bFirstTime = true; }

Arcgis Engine二次开发实验报告

GIS二次开发实验报告 学号:201420310115 姓名:李梦南 班级:1423101 专业:地理信息系统 任课老师:李小龙 二零一七年六月十二日

目录 1实验一:AOI书签开发 (1) 1.1实验目的 (1) 1.2实验内容 (1) 1.3实验步骤与结果 (1) 2.1实验目的 (5) 2.2实验内容 (5) 2.3实验步骤与结果 (5) 2实验三:地图渲染 (9) 3.1实验目的 (9) 3.2实验内容 (9) 3.3实验步骤结果 (9) 3实验四:空间数据处理 (16) 4.1实验目的 (16) 4.2实验内容 (16) 4.3实验步骤与结果 (16) 4实验五:GIS分析 (25) 5.1实验目的 (25) 5.2实验内容 (25) 5.3实验步骤与结果 (25) 5实验六:栅格数据处理 (33) 6.1实验目的 (33) 6.2实验内容 (33) 6.3实验步骤与结果 (33) 6实验总结 (43)

1实验一:AOI书签开发 1.1 实验目的 ?掌握AOI书签程序开发 1.2 实验内容 ?实现AOI书签的创建 ?实现AOI书签的调用 1.3 实验步骤与结果 实验思路、关键代码(全面注释)、运行结果截图 实验思路: 空间书签是用户定义创建的标志某个特定地理位置的快捷方式,创建好书签后能够很方便的找到某个地理位置。在本实验中我们需要创建的是AOI书签,即用户所关心的一个范围,通过调用该书签,用户可以马上找到书签所指范围。 实现本实验主要包括以下几个方面: 1.添加控件和类库引用:添加创建书签控件、保存和调用书签控件,添加 Geometry类库 2.添加“创建书签”函数:创建书签,保存当前感兴趣范围,将书签名加入 组合框,以便调用 3.添加“书签名称设置”窗体:获取书签名,传递给主窗体 4.添加两个事件响应函数:“创建书签”菜单项的点击事件,作用是打开“书 签名称设置”窗体;“确认”按钮的点击事件,作用是调用创建书签函数 5.实现与调用书签:添加组合框的事件响应函数,作用是当组合框中选项 改变时,地图将刷新显示出书签所记录的范围。

GIS二次开发方法与实现

中图分类号:TP311.52文献标识码:A文章编号:1009-2552(2008)08-0065-03 GIS二次开发方法与实现 杨宏鹏,王阿川,王妍玮 (东北林业大学信息与计算机工程学院,哈尔滨150040) 摘要:介绍了地理信息系统二次开发的三种方法:独立二次开发、单纯二次开发和集成二次开发。随后比较各自的优缺点。采用ESRI公司提供的ArcObjects组件库和M apControl控件以及Scene View er C ontrol控件。用VisualC++6.0在ArcGIS8.3环境下进行了G IS的二次开发。 关键词:地理信息系统;ArcO bjects;二次开发 Method and implementation of GIS secondary development YA NG Hong2peng,WA NG A2chuan,W AN G Yan2w ei (School of Information and Computer Engineer ing,Nor theast For estr y University,Harbin150040,China) Abstract:The paper introduces three methods of GIS sec ondary development,they are independent secondary development,simple secondary development and integrated secondary development.Then it c ompares the advantages and disadvantages of each https://www.wendangku.net/doc/784300904.html,ing A rcO bjects component library and M apControl controls and Scene View er Control controls provided by ESRI company,this paper makes secondary development of GIS under ArcGIS8.3environment based on VisualC++6.0. Key w or ds:GI S;ArcObjects;secondary development 20世纪中叶以后,伴随着计算机科学、现代数学、计算机图形学和虚拟现实技术的发展,地理信息系统(GIS)应运而生,该技术将数字地图和地理分析功能以及数据库操作集合在一起,可对地理信息进行综合分析和处理。现有的地理信息系统软件主要集中于描述二维空间信息,将实际的三维事物采用二维的方式表示,具有很大的局限性,大量的多维空间信息无法得到利用。而且在许多实际应用中,诸如:环境仿真、设施管理、森林防火的模型分析与辅助决策,用户需要三维可交互GIS的支持,以便三维可视化、动态交互地处理、分析、显示他们的多种地理相关数据。现有的GIS系统已经不能满足用户在个别领域的专项研究,因此对地理信息系统进行二次开发,尤其是进行三维可视化的开发与设计就具有非常重要的意义。 目前,在软件开发领域,一场新的革命正在悄悄兴起,这是由日趋成熟的组件技术引发的[1]。组件化技术从根本上改变了传统的软件开发思想,实现了软件的复用和健壮更新。 1GIS的开发方法 应用型GIS的二次开发通常有三种方法[2]:独立二次开发、单纯二次开发和集成二次开发。 1.1独立二次开发 独立二次开发是指不依赖任何GIS工具软件,从空间数据的采集、编辑到数据的处理分析及结果输出,所有的算法都由开发者独立设计,然后选用某种程序设计语言,如Visual C++,D elphi,C++Builder, VJ++等,在一定的操作系统平台上编辑实现。 这种方式的好处在于无需依赖任何商业GIS工具软件,减少了开发成本,同时程序员可以对程序的各个方面进行总体控制。因此,系统各个组成部分之间的联系最为紧密,综合程度和操作效率最高。但由于地理信息系统的复杂性,开发的工作量是十分庞大的,开发周期长。对于大多数开发者来说,能力、时间、财力方面的限制使其开发处理的产品很难在功能上与商业化GIS工具软件相比。 1.2单纯二次开发 单纯二次开发指完全借助于地理信息系统工具 收稿日期:2007-12-18 作者简介:杨宏鹏(1982-),男,东北林业大学信息与计算机工程学院硕士研究生,主要研究方向为人工智能与智能控制。 ) 65 )

ArcGIS二次开发

第一章z开发基础 1.1组件对象模型 在明确讨论COM之前,有必要先一般性地思考一下软件组件使用的广泛性。在软件组件背后有许多的驱使因素,但最基本的就是软件开发是个昂贵和耗时的风险行为。 在理想的世界里,假如曾经写了一段代码,然后通过不同的开发工具一次一次的反复使用它,这种情况是可能的,即便是在最初的开发者不能预见的环境下也能使用。理想情况下,对最初开发者生成的函数功能的改变能在不需要目前用户改变和重编译他们的代码情况下实现。 早期重用代码块的尝试就是创建类库的进展,这些类库通常用C++开发。早期的尝试有很多的限制,较为明显的是:共享系统组件的困难(共享二进制C++组件是非常困难的——大部分的尝试是共享源代码);不重新编译就很难保存和更新C++组件的问题;缺乏好的建模语言和工具以及属性接口和定制工具。 为了解决这样那样的一些问题,许多软件工程师开始采用基于组件的方法进行系统开发。一个软件组件就是一个可重用代码的二进制单元。 已经出现了几个不同但相互重叠的开发和共享组件标准。微软的COM已成为建立交互式桌面应用程序事实上的标准。在互联网上,JavaBean是可行的技术。对象管理组(OMG)制定了粗粒度层次上适用于应用程序互操作的公用对象请求代理架构(CORBA)。

为了理解COM(以及所有基于COM的技术),认识到其不是一种面向对象语言而是一个协议或标准是非常重要的。COM不仅仅是一种技术,还是软件开发的一种方法论。COM定义了一种连接软件组件或模型的协议。通过使用这种协议,可以建立能在分布式系统中动态交互的可重用软件组件。 COM还定义了一种称作基于接口的编程模式。对象封装了能体现定义良好的接口后每个实例化对象特征的操作方法和数据。这增强了系统开发的结构化和安全性,因为一个对象的客户并不知道某个特定方法如何实现的任何细节。COM不规定应如何构建一个应用程序。语言、结构和实现细节都由使用COM的应用程序开发人员决定。 COM的确规定了一个对象模型和使COM对象能与其他COM对象交互的编程需求。这些对象可以位于单个过程中,在不同的过程中,或者甚至在远程机器上。它们可以用其他语言编写,也可以用完全不同的方式开发。这就是COM被认为是二进制规范或标准的原因—它是一个在程序被编译为二进制机器代码后才应用的标准。 COM允许对象在二进制水平上重用,意味着第三方开发者即使从最底层扩展系统也不需要访问这些对象的源代码、头文件或对象库。 组件、对象、客户和服务器 不同的文件中组件(components)、对象(objects)、客户(clients)和服务器(servers)表示不同的意思(各种文件用这些术语指代相同的事物,使得术语使用更加混乱)。因此,定义这本书所要使用的术语是非常有必要的。

ArcGIS主要功能简介

ArcGIS 主要功能简介 通过在课堂上以及在课外的研究课题中对GIS的学习探究和应用,我对GIS 的主体功能有了较为明晰的认识,我认为ArcGIS的主要功能包括以下几个方面: 一、信息的输入和转换 信息的输入和转换是将从外部各种渠道收集所得的原始数据输入到 GIS系统内部并转换为系统便于处理的内部格式的过程。 1、信息的输入包括对空间数据和属性数据这两类数据的输入,其中输入点、线、面这类带有空间位置和几何特性的要素为空间数据输入,而文字、表格和其他非几何数据的输入为属性数据输入。 2、信息的转换包括将我们常用的其他软件文件转换到GIS中,通过多个软件之间的联动获取比单纯用GIS输入来得更丰富的外界信息,例如将DWG格式文件转换输入到GIS中;除此之外还有通过ArcToolbox这一强大的工具集进行的GIS内部的矢量数据和栅格数据之间的转换。 二、数据的编辑 数据的编辑是对已有的数据进行修改更新以及建立它们之间的联系的过程。 主要包括拓扑关系的建立、数据的投影变换、扭曲拉伸、裁剪、拼接和提取、以及坐标校正等。其中我们可以借助拓扑关系来编辑要素和检验数据质量。 三、数据的储存与管理 GIS的这项功能提供空间与属性数据的储存和灵活调用的能力。如今随着数据容量和复杂度不断增大、对数据储存速度的要求越来越高,GIS的储存功能也在不断发展,于是出现了网络GIS数据储存、基于微电子机械系统的储存器等新功能、新产品。 四、数据的查询 数据的查询包括两个方面功能:通过空间位置查属性和通过属性查空间位置,即“某个特定位置有什么”和“某个特定要素在哪里”。 五、数据的分析 空间数据的分析是GIS的核心功能,它能够通过对基础数据的分析并叠加其

相关文档
相关文档 最新文档