📄 addressmatchsample.java
字号:
JTable tableResult;
private Workspace getWorkspace() {
if (workspace == null) {
workspace = new Workspace();
}
return workspace;
}
public void btnOpenMap_actionPerformed(ActionEvent e) {
//设置鼠标状态
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try {
workspace = new Workspace();
//定义中文地址模糊匹配类
addressmatch = new AddressMatch();
//获取AddressMatchSetting并进行相关设置
addressmatchsetting = addressmatch.
getSetting();
//定义中文地址模糊匹配参数类。
addressmatchparameter = new AddressMatchParameter();
addressDictionary = new AddressDictionary();
} catch (IllegalStateException ex) {
JOptionPane.showMessageDialog(this, "非法许可", "",
JOptionPane.ERROR_MESSAGE);
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
return;
}
WorkspaceConnectionInfo workspaceConnectionInfo = new
WorkspaceConnectionInfo();
workspaceConnectionInfo.setType(WorkspaceType.SXW);
workspaceConnectionInfo.setServer(
"..\\..\\..\\SampleData\\world\\world.sxw");
boolean b = workspace.open(workspaceConnectionInfo);
if (!b) {
JOptionPane.showMessageDialog(this, "工作空间打开失败,请确定路径正确");
workspace.dispose();
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
return;
}
DatasetVector datasetVector = (DatasetVector) workspace.getDatasources().
get(0).getDatasets().get("world");
if (datasetVector == null) {
JOptionPane.showMessageDialog(this, "数据源打开失败,请确认是否独占");
workspace.dispose();
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
return;
}
btnAdd.setEnabled(true);
mapControl.getMap().setWorkspace(workspace);
mapControl.getMap().getLayers().add(datasetVector, true);
mapControl.getMap().refresh();
mapControl.setMarginPanEnabled(false);
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
btnOpenMap.setEnabled(false);
}
public void btnClose_actionPerformed(ActionEvent e) {
//注意:关闭窗口时需要先释放mapControl,然后再释放workspace
//当地图控件不为null时,释放地图控件
if (mapControl != null) {
mapControl.dispose();
mapControl = null;
}
//当工作workspace不为null时,释放。
if (workspace != null) {
workspace.dispose();
workspace = null;
}
this.dispose();
System.exit(0);
}
public void btnSelect_actionPerformed(ActionEvent e) {
mapControl.setAction(Action.SELECT2);
}
public void btnPan_actionPerformed(ActionEvent e) {
mapControl.setAction(Action.PAN);
}
public void btnZoomIn_actionPerformed(ActionEvent e) {
mapControl.setAction(Action.ZOOMIN);
}
public void btnZoomOut_actionPerformed(ActionEvent e) {
mapControl.setAction(Action.ZOOMOUT);
}
public void btnFree_actionPerformed(ActionEvent e) {
mapControl.setAction(Action.ZOOMFREE);
}
public void btnViewEntire_actionPerformed(ActionEvent e) {
mapControl.getMap().viewEntire();
mapControl.getMap().refresh();
}
public void btnRefresh_actionPerformed(ActionEvent e) {
mapControl.getMap().refresh();
}
public void this_windowClosing(WindowEvent e) {
//注意:关闭窗口时需要先释放mapControl,然后再释放workspace
//当地图控件不为null时,释放地图控件
if (mapControl != null) {
mapControl.dispose();
mapControl = null;
}
//当工作workspace不为null时,释放。
if (workspace != null) {
workspace.dispose();
workspace = null;
}
}
public void btnAdd_actionPerformed(ActionEvent e) {
//在当前工程下导入词典,如果不存在就创建一个词典
//设置鼠标状态
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
File file = new File("cidian.dct");
if (file.exists()) {
addressDictionary.load("cidian.dct");
} else {
addressDictionary.saveAs("cidian.dct");
addressDictionary.load("cidian.dct");
}
btnAdd.setEnabled(false);
addData();
intiAddressmatchsetting();
btnGO.setEnabled(true);
textSearch.setEnabled(true);
//设置鼠标状态
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
public void intiAddressmatchsetting() {
try {
addressmatchsetting.setDictionaryFile("cidian.dct");
} catch (FileNotFoundException ex) {
return;
}
//设置要检索的数据集和字段
DatasetVector datasetVector = (DatasetVector) workspace.getDatasources().
get(0).getDatasets().get("world");
addressmatchsetting.addSearchData(
datasetVector, "Country");
boolean b = addressmatch.load();
if (!b) {
JOptionPane.showMessageDialog(this, "词典加载失败");
return;
}
}
//判断一个字符串是否含有中文,含有的话返回true
public boolean filtrateChinese(String string) {
for (int i = 0; i < string.length(); i++) {
String str = string.substring(i, i + 1);
if (!(str.getBytes().length == str.length())) {
return true;
}
}
return false;
}
//判断一个字符串全是中文,是的话返回true
public boolean filtrateChineseFull(String string) {
for (int i = 0; i < string.length(); i++) {
String str = string.substring(i, i + 1);
if ((str.getBytes().length == str.length())) {
return false;
}
}
return true;
}
//过滤空格
public String filtrateBlank(String string) {
return (string.replaceAll(" ", ""));
}
public void btnGO_actionPerformed(ActionEvent e) {
String text1 = textSearch.getText().trim();
if (text1.equals("") || text1 == null) {
JOptionPane.showMessageDialog(this, "搜索内容不能为空");
return;
}
String text = filtrateBlank(text1);
if (!filtrateChineseFull(text)) {
JOptionPane.showMessageDialog(this, "输入内容不合法");
return;
}
//设置搜索内容
addressmatchparameter.setSearchAddress(text);
//开始搜索,获取结果
AddressMatchResults addressmatchresults = addressmatch.match(
addressmatchparameter);
if (addressmatchresults.getCount() == 0) {
JOptionPane.showMessageDialog(this, "没有找到可匹配的结果");
return;
}
//处理分析结果,在图中显示
resultanalyst(addressmatchresults,
addressmatchparameter.getSearchDatasets());
}
//分析结果并打印出来,分数是指匹配的程度,100分指完全匹配
public void resultanalyst(AddressMatchResults results,
DatasetVector[] dataset) {
String[] Names = {"数据集", "ID", "查询字段", "分数"};
Object[][] objects = {};
defaultTableMode = new DefaultTableModel(objects, Names);
tableResult.setModel(defaultTableMode);
//使表格不可整列移动
tableResult.getTableHeader().setReorderingAllowed(false);
for (int i = 0; i < tableResult.getColumnCount(); i++) {
tableResult.getColumnModel().getColumn(i).setCellEditor(new
TableColumnEditorLocked());
}
mapControl.getMap().setWorkspace(workspace);
mapControl.getMap().getLayers().clear();
Map map = mapControl.getMap();
//新建一个名字来存数据
String[] datasetname = new String[dataset.length];
for (int j = 0; j < datasetname.length; j++) {
datasetname[j] = dataset[j].getName();
}
if (results != null || results.getCount() != 0) {
System.out.println("查询出的个数为" + results.getCount());
for (int i = 0; i < results.getCount(); i++) {
String dataname = results.get(i).getDataset().getName();
String datasourename = results.get(i).getDataset().
getDatasource().getAlias();
String name = dataname + "@" + datasourename;
if (map.getLayers().contains(name)) {
int id = results.get(i).getID();
map.getLayers().get(name).getSelection().add(id);
String resultAnlyst = "数据集" + dataname + "中:ID" + id +
" 查询字段为:" +
results.get(i).getAddress() +
" 分数为:" +
results.get(i).getScore() + "\n";
Object[] object = new Object[] {dataname, Integer.valueOf(id),
results.get(i).getAddress(),
Double.valueOf(results.get(i).getScore())};
defaultTableMode.addRow(object);
} else {
Layer layer = map.getLayers().add(results.get(i).getDataset(), true);
int count = map.getLayers().getCount();
System.out.println(count);
System.out.println(layer.getName());
DatasetVector resultdata = results.get(i).getDataset();
int id = results.get(i).getID();
layer.getSelection().add(id);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -