初学ArcEngine开发,看到这么多的类和接口有点让人望而生畏,不好好整理思路容易让人发晕,其实熟悉了ARCGIS各组件的功能,了解了各种操作的设计思路,拿着各种文档顺藤摸瓜,还是可以迅速进入开发角色的。整个SDK结构组成的分析留到后面,我们先学习一个最小的开发示例,例子来源于ArcEngine开发文档(HelloCentroid)。

例子的功能:

返回某shapefile文件第一个feature质心的坐标。

引用的包:

importcom.esri.ARCGIS.datasourcesfile.ShapefileWorkspaceFactory;

importcom.esri.ARCGIS.geodatabase.*;

importcom.esri.ARCGIS.geometry.*;

importcom.esri.ARCGIS.system.*;

每个包的具体用途与功能先不管,以后的学习中会慢慢涉及到并加以分析。

从文件路径中捕获shapefile特征类:

privateFeatureClass getShapefileFeatureClass(String path, String name)throwsIOException{

  FeatureClass featureClass=null;

try{

    ShapefileWorkspaceFactory shapefileWorkspaceFactory=newShapefileWorkspaceFactory();

    Workspace workspace=(Workspace) shapefileWorkspaceFactory.openFromFile(path,0);

    featureClass=newFeatureClass(workspace.openFeatureClass(name));

  }

catch(IOException ex){

    System.out.println("Could not open shapefile:"+name);

throwex;

  }returnfeatureClass;

}

调用ShapefileWorkspaceFactory工厂类的对象的方法openFromFile,将指定的路径列为工作空间,然后打开工作空间中指定名称的特征类,参数传入FeatureClass的构造方法中,返回FeatureClass对象。

ShapefileWorkspaceFactory工厂类除了可以返回指定的工作空间外,还可以创建、移动、复制工作空间,以及得到工作空间相关的基本信息。

在com.esri.arcgis.geodatabase包中可以找到Workspace类,它的方法有许多,涉及和工作空间相关的许多功能,例如连接到工作空间的数据库名称、用户名称,开始/停止编辑工作空间,创建和删除注记类、特征类、特征数据集、关联类,判断工作空间中某种操作能否执行,工作空间的基本信息,判断对象是否注册为版本等等。代码中所用到的openFeatureClass用于打开已存在的特征类并返回为IFeatureClass。

FeatureClass类的构造方法接收workspace.openFeatureClass返回的参数,将对象的引用赋给featureClass对象并返回。

这个方法的核心应该关注Workspace类,它把握着Geodatabase数据的整体框架与功能导向,FeatureClass是Workspace组成部分,包含了FeatureClass特定的功能与方法。

得到特征类的质心位置:

privatevoidprintFirstFeatureCentroid(FeatureClass featureClass)throwsIOException{

////Get the first feature in the feature class.

//

IFeature feature=featureClass.getFeature(0);

////Get the shape of the feature, and if the shape is a polygon or ring,

//get its centroid by casting it to the interface common to both of them (IArea),

//which interface defines the getCentroid method.

//

IGeometry shape=feature.getShape();

if(!(shapeinstanceofPolygon||shapeinstanceofRing)){

    System.out.println("Feature's shape is neither a polygon nor a ring.  No centroid available.");

return;

  }  IArea area=(IArea) shape;

  IPoint centroid=area.getCentroid();

  System.out.println("Centroid:"+centroid.getX()+","+centroid.getY());

}

featureClass对象的getFeature(0)方法得到特征类中第一个feature,通过判断确定该feature为区或环,将该feature所对应的shape uppercast为IArea类型,由getCentroid方法得到area对象的质心点,getX()和getY()输出该点的坐标。IGeometry、IArea、IPoint都是com.esri.arcgis.geometry包中的接口,指定了不同的几何类型。由printFirstFeatureCentroid方法,我们可以扩展学习com.esri.arcgis.geometry包中典型接口的使用,例如示例中用到的接口,其包含的方法都很简单。

main方法:

publicstaticvoidmain(String[] args){

if(args.length!=2){

    System.out.println("Usage: HelloCentroid shapefilePath shapefileName");

    System.exit(1);

  }  System.out.println("Hello, Centroid!");

  AoInitialize aoInitializer=null;

try{

    EngineInitializer.initializeEngine();

    aoInitializer=newAoInitialize();

    aoInitializer.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);

    HelloCentroid thisApp=newHelloCentroid();

////Get the feature class for the path and name specified,

//and get its first feature's centroid.

//

FeatureClass featureClass=thisApp.getShapefileFeatureClass(args[0], args[1]);

if(featureClass!=null){

        thisApp.printFirstFeatureCentroid(featureClass);

      }  }

catch(IOException ex){

    ex.printStackTrace();

    System.out.println("App failed.");

  }

finally{

try{

      aoInitializer.shutdown();

    }

catch(IOException ex){

      ex.printStackTrace();

    }  }}

从前面的四行代码可以看出,java解释器运行该类文件编译后的字节码需要两个参数,一个是featureclass所在的路径,一个是该路径下featureclass名称。需要注意的是这三行代码:

EngineInitializer.initializeEngine();

aoInitializer=newAoInitialize();

aoInitializer.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);

com.esri.arcgis.system.EngineInitializer.initializeEngine(),在原始AO组件和Java Class之间建立联系,如果要使用ArcGIS Visual JavaBeans进行图形操作,则应使用initializeVisualBeans静态方法进行初始化。aoInitializer对象决定不同的授权和扩展,ESRI License Product codes参考下列表:

Eclipse运行测试,需要在"运行"中输入两个"自变量"作为参数,采用ArcGIS自带的数据,分别为

"ArcGISHome\ArcTutor\Getting_Started\project\City_share\land"、"parcel_1"

测试的结果,控制台输出为:

Hello, Centroid!

Centroid: 479049.62060511723, 3771922.345004217

这个例子描述了一个最简单AE开发的整个过程,从初始化、授权,到Workspace类、FeatureClass类方法,到com.esri.arcgis.geometry包中典型接口的使用,最后得到我们需要的结果,过程清晰明了,初学者可以通过这个例子顺藤摸瓜,敲开AE开发的大门,说的有点玄乎:)

arcobjects java开发_ArcGIS Engine SDK for Java 最小示例学习相关推荐

  1. 重庆找Java开发工作_重庆【Java开发程序员】

    重庆[Java开发程序员],提倡一切为了学员就业的办学思想,教学过程中坚持以练习企业项目为主,让学员真正能学到技术,毕业就能适应工作岗位. 重庆[Java开发程序员], Java 编程开发.而且很多软 ...

  2. java 开发人员工具_每个Java开发人员都应该知道的10个基本工具

    java 开发人员工具 大家好,我们已经到了2019年的第二个月,我相信你们所有人都已经制定了关于2019年学习以及如何实现这些目标的目标. 我一直在撰写一系列文章,为您提供一些知识,使您可以学习和改 ...

  3. java 操作vss,java开发常用工具总结,java开发常用工具

    java开发常用工具总结,java开发常用工具 1.editplus editplus 是我使用最频繁的工具,不管是java程序还是其他的语言的程序,本人都使用它,方便好用,速度快.如果配置好的话,可 ...

  4. 哈尔滨java开发工资_给哈尔滨Java开发初学者的几个学习建议

    对于初学者应该如何学习Java开发技术,纵观中国目前整体行业来说,互联网IT行业成为了拔尖的行业,IT互联网程序开发成了靠自己能力可以多挣一点钱,所以各个行业都在转行,其实互联网不存在饱和,只不过大多 ...

  5. Java开发工具IntelliJ IDEA创建Andriod项目示例说明

    IntelliJ IDEA社区版作为一个轻量级的Java开发IDE,是一个开箱即用的Android开发工具. 注意:在本次的教程中我们将以Android平台2.2为例进行IntelliJ IDEA的使 ...

  6. Java开发四年的程序员想再学习一门语言,该选着C还是Python呢?

    首先,对于已经从事Java开发工作四年的同学来说,如果想再开一门编程语言,应该结合自己的发展规划来选择C或者是Python,如果未来想进入大数据.人工智能领域发展,选择Python会更方便一些,而且P ...

  7. java开发面试复试_面试java开发,面试官会问哪些问题?

    作为一个当初从学校刚毕业找工作而被面试饱经摧残的小白,到现在的java开发从业人员,中间不可谓之不艰辛,当初的屡屡碰壁,工作受挫,一直到现在我仍然认为那是我人生中不可或缺的一段经历. 关于面试的艰辛这 ...

  8. 同为Java开发:有了这些Java项目经历,面大厂稳了!

    真不愧是宇宙厂,动辄 1 万人的招聘需求中我们看的出来,字节跳动正在疯狂布局各大业务板块. 字节跳动·研发岗位招聘 从招聘官网来看,字节跳动在招的 10000+ 人中,后端岗高达 1182 个,招聘数 ...

  9. sublime text java 开发_Sublime Text 3搭建Java开发环境

    作者:chszs,转载需注明. 作者博客主页:http://blog.csdn.net/chszs Sublime Text 2是我非常喜欢的文本编辑器,它美观漂亮.轻量级.本文讲述怎样在Sublim ...

  10. 适用于Java开发人员的Elasticsearch:Java的Elasticsearch

    本文是我们学院课程的一部分,该课程的标题为Java开发人员的Elasticsearch教程 . 在本课程中,我们提供了一系列教程,以便您可以开发自己的基于Elasticsearch的应用程序. 我们涵 ...

最新文章

  1. mysql 关键字 status_Mysql show status命令详解
  2. 【linux】Linux查看服务器登陆用户信息命令(w、last、who)详解
  3. yii2: 点击编辑后,左侧的连接(a.navtab)失效,变成在新窗口打开
  4. Android笔记 一Android基础知识 摘自第一行代码Android
  5. renameTo()方法的用法
  6. VS code报错:Launch options string provided by the project system id invalid.
  7. [Tailwind] Control What Variations are Generated for Each Utility Class Module in Tailwind
  8. 行如风 Angular初识
  9. Matlab归一化方法
  10. 各种JS模板引擎对比数据(高性能JavaScript模板引擎)
  11. 2021最新城市人才引进计划!硕博满满的福利!
  12. 当生命科学遇上AI,会产生怎样1+1>2的效果?
  13. 剑指Java面试:面试官能问到的问题,都被我收集在这份PDF文档里
  14. Emacs 安装与使用
  15. 如何选择DNS服务器及未响应的解决办法
  16. 移动安全规范 — 2 -蓝牙安全规范
  17. ESXi最新补丁升级步骤
  18. java实现用户权限模块两种方法
  19. 小程序开发大概需要多久时间
  20. 互联网摸鱼日报(2023-03-08)

热门文章

  1. 计蒜客 25985.Goldbach-米勒拉宾素数判定(大素数) (2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 B)...
  2. 一、struts入门
  3. 【新版】Android技术博客精华汇总
  4. POJ 3597 Polygon Division (DP)
  5. jquery 调用ajax返回json
  6. 我们是这样写升级日志的,处处可以体现人文情怀
  7. 贡献一个新浪的幻灯片(javascript)
  8. vue程序中组件间的传值方式
  9. 用于物联网数据收集和传输的边缘网络密钥
  10. MacFree ePlicy Orchestrator