Java调用arcgis导入shape,java for arcgis 之——将shapefile导入SDE
环境:1.安装arcgis客户端(百度有)
2.在该路径下ArcGIS\Desktop10.2\java\lib 找到arcobject.jar 这是java对arcgis二次开发所需的jar包,添加到工程中(百度有)
3.SDE本人采取的直连oracle的方式,也是查询资料后推荐的方式(需要本地安装oracle客户端,具体见百度)
以上环境准备好直接上代码:
注意:!!!!!
1.这里是很关键的地方,java在使用arcobject.jar时需要在VMOptions中添加一个java命令,目的是告诉jvm去寻找arcgis的dll组件,因为java不能像C#完美调用本地客户端服务
-Djava.library.path="C:\Program Files (x86)\ArcGIS\Desktop10.2\bin" -Dfile.encoding=UTF8
路径写自己的arcgis安装路径。
2.java调用arcgis服务时必须先初始化ArcEngine环境,这会在代码中体现,个人猜测应该是调用组件的引擎
代码:
先讲下代码思路:shapefile-->shapefile的featureClass,SDE-->SDE的featureClass,shpFeatureClass插入到SDEFeatureClass中
初始化ArcEngine:
private staticAoInitialize ao= null;/*** 初始化ArcEngne* java操作arcgis必须先初始化ArcEngne环境 否则报错**/public static voidinitializeArcGISLincenses(){
/*所有AE10的与AE10.1以后版本的对应关系esriLicenseProductCodeArcInfo ==》esriLicenseProductCodeAdvancedesriLicenseProductCodeArcEditor==》esriLicenseProductCodeStandardesriLicenseProductCodeArcView ==》esriLicenseProductCodeBasic*/EngineInitializer.initializeVisualBeans();EngineInitializer.initializeEngine();try{
ao= newAoInitialize();if(ao.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeAdvanced) == esriLicenseStatus.esriLicenseAvailable){
ao.initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);}else{
System.out.print("lincense failed");ao.checkOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);ao.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);ao.initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);ao.initialize(esriLicenseProductCode.esriLicenseProductCodeStandard);ao.checkOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);System.out.println("arcgis>>>...");}
}catch(Exception e){
e.printStackTrace();}
}
连接SDE:
public classConnectSDE {
/*** 连接SDE 返回SDE工作空间*@return*@throwsIOException*/public staticIWorkspace openSDE() throwsIOException{
IPropertySet iPropertySet = newPropertySet();iPropertySet.setProperty("AUTHENTICATION_MODE","DBMS");iPropertySet.setProperty("DB_CLIENT","ORCL");iPropertySet.setProperty("IS_GEODATABSE","true");iPropertySet.setProperty("DB_CONNECTION_PROPERTIES","ORCL");iPropertySet.setProperty("SERVER","192.168.80.35");//1、oracle$后是客户端配置的实例名时 IP(SERVER)可以不设置 随便设置一个IP也可以//2、oracle$后是服务器IP【:端口(如1521)】/服务器实例名 时 IP(SERVER)一定要填且必须对// sde:oracle$orcl(客户端配置的实例名) 或者 sde:oracle$127.0.0.1[:1521]/orcl(默认端口不报错)iPropertySet.setProperty("INSTANCE","sde:oracle:ORCL_192.168.80.35");iPropertySet.setProperty("USER","dsnjgeo");iPropertySet.setProperty("PASSWORD","gtis");//pPropertySet.SetProperty("VERSION", "SDE.DEFAULT");//默认版本可以不设置IWorkspaceFactory workspaceFactory = newSdeWorkspaceFactory();IWorkspace workspace = workspaceFactory.open(iPropertySet,0);if(workspace.exists()){
returnworkspace;}else{
return null;}
}
}
获取shapefile要素集:
/*** 获取shapefile要素集*@parampath //shapefile文件dizhi*@paramname featureClass的名称*@return*@throwsIOException*/private staticFeatureClass getFeatureClass(String path,String name) throwsIOException{
FeatureClass featureClass = null;try{
ShapefileWorkspaceFactory swf = newShapefileWorkspaceFactory();Workspace workspace = newWorkspace(swf.openFromFile(path,0));featureClass = newFeatureClass(workspace.openFeatureClass(name));
}catch(IOException e){
System.out.println("Couldn't access feature class :"+ name + " in "+ path);throwe;}
returnfeatureClass;}
开始导入:
/*** 批量导入*@paramshapePath*@paramfeatureClassName*@paramtargetFeatureName SDE中目标表名称*@throwsIOException*/public static voidshfToSDE(String shapePath,String featureClassName,String targetFeatureName) throwsIOException{
//初始化AE环境initializeArcGISLincenses();//获取shapefile要素集IFeatureClass shpFeature = getFeatureClass(shapePath,featureClassName);//获取SDE工作空间IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)ConnectSDE.openSDE();//指定SDE要素集IFeatureClass sdefeatureClass = featureWorkspace.openFeatureClass(targetFeatureName);//IFeatureCursor接口可用来访问要素类的一系列要素IFeatureCursor featureCursor = shpFeature.search(null,true);//NextFeature方法第一次调用时,实际指向第一条记录,之后每一次调用都是指向下一条记录//获取第一个featureIFeature feature = featureCursor.nextFeature();IFeatureCursor sdeFeatureCursor = sdefeatureClass.IFeatureClass_insert(true);IFeatureBuffer sdeFeatureBuffer = null;while(feature != null){
sdeFeatureBuffer = sdefeatureClass.createFeatureBuffer();IField shpField = null;IFields shpFields = feature.getFields();for(inti=0;i; i++){
shpField = shpFields.getField(i);intindex = sdeFeatureBuffer.getFields().findField(shpField.getName());if(index != -1){
sdeFeatureBuffer.setValue(index,feature.getValue(i));}
}
sdeFeatureCursor.insertFeature(sdeFeatureBuffer);sdeFeatureCursor.flush();feature = featureCursor.nextFeature();}
featureWorkspace = null;}
Java调用arcgis导入shape,java for arcgis 之——将shapefile导入SDE相关推荐
- java调用exe_要精通Java,先研究它的执行原理
对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式. 在本篇文章中,将重点研究java源代码的执行原理,即从程序员编写JAVA源代码,到最终形成产品,在整个过 ...
- java调用wcf_详解JAVA调用WCF服务的示例代码
这一篇将要解决java中调用WCF的问题,使用的依旧是上一篇中托管在IIS中的WCF服务,本来我是打算用axis来写这篇文章的,可就在我开始之前,无意中发现了在java包中自带的wsimport工具 ...
- android java 调用js,Android中Java和JavaScript交互实例
Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本.本文将介绍如何实现Java代码和Javascript代码的相互调用. 如 ...
- java调用exe_Windows系统中Java调用cmd命令及执行exe程序的方法
Java调用cmd命令,并输出显示信息: package com.anxin.cmd.test; import java.io.BufferedReader; import java.io.Input ...
- java调用linux设备,使用Java调用Linux系统命令
有时候,咱们在使用Java作一些操做时,可能性能上并不能达到咱们满意的效果,就拿最近工做中的遇到的一个场景来讲,须要对大量的小文件进行合并成一个大文件.java 最开始的想法是使用Java作文件操做, ...
- Java调用动态库 缺点,Java调用动态库所需要关心的有关问题
Java调用动态库所需要关心的问题 标签: 无标签 利用JNative实现Java调用动态库(转) http://cctv663.blog.163.com/blog/static/1011921220 ...
- java 调用c 的dll,java如何调用C的dll
java怎么调用C的dll 我做了1个java调用c++的dll 想做一个java调用C的dll就不知道怎么做了 在xx.c里 写 JNIEXPORT jint JNICALL Java_testdl ...
- java调用批处理文件_有关java调用批处理文件
1 例子 java调用批处理文件 public classRunJarBat {public static voidrunJarBat() {//调用控制台 Runtime rt =Runtime.g ...
- java调用接口速度慢,Java 调用 webservice 接口,为什么这么慢
Java 调用 webservice 接口,为什么这么慢,有没有好的优化方案,本人目前改成 http 方式发 soap 消息调用,速度依旧很慢,维持在平均 100ms 下不来. 之前用 cxf 的 J ...
最新文章
- windows下安装cygwin及配置
- 上班族漫画(转收藏)
- intellijidea课程 intellijidea神器使用技巧 6-1 Spring的关联
- NETSH WINSOCK RESET这条命令的含义和作用?
- HBase从入门到精通系列:误删数据如何抢救?
- mysql 连接其他数据库_普通用户从其他主机连接MySQL数据库
- 十多年前国内的三大杀毒软件瑞星、江民和金山毒霸的现状如何?
- VMware开启虚拟化实现CentOS创建KVM
- vue init download template_Webpack(四)Vue
- YUV422转RGB并显示于Qlabel
- 室外3D建图定位(0)Loam-3D激光定位算法的一些思考
- 人人网主页登录_“人人”归来!有人想找前女友,有人想删“黑历史”
- 【云原生】—— 学习云计算应用开发你需要掌握的五大技能
- js 数字不足位数补0
- wan端口未连接怎么弄_路由器WAN口未连接解决方法,WAN口未连接怎么办
- 正睿OI DAY12 ks5
- SAP_FI统驭科目
- NLP入门_自然语言处理_AI分支
- 并购Opera,360之蜜糖,猎豹之砒霜
- uni-app 滑到一定位置固定某个元素在顶部 吸顶解决方案 APP端 H5端