日期:2014-05-20  浏览次数:20811 次

我现在做的系统出现了重复i定位的问题,是一个关于arcGIS在java上的应用
这个系统不是我写的,但是现在有我来修改,挺郁闷的,就是arcGIS在java中的应用
问题:当一台客户端的机器在系统的地图上定位了一个设备以后,另外的一台客户端还可以在系统地图上定位同样的设备,就是说现在的数据库分为本地和远程的,当第一台客户端已经定位完成以后,其实远程数据库已经有了这条数据,但是当第二台客户端在地图上定位同样设备的时候他做了一个查询,就是在查询的时候没有查到远程数据库有该条数据,所以导致可以重复的定位同一条数据,
下面我把代码写下来:

public static boolean findFeatureByDeviceID(String deviceType,
String deviceID) {
boolean isExist = true;
try {
SdeConnection.getConnection().getFeatureWorkspace();
IFeatureClass featureClass = SdeConnection.getConnection()
.getFeatureClassByLayerName(deviceType);
QueryFilter queryfilter = new QueryFilter();
queryfilter.setWhereClause("[SHEBEIID]='" + deviceID
+ "' and [SHEBEILX]='" + deviceType + "'");
// int count = featureClass.featureCount(queryfilter);
// if(count == 0)

IFeatureCursor pFeatureCursor = featureClass.search(queryfilter,
false);
// pFeatureCursor = featureClass.search(queryfilter, false);

if (pFeatureCursor.nextFeature() != null) {
// final IFeature feature = pFeatureCursor.nextFeature();
isExist = false;
return isExist;

}

} catch (final AutomationException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
isExist = true;
} catch (final IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
isExist = true;
}
return isExist;


}

还有一个就是在另外的一个类中做的一个判断:

int isExist = SdeFeatureOperation.findFeatureByDeviceID(
CommonVariable.getcommonVariable().getSheBeiLX(),
CommonVariable.getcommonVariable().getSheBeiID());
if (isExist == -2) {
new Thread(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(mapViewerFrame,
"该设备已经被定位过了@@@@@@@@@@,请选择其他设备", "信息提示",
JOptionPane.INFORMATION_MESSAGE);

}
}).start();
return;
}
到现在已经研究了一周了,一直都没有找到解决的办法,就是在上面的查询方法中不知道那步出现了问题,谢谢了~

------解决方案--------------------
给你个建议吧!
1 这个方法
int isExist = SdeFeatureOperation.findFeatureByDeviceID( 

这个是关键,你可以用一个已经存在的设备编号进行测试,具体是那个你自己找,确保这个方法返回已经定位过的返回值


CommonVariable.getcommonVariable().getSheBeiID()
总感觉这个写法乖乖的,会不会有共享问题啊。你把这个ID打印出来看看,是不是和前一个重复检测的ID相同?