supermap iobjects java 地理編碼實現(一)

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,需要注意的地方

  1. 使用supermap iobjects必須要配置系統環境變量,將此路徑 D:\rjxz\supermap-iobjectsjava-9.1.1-16828-70590-win64-all-Bin\Bin配入Path環境變量中,重啓電腦使之生效。
  2. 申請超圖的試用許可

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章