⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addressmatchsample.java

📁 java 版supermap 的 地址搜索匹配
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    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 + -