`
flyingis
  • 浏览: 296892 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AE92 SDK for Java 最小示例学习

阅读更多
    作者:Flyingis

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

    例子的功能:

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

    引用的包:

import com.esri.arcgis.datasourcesfile.ShapefileWorkspaceFactory;
import com.esri.arcgis.geodatabase.*;
import com.esri.arcgis.geometry.*;
import com.esri.arcgis.system.*;

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

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

private FeatureClass getShapefileFeatureClass(String path, String name) throws IOException {
  FeatureClass featureClass 
= null;
  
try {
    ShapefileWorkspaceFactory shapefileWorkspaceFactory 
= new ShapefileWorkspaceFactory();
    Workspace workspace 
= (Workspace) shapefileWorkspaceFactory.openFromFile(path, 0);
    featureClass 
= new FeatureClass(workspace.openFeatureClass(name));
  }

  
catch (IOException ex) {
    System.out.println(
"Could not open shapefile: " + name);
    
throw ex;
  }

  
return featureClass;
}

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

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

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

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

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

    得到特征类的质心位置:

private void printFirstFeatureCentroid(FeatureClass featureClass) throws IOException {
  
//
  
// 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 (!(shape instanceof Polygon || shape instanceof Ring)) {
    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方法:

public static void main(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 
= new AoInitialize();
    aoInitializer.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
    HelloCentroid thisApp 
= new HelloCentroid();
    
//
    
// 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 
= new AoInitialize();
aoInitializer.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);

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

ESRI-License-Product-codes.gif

    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开发的大门,说的有点玄乎:)

分享到:
评论
2 楼 chxkyy 2009-06-11  
跑getShapefileFeatureClass方法
1 楼 chxkyy 2009-06-11  
我在本地跑这个代码怎么报这个错:
java.lang.UnsatisfiedLinkError: no ntvauth in java.library.path

相关推荐

    JAVA编写的AE二次开发程序

    【JAVA编写的AE二次开发程序】是一个基于Java编程语言对ArcGIS Desktop(AE)10.4进行扩展和定制的应用示例。ArcGIS是由Esri公司开发的一款强大的地理信息系统(GIS),而AE是其桌面版组件,用于地理数据的查看、...

    adobe-sdk.zip

    After Effects SDK 提供了丰富的文档、示例代码、库文件以及头文件,帮助开发者理解和操作 AE 的内部工作原理。它包括以下几个关键组成部分: 1. **API 文档**:这是开发者开始编程的第一步,提供了关于可用接口和...

    MapXtreme for Java 例子集合

    通过这些例子,开发者可以深入理解MapXtreme for Java的工作原理,学习如何利用其丰富的API和功能来构建复杂而高效的地图应用。每个示例都会提供详细的代码和解释,帮助开发者快速上手并解决实际问题。对于想要在...

    AE for Linux 配置

    AE for Linux 配置是指 ArcGIS Engine for Linux 环境配置的过程,该过程主要包括两个部分:安装 Java SDK 和安装 Engine Runtime。 第一部分:安装 Java SDK 安装 Java SDK 是配置 ArcGIS Engine for Linux 环境...

    jpct-ae jar包和文档、示例

    标题"jpct-ae jar包和文档、示例"指出这是一个关于jpct-ae的资源集合,其中包括了jar包本身,相关的文档以及示例代码。这表明用户可以从中学习如何使用jpct-ae库进行3D图形编程。 描述中的"希望对有这方面学习兴趣...

    ArcEngine for java开发demo源码(个人开发)

    在这个名为“ArcEngine for java开发demo源码(个人开发)”的项目中,作者分享了使用Eclipse开发环境编写的AE(ArcEngine)DEMO,旨在为初学者和有经验的开发者提供一个学习和参考的实例。 1. **ArcEngine基础** ...

    自己编写matlab深度学习包以及AE示例代码

    在本项目中,你将学习如何使用MATLAB从零开始构建一个深度学习包,并通过一个具体的自动编码器(AE)示例来应用这个自定义框架。MATLAB是一种强大的编程环境,特别适合数值计算和科学计算,它也提供了丰富的工具箱...

    OPC UA SDK 1.00

    2. 熟悉API:学习和理解SDK提供的接口,了解如何创建OPC UA会话、订阅、节点管理等。 3. 编程实践:使用提供的示例代码作为起点,逐步构建自己的OPC UA应用。 4. 测试和调试:利用SDK的调试工具检查应用程序的运行...

    西门子OPC AE采集源码

    这个客户端代码可能包括了API接口函数、示例程序和必要的配置文件,帮助开发者理解和学习如何实现OPC AE的数据读取和解析。 OPC_AE_STEP7_CODE_v10.zip文件很可能包含了针对西门子Step 7编程环境的特定代码,Step 7...

    ArcObjects SDK(AE)10.1安装时提示需要VS2010错误提示的方法

    ### ArcObjects SDK(AE)10.1安装与VS2010兼容性问题解析 #### 背景介绍 ArcObjects SDK(AE)10.1是Esri公司为开发者提供的一套强大的地理信息系统(GIS)开发工具包,旨在帮助用户通过编程的方式构建高度定制化...

    ae(ArcEngine) java swing开发入门系列 代码

    在"java-ae-demo"这个压缩包中,我们可以期待找到一系列的Java Swing示例代码,这些代码将演示如何初始化ArcEngine,加载地图文档,以及如何使用Swing组件来展示和操作地图。例如,可能会有一个主窗口类,它继承自...

    ArcGIS Engine产品开发中的许可文件初始化

    ArcGIS Engine产品开发中的许可文件初始化是一项技术细节密集的任务,需要对ArcGIS Engine SDK有深刻的理解和熟练的编程技巧。正确实现许可初始化不仅关乎应用的法律合规性,也是保证应用性能和用户体验的关键。因此...

    Java进行AE开发的鹰眼代码

    在Java世界中,AE(Adobe After Effects)的二次开发通常是指使用Java来扩展或控制After Effects的功能。"Java进行AE开发的鹰眼代码"是一个项目,开发者使用Java编写了一个小型工具,该工具被称为"鹰眼",并在...

    jpct-ae.zip_JPCT_jPCT-AE开发文档_jpct-ae

    《深入理解JPCT-AE:基于3D图形的Java库》 JPCT-AE,全称为Java Picture Cube Technology - Advanced Edition,是一款强大的3D图形库,专为Java平台设计。这款开源库允许开发者在Java应用中创建逼真的三维场景,...

    MAX2AE 3.60A(32-64位 for max2009-2012)

    《MAX2AE 3.60A:3D Max与After Effects之间的桥梁》 MAX2AE 3.60A是一款专为3D Max 2009至2012...通过深入学习和熟练掌握MAX2AE,用户可以更好地整合3D Max和After Effects的强大力量,创造出令人惊叹的视觉作品。

    ae二次开发中IDW插值示例代码

    总的来说,"ae二次开发中IDW插值示例代码"是一个关于利用编程技术在After Effects中实现空间数据分析的方法,帮助提升动画的平滑度和连续性。通过对关键帧数据进行反距离加权插值,开发者可以自定义动画的过渡效果,...

    AE渲染示例AE渲染示例AE渲染示例

    "AE渲染示例"的标题暗示我们将探讨AE中的渲染过程,这是将项目从概念转化为实际可见视频的关键步骤。在这个过程中,用户将设置渲染设置,优化性能,并最终导出完成的作品。 描述中的"东方时代份额为人万恶天天软件...

    java 3d 引擎(jpct-ae(android))

    Java 3D引擎JPCT-Android Edition(jpct-ae)是专为在Android平台上构建三维图形应用程序而设计的一款强大的工具。它允许开发者利用Java语言的便利性来创建丰富的、互动的3D体验,无需深入学习复杂的底层图形编程。...

    AE多种功能范例

    通过研究提供的代码和示例,开发者可以了解如何使用C++与AE的SDK进行集成,实现对AE的深度定制,从而更好地满足创作需求。对于那些希望在影视后期、动画制作或视觉效果行业中提升工作效率的人来说,这是一份非常有...

Global site tag (gtag.js) - Google Analytics