【ArcGIS】利用ArcGIS 的Java API实现SDE数据库的直连和服务连接

18 篇文章 0 订阅
4 篇文章 0 订阅

ArcGIS提供的API说明:
这里写图片描述

ArcGIS java API地址

上面可以看出来,ArcGIS提供了两种方式的数据库连接,一种是直连,一种是服务连接。

连接数据库代码:

package test;
import java.net.MalformedURLException;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.esri.sde.sdk.client.SeConnection;
import com.esri.sde.sdk.client.SeException;
import com.esri.sde.sdk.client.SeLayer;
import com.esri.sde.sdk.client.SeQuery;
import com.esri.sde.sdk.client.SeRow;
import com.esri.sde.sdk.client.SeShape;
import com.esri.sde.sdk.client.SeSqlConstruct;
import com.esri.sde.sdk.geom.Point;
import db.DBConnectionCreater;
import net.sf.json.JSONArray;
import util.PropertiesUtil;
import entity.TaxiInfoBean;
public class sdetest {

     public JSONArray getLocation(){
           String server=PropertiesUtil.getProperties("Database", "SDEserver");
           String instance=PropertiesUtil.getProperties("Database", "SDEinstance");
           String database=PropertiesUtil.getProperties("Database", "SDEdatabase");
           String user=PropertiesUtil.getProperties("Database", "SDEuser");
           String password=PropertiesUtil.getProperties("Database", "SDEpassword");
           SeConnection seconn=null;
           SeQuery query=null;
           SeRow row=null;
           try {
                seconn=new SeConnection(server,instance,database,user,password);//第一步,连接数据库
                SeLayer layerzrq = new SeLayer(seconn, "ZDDX_TAXI", "SHAPE");
                String layernamezrq = layerzrq.getName();
                SeSqlConstruct sqlConstruct = new SeSqlConstruct(layernamezrq);//第二步,生成sql
                sqlConstruct.setWhere("class=5 or class=7");//第三步,设置条件
                String[] cols = new String[2];
                cols[0] = new String("NAME");
//            cols[1] = layerzrq.getSpatialColumn();
                cols[1] = new String("SHAPE");
                query = new SeQuery(seconn,cols,sqlConstruct);//第四步,查询

                query.prepareQuery();
                query.execute();
                row = query.fetch();//第五步,取值
                SeShape shape=null;
                double x,y;
                while (row!=null) {
//                   shape = row.getShape(1).
//                   double x = row.getShape(1).asPoint().generateLabelPoint().getX();//取点坐标
//                   double y = row.getShape(1).asPoint().generateLabelPoint().getY();
                     double[][][] coor = row.getShape(1).getAllCoords();//对于任意形状(点,线,面)三种数据,取坐标
                     x = coor[0][0][0];
                     x = coor[0][0][1];
                     String name = row.getString(0);
                     row = query.fetch();
//                   System.out.println(x+","+y);
                }
           } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
           } finally{
                try {
                     query.close();//关闭查询
                     seconn.close();//关闭连接
                } catch (SeException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                }
           }
           return null;

     }
}

直连和服务连接的区别主要在于instance这个字符串的不同,如果是5151,那么就是服务连接,如果是sde:oracle11g:orcl这样的,就是直连。
可以参考:
ArcGIS Engine 10.1 相关新功能(SDE连接,LAS数据,打包,REST服务访问)

1,服务连接的方式

http://blog.csdn.net/linghe301/article/details/38980431

示例:

其中Database.properties内容是:

SDEserver=192.168.106.109
SDEinstance=5151
SDEdatabase=orcl
SDEuser=sde
SDEpassword=ltskwebgis

2,直连模式

SDEserver=192.168.106.109
SDEinstance=sde:oracle11g:orcl
SDEdatabase=
SDEuser=sde
SDEpassword=ltskwebgis

从ArcGIS Engin 10开始sde开始默认为直连模式,这样连接速度更高效。

直连方式的主要优势:
A.直连方式较服务连接方式卸载了20%-40%的负载;
B.直连方式降低了服务器端内存的需求;
C.直连方式处理速度更快,在客户机上执行处理;
D.不需要安装ArcSDE软件。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值