mapxtreme for java 实现模糊查询

1.利用字符串的contains方法的,对每个图层的每个图元进行遍历,通过属性名的比较的到模糊查询的结果;

2.利用查询的相应的名字在去找到对应的图元;

/**
 * 模糊查询.
 * @param mymap
 * @param selectnames
 * @param response
 */
private void fuzzyQuery(MapJ mymap, String selectnames, HttpServletResponse response) throws Exception{

    List<Feature> features = new ArrayList<Feature>();
    response.setCharacterEncoding("UTF-8");
    response.setHeader("content-type","application/javascript");
    PrintWriter out = response.getWriter();

    try{
        if (mymap == null) {
            mymap = initMapJ();
        }

        // 以下是进行图元的查找和渲染

        //获取所有的图层
        Layers layers = mymap.getLayers();


        //对每个图层进行搜索.
        Layer m_Layer = null;
        for(int i=0;i<layers.size();i++){

            //获得layer
            m_Layer = layers.elementAt(i);
            //如果该图层用户没有显示,那么不提供给搜索.
            if(!m_Layer.isVisible()){
                continue;
            }
            // 删除以上操作已经添加的theme列表
            m_Layer.getThemeList().removeAll(true);
            List columnNames = new ArrayList();
            Feature ftr = null;
            TableInfo tabInfo = m_Layer.getTableInfo();
            // 获得ColumnName
            for (int j = 0; j < tabInfo.getColumnCount(); j++) {
                columnNames.add(tabInfo.getColumnName(j));
                System.out.println(tabInfo.getColumnName(j) + "  --  ");
            }

            // Perform a search to get the Features(records)from the layer
            //获得当前图层的所有图元
            RewindableFeatureSet rFtrSet;
            rFtrSet = new RewindableFeatureSet(m_Layer.searchAll(columnNames, null));

            // FeatureSet fs = m_Layer.searchAll(columnNames,
            // QueryParams.ALL_PARAMS);

            //对每个图元进行遍历

            ftr = rFtrSet.getNextFeature();

            while (ftr != null) {
                //利用contain模拟模糊搜索.
                if (ftr.getAttribute(0).toString().contains(selectnames)) {
                    System.out.println(ftr.getAttribute(0).toString()+"-------------->"+selectnames);
                    features.add(ftr);
                }
                ftr = rFtrSet.getNextFeature();
            }
            rFtrSet.rewind();
        }

        System.out.println(features.size()+"================================");
        //获取图元的名称
        List<String> list = new ArrayList<String>();
        JSONArray jsonArray = new JSONArray();
        for(Feature f : features){
            System.out.println(f.getAttribute(0).toString());
            jsonArray.add(f.getAttribute(0).toString());

        }

        Map<String , Object> topMap  = new HashMap<String, Object>();
        topMap.put("result",jsonArray);
        JSONObject jsonObject = JSONObject.fromObject(topMap);
        out.write(jsonObject.toString());


    }catch (Exception e){
        throw new RuntimeException(e);
    }finally {
        out.flush();
        out.close();
    }
}

===================================================================================================================================

/**
 * @指定查找一个图元
 * @第一个参数 mymap ---Mapj
 * @第二个参数 layernames 图层名称
 * @第三个参数 selectnames 图元名称
 * @第四个参数 Response
 */
private void selectF(MapJ mymap, String layernames, String selectnames,
      HttpServletResponse res) throws Exception {

   if (mymap == null) {
      mymap = initMapJ();
   }

   // 以下是进行图元的查找和渲染
   Layer m_Layer = mymap.getLayers().getLayer(layernames);

   if (m_Layer == null) {
      System.out.println("没有[" + layernames + "]这个图层");
      responseimg(mymap, res);
      return;
   }

   // 删除以上操作已经添加的theme列表
   m_Layer.getThemeList().removeAll(true);

   List columnNames = new ArrayList();
   Feature ftr;

   TableInfo tabInfo = m_Layer.getTableInfo();
   // fill vector with Column names
   for (int i = 0; i < tabInfo.getColumnCount(); i++) {
      columnNames.add(tabInfo.getColumnName(i));
      System.out.println(tabInfo.getColumnName(i) + "  --  ");
   }
   // Perform a search to get the Features(records)from the layer
   RewindableFeatureSet rFtrSet;
   rFtrSet = new RewindableFeatureSet(m_Layer.searchAll(columnNames, null));

   // FeatureSet fs = m_Layer.searchAll(columnNames,
   // QueryParams.ALL_PARAMS);
   ftr = rFtrSet.getNextFeature();

   while (ftr != null) {
      if (ftr.getAttribute(0).toString().equals(selectnames)) {
         // 定位点
         if (ftr.getGeometry().getType() == Geometry.TYPE_POINT) {
            double newZoomValue;
            double currentZoom = mymap.getZoom();
            if (m_Layer.isZoomLayer()
                  && (currentZoom > m_Layer.getZoomMax() || currentZoom < m_Layer
                        .getZoomMin())) {
               newZoomValue = m_Layer.getZoomMax() / 2;
               mymap.setZoom(newZoomValue);
            }

            mymap.setCenter(ftr.getGeometry().getBounds().center());
         }
         // 定位线、面
         if (ftr.getGeometry().getType() == Geometry.TYPE_LINE
               || ftr.getGeometry().getType() == Geometry.TYPE_REGION) {

            if (ftr.getGeometry().getBounds().width() > 0
                  && ftr.getGeometry().getBounds().height() > 0) {
               mymap.setBounds(ftr.getGeometry().getBounds());
               mymap.setZoom(mymap.getZoom() * 1.1);
            }
         }
         break;
      }
      ftr = rFtrSet.getNextFeature();
   }
   rFtrSet.rewind();



   // 高亮显示

   // 创建一个 SelectionTheme
   SelectionTheme selTheme = new SelectionTheme("LocateFeature");
   // 创建一个Selection对象并且把选择的图元加入
   Selection sel = new Selection();
   sel.add(ftr);

   // Selection对象加入到SelectionTheme
   selTheme.setSelection(sel);

   // 设置SelectionTheme的显示渲染的样式
   Rendition rend = RenditionImpl.getDefaultRendition();
   rend.setValue(Rendition.FILL, Color.red);
   selTheme.setRendition(rend);

   // 添加SelectionTheme到指定layertheme列表中
   m_Layer.getThemeList().add(selTheme);
   // m_Layer.getThemeList().insert(selTheme, 0);

   responseimg(mymap, res);

}


/**
 * @地图渲染
 */
private void responseimg(MapJ mymap, HttpServletResponse response) {
   ServletOutputStream sout = null;
   mymap.setDeviceBounds(new DoubleRect(0.0D, 0.0D, this.imgsizex,
         this.imgsizey));
   // 设定地图的大小
   response.setContentType("image/jpeg");
   try {
      sout = response.getOutputStream();
      ImageRequestComposer irc = ImageRequestComposer.create(mymap,
            65535, Color.white, "image/jpeg");
      // 创建输出地图的属性---显示的像素,背景颜色,地图格式
      MapXtremeImageRenderer renderer = new MapXtremeImageRenderer(
            this.mapxtremeurl);
      // 加载mapxtremeservlet
      renderer.render(irc);
      // 渲染
      renderer.toStream(sout);
      
   } catch (Exception e) {
      e.printStackTrace();
   }
   try {
      if (sout != null)
               sout.flush();
         sout.close();
   } catch (Exception localException1) {
   }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值