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環境變量中,重啓電腦使之生效。
- 申請超圖的試用許可