Arcobjects for java:Arcgis二次开发入门,开发一个基本地图组件

article/2025/10/15 15:15:08

一、目的

因学习需要,使用Java进行Arcgis二次开发。当前对arcgis进行二次开发使用的语言基本是C#,使用Java对Arcgis进行二次开发的很少。于是使用java在idea上进行Arcgis二次开发,给入门的同学做参考,我自己也处于入门阶段,有错漏的地方也请大佬赐教。

二、准备

1.idea2017.3.7
2.jdk1.8.0_131_32
3.Arcobjects10.2的jar包
4.Arcobjects java api文档
5.官方示例代码
说明:开发所使用的jdk必须为32位的,Arcobjects的jar包,.Arcobjects java api文档和官方示例代码均在安装Arcgis for Desktop和Arcobjects Sdk for Java后可以找得到,具体可见
链接: https://blog.csdn.net/qq_43792037/article/details/123568082.

三、操作

3.1 创建一个普通的Java项目

3.2 添加依赖

将Arcobjects.jar添加到项目依赖中
在这里插入图片描述

3.3 新建一个GIS应用程序类

3.3.1 创建一个类AppView

public class AppView extends JFrame {JPanel mainPanel = null;// 主面板JPanel rightPanel = null;// 右侧面板MapBean mapBean = null;// 地图组件ToolbarBean toolbarBean = null;// 工具栏IToolbarPalette toolbarPalette = null;// 右键工具菜单TOCBean tocBean = null;// 图层public AppView() throws Exception {// 界面名字setTitle("arcObjects二次开发");// 创建界面buildFrame();// 设置大小setSize(900,600);// 初始化toolbarinitToolBar();// 设置关闭界面即停止程序setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置界面可被看见setVisible(true);}
}

3.3.2 添加initToolBar方法,初始化工具栏

    private void initToolBar() {try {tocBean.setBuddyControl(mapBean);toolbarBean.setBuddyControl(mapBean);// 设置图层可以移动tocBean.setEnableLayerDragDrop(true);// 对toolbarPalette菜单添加按钮toolbarPalette = new ToolbarPalette();toolbarPalette.addItem(new ControlsSelectTool(), 0, -1);// 选择toolbarPalette.addItem(new ControlsNewCircleTool(), 0, -1);// 画⚪toolbarPalette.addItem(new ControlsNewCurveTool(), 0, -1);// 曲线toolbarPalette.addItem(new ControlsNewEllipseTool(), 0, -1);// 椭圆toolbarPalette.addItem(new ControlsNewLineTool(), 0, -1);// 线toolbarPalette.addItem(new ControlsNewPolygonTool(), 0, -1);// 多边形toolbarPalette.addItem(new ControlsNewRectangleTool(), 0, -1);// 矩形toolbarPalette.addItem(new ControlsNewFreeHandTool(), 0, -1);// 任意线toolbarPalette.addItem(new ControlsEditingEditTool(), 0, -1);// 编辑// 按钮,0,-1,是否开始分组,组间间隔,是否在按钮旁边显示文字toolbarBean.addItem(new ControlsOpenDocCommand(),0,-1,true,0,esriCommandStyles.esriCommandStyleIconOnly);// 添加打开文件按钮toolbarBean.addItem(new ControlsMapZoomInTool(),0,-1,true,0,esriCommandStyles.esriCommandStyleIconOnly);// 放大toolbarBean.addItem(new ControlsMapZoomOutTool(),0,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);// 缩小toolbarBean.addItem(new ControlsMapFullExtentCommand(),0,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);// 全图toolbarBean.addItem(new ControlsMapPanTool(),0,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);// 拖拽toolbarBean.addItem(new ControlsSelectFeaturesTool(), 0, -1, true, 0, esriCommandStyles.esriCommandStyleIconOnly);// 选择toolbarBean.addItem(new ControlsClearSelectionCommand(), 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);// 清除选择toolbarBean.addItem(toolbarPalette,0,-1,true,0,1);// 设置toolbar的按钮可移动
//            toolbarBean.setCustomize(true);} catch (IOException e) {e.printStackTrace();}}

3.3.3 添加buildFrame方法,初始化窗体

    public void buildFrame() throws Exception {// 初始化操作EngineInitializer.initializeVisualBeans();UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());initializeArcGISLicenses();tocBean = new TOCBean();// 对右侧面板添加元素rightPanel = new JPanel();mapBean = new MapBean();rightPanel.setLayout(new BorderLayout());rightPanel.add(mapBean, BorderLayout.CENTER);// 对主面板添加元素mainPanel = new JPanel();mainPanel.setLayout(new BorderLayout());mainPanel.add(tocBean, BorderLayout.WEST);mainPanel.add(rightPanel,BorderLayout.CENTER);toolbarBean = new ToolbarBean();toolbarBean.setSize(650,50);mainPanel.add(toolbarBean,BorderLayout.NORTH);mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));getContentPane().add(mainPanel, BorderLayout.CENTER);}

3.3.3 添加initializeArcGISLicenses方法,初始化licenses

没有初始化licenses,GIS项目无法运行,这是官方代码,抄就完事了。

    public static void initializeArcGISLicenses() {try {AoInitialize ao = new AoInitialize();if (ao.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine)== esriLicenseStatus.esriLicenseAvailable)ao.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);else if (ao.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeBasic)== esriLicenseStatus.esriLicenseAvailable)ao.initialize(esriLicenseProductCode.esriLicenseProductCodeBasic);else if (ao.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeStandard)== esriLicenseStatus.esriLicenseAvailable)ao.initialize(esriLicenseProductCode.esriLicenseProductCodeStandard);else if (ao.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeAdvanced)== esriLicenseStatus.esriLicenseAvailable)ao.initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);} catch (Exception e) {e.printStackTrace();}}

3.3.4 添加main方法

public static void main(String[] args) throws Exception {AppView view = new AppView();
}

四、结果

大功告成
在这里插入图片描述
完整代码可下载: https://download.csdn.net/download/qq_43792037/84999256.


http://chatgpt.dhexx.cn/article/8mG3rVZC.shtml

相关文章

ArcGIS二次开发基础教程(00):基础界面设计

ArcGIS二次开发基础教程(00) : 基础界面设计 (开发环境:VS2010ArcEngine10.2C# ;鉴于学习ArcGIS二次开发的同学都有一定的WinForm开发和ArcGIS软件使用基础,故此教程不再对一些基础内容作详细阐述) 首先新建一个Windows窗体应用程…

【ArcGIS二次开发】TOCControl右键菜单功能实现

1、添加现有项 ①右击解决方案中的项目,添加TOCControlContextMenu中的LayerSelectable、LayerVisibility、RemoveLayer、ZoomToLayer ②点击菜单栏中的项目,添加引用ESRI.ArcGIS.ADF.Local ③修改RemoveLayer中的命名空间为项目名称EngineMapTest&#…

arcgis python实例_arcgis二次开发_arcgis二次开发python_arcgis二次开发实例

[1.rar] - QQ连连看的源码.单消秒杀挂机等功能喜欢的朋友请拿去研究 [qqCHAR.rar] - qq 验证码识别程序 可以叫准确的识别出qq登陆前的验证码 [1.rar] - 本书以Visualc作为开发语言,结合大量实例,详细介绍了利用Arcobjects组件进行GIS二次开发的方法和…

【ArcGIS二次开发】Engine界面搭建

1、新建窗体项目Windows Appplication(Engine) 2、添加menuStrip、statusStrip和ToolbarControl控件,并设置相应的Dock属性为Top和Right 3、用SplitContainer控件把显示区域分成三部分,并设置splitContatiner1的Orientation属性为Horizontal 4、添加TabC…

ArcGIS二次开发基础教程(02):地图导航和鹰眼

ArcGIS二次开发基础教程(02):地图导航和鹰眼 地图导航(主要是调用命令和工具) 地图的放缩和漫游 if(axMapControl1.CurrentTool null) {ICommand icc;//地图放大ITool tool new ControlsMapZoomInToolClass();//地图缩小//ITool tool n…

arcgis java 二次开发_arcgis二次开发_cad二次开发_java arcgis二次开发

属性查询是GIS应用不可缺少的重要功能,尤其是在各种业务系统中,根据用户输入相应的查询条件,从属性要素中快速定位到用户感兴趣的要素,为业务应用提供了便利。本文就来聊一聊QGis二次开发中如何实现属性查询功能。 其实这个功能我…

AE+ArcGIS二次开发课程设计(基于C#)

AEArcGIS二次开发课程设计(基于C#) 1.工作内容2.程序功能介绍3.功能模块介绍3.1 实现【创建TIN】说明3.1.1 功能说明3.1.2 代码实现(包含了所有主要的代码,库引用自行导入) 3.2 实现【TIN坡度坡向分析】说明3.2.1 功能…

ArcGIS二次开发前言

ArcGIS二次开发前言 前言环境常见bug解决方案 前言 自毕业成为GIS开发工程师已有一年多的时间,时间很短,短到不过人一生中工作时限的3.75%,时间很长,长到收藏夹已经从零攒到了一千四百多条记录,OneNote上也记录了几十…

ArcGIS Engine二次开发

目录 1 前言 2 准备工作 2.1 License的加入 2.2 ToolStrip控件 2.3 MenuStrip控件 2.4 帮助文档的查看 3 数据加载 3.1 矢量数据的加载 3.2 栅格数据的加载 4 地图浏览功能 1 前言 这是一份关于ArcGIS Engine二次开发的一份报告总结,在这份报告中包含了简单的…

ArcGIS二次开发知识点总结

空间分析定义:空间分析是指分析具有空间坐标或相对位置的数据和过程的理论和方法,是对地理空间现象的定量研究,其目的在于提取并传输空间数据中隐含的空间信息。 叠置分析定义:是指将同一坐标系统下不同信息表达的两组或多组专题…

【ArcGIS Pro二次开发】(31):ArcGIS Pro中的多线程

ArcGIS Pro与旧的ArcGIS桌面应用程序的显著不同之处在于,它采用多线程架构,可以有效的发挥多核CPU的优势。这使得二次开发工具的性能变得更好,但也对开发工作带来了更多的难点和挑战。 一、多线程需要注意的问题 一般情况下,为了…

GIS二次开发:实验一 ArcGIS Engine 开发初步

实验一 ArcGIS Engine 开发初步 一、实验目的 掌握ArcGIS Engine的安装;熟悉ArcGIS Engine中几个常用的控件;搭建第一个简单的ArcGIS Engine 程序;通过ICommand接口添加地图浏览工具。 二、实验仪器与设备 计算机、visual studio 软件、A…

Arcgis二次开发软件安装(Arcgis10.2、VS2012、AE10.2)

目录 一、序言 二、Arcgis10.2安装 (一)安装ArcGIS License Manager 1.1 ArcGIS License Manager安装 1.2 ArcGIS License Manager配置 (二)安装ArcGIS Desktop 1.1ArcGIS Desktop安装 1.2.ArcGIS文件替换 1.3中文显示与…

StackPanel 实现从上往下+从右往左 排列+RenderTransform特效实例分析

StackPanel:将子元素排列到可沿水平或垂直放置的行。 参考资料: 1. StackPanel类 2. Silverlight学习笔记(九)——RenderTransform特效【五种基本变换】及【矩阵变换MatrixTransform】 3. MatrixTransform矩阵变换 stack表明StackPane…

控件篇 - 子控件在StackPanel里的居中问题

如下面代码&#xff1a; <StackPanel Width"200" Height"80" Background"Tomato"><TextBlock HorizontalAlignment"Center" VerticalAlignment"Center" Text"ABCD"/></StackPanel> 原意是想通…

Docker Stack

大规模场景下的多服务部署和管理是一件很难的事情。Docker Stack 为解决该问题而生&#xff0c;Docker Stack 通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理&#xff0c;这些功能都封装在一个完美的声明式模型当中。 Stack 能够在单个声明文…

StackPanel布局

StackPanel可以把内部元素在纵向或横向上紧凑排列&#xff0c;形成栈式布局。 示例代码&#xff1a; <Grid><GroupBox Header"请选择没有错别字的成语" BorderBrush"Black" Margin"5"><StackPanel Margin"5" Heig…

2.12 Stack

2.12 Stack Stack也是List接口的实现类之一&#xff0c;和Vector一样&#xff0c;因为性能原因&#xff0c;更主要在开发过程中很少用到栈这种数据结构&#xff0c;不过栈在计算机底层是一种非常重要的数据结构&#xff0c;下边将探讨下Java中Stack。 2.12.1 Stack的继承关系 …

wpf之StackPanel布局

注意两个参数&#xff1a; Orientation &#xff1a;控制排列是水平方向&#xff0c;还是垂直方向&#xff08;Horizontal 水平方向 Vertical垂直方向&#xff09; FlowDirection&#xff1a;控制控件排序是从右往左还是从左往右&#xff0c;写两个简单的demo如下&#xff…

四、StackPanel控件

StackPanel可以把内部控件在纵向或横向上紧凑排列、形成栈式布局&#xff0c;当上层控件不被删除时&#xff0c;剩余的控件会前移&#xff0c;填充空白 特点&#xff1a; 同类控件紧凑排列移除其中…