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到指定layer的theme列表中
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);
// 加载mapxtreme的servlet
renderer.render(irc);
// 渲染
renderer.toStream(sout);
} catch (Exception e) {
e.printStackTrace();
}
try {
if (sout != null)
sout.flush();
sout.close();
} catch (Exception localException1) {
}
}