1,实现思路:
第一步生成索引,第二步查询索引。查询索引可以同时匹配多个字段,匹配哪些字段在创建索引的时候指定。
2,实现代码:
创建索引:
// 工作空间
Workspace workspace = new Workspace();
// 数据源连接信息类
DatasourceConnectionInfo datasourceConnectionInfo = new
DatasourceConnectionInfo("D:/geo-data/hp.udb", "hp", "");
// 数据源类
Datasource datasource = workspace.getDatasources().open(datasourceConnectionInfo);
if(datasource == null){
System.out.println("打开失败!");
}else {
System.out.println("数据源打开成功!");
}
// 矢量数据集类
DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get(0);
datasetVector.open();
// 中文地址模糊匹配地址索引创建参数设置类。
AddressLoadSetting addressLoadSetting = new AddressLoadSetting();
addressLoadSetting.addDataset(datasetVector);
// 添加需要匹配的字段
addressLoadSetting.addIndexField("name");
addressLoadSetting.addIndexField("street");
addressLoadSetting.addIndexField("address");
// 设置是否为逆向地址匹配创建索引
addressLoadSetting.setLoadPoint(false);
try {
// 设置字典路径(超图自带的字典)
addressLoadSetting.setDictionaryFile("D:/geo-data/addressMatchDictionary.dct");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 索引生成的目录
addressLoadSetting.setLoadDirectory("D:/geo-data/index");
// 新的地址加载和匹配相分离的中文地址模糊匹配地址索引加载类。
AddressLoad addressLoad = new AddressLoad();
addressLoad.setSetting(addressLoadSetting);
addressLoad.load(true);
查询索引,地址匹配:
// 中文地址模糊匹配的参数设置类。
AddressSearchSetting addressSearchSetting = new AddressSearchSetting();
addressSearchSetting.setLocationReturn(true);
addressSearchSetting.setAddressSegmented(false);
addressSearchSetting.setSearchDirectory("D:/geo-data/index");
// 新的地址加载和匹配相分离的中文地址模糊匹配类
AddressSearch addressSearch = new AddressSearch();
addressSearch.setSetting(addressSearchSetting);
int count = addressSearch.match("窗济食品超市");
System.out.println("总共:" + count);
// 中文地址模糊匹配结果集合类
AddressMatchResults addressMatchResults = addressSearch.get(10, 0);
for(int j = 0; j < count; j++){
System.out.println(addressMatchResults.get(j).getAddress());
System.out.println(addressMatchResults.get(j).getLocation());
System.out.println(addressMatchResults.get(j).getScore());
System.out.println(addressMatchResults.get(j).getAddresses()[0]);
System.out.println(addressMatchResults.get(j).getAddresses()[1]);
System.out.println(addressMatchResults.get(j).getAddresses()[2]);
if (j == 0)
break;
}
查询结果:
总共:917
普育西路201号普育西路窗济食品超市
{X=121.489266891077,Y=31.2115118541329}
110.0
窗济食品超市
普育西路
普育西路201号
3,需要注意的地方
- 使用supermap iobjects必须要配置系统环境变量,将此路径 D:\rjxz\supermap-iobjectsjava-9.1.1-16828-70590-win64-all-Bin\Bin配入Path环境变量中,重启电脑使之生效。
- 申请超图的试用许可