|
James评论:
下面代码取至于完整项目代码的一个部分,但是关于查找和高亮显示部分均为直接调用MapInfo的API实现,可以参考借鉴。
/**
* 查找layerName图层,查找mapinfo_id值为pkValue,
* 操作方式 op = Locate 显示详细信息
* op = Info 定位地图
*/
public void locateFeature(String layerName,String pkValue,String op){
try{
com.mimiddleware.tools.HtmlResponseTool htmlResponse=this.responseBean.getHtmlResponse();
CMapToolKit toolKit = new CMapToolKit();
Layer lyr=responseBean.getM_map().getLayers().getLayer(layerName);
if(lyr==null){
htmlResponse.out("没有"+layerName+"这个图层");
htmlResponse.out.flush();
return;
}
//删除当前地图中的所有专题地图
for (int i=0 ;i<responseBean.getM_map().getLayers().size() ;i++){
responseBean.getM_map().getLayers().elementAt(i).getThemeList().removeAll();
}
Integer iValue = new Integer(pkValue);
int iVal = iValue.intValue();
//Attribute pkAtr=new Attribute(Integer.parseInt(pkValue));
Attribute pkAtr=new Attribute(iVal);
String stemp = null;
//System.out.println("Atribute Value is " + iValue.toString());
PrimaryKey[] pkAry=new PrimaryKey[1];
PrimaryKey pk=new PrimaryKey(pkAtr);
pkAry[0]=pk;
Vector v=new Vector();
//v.addElement("MapInfo_ID");
TableInfo tInfo=lyr.getTableInfo();
for(int j=0;j<tInfo.getColumnCount();j++){
v.addElement( tInfo.getColumnName(j));
}
FeatureSet fs=lyr.searchByPrimaryKey(v,pkAry,null);
//FeatureSet fs=lyr.searchByAttribute(v,"MapInfo_ID",pkAtr,null);
Feature f=fs.getNextFeature();
if(f==null){
htmlResponse.out("没有找到对应的项目信息");
return;
}else{
//定位
if(op.equalsIgnoreCase("Locate")){
lyr.setVisible(true);
if(responseBean.getRequestBlRenMap()>-1){
//定位点
if(f.getGeometry().getType()==Geometry.TYPE_POINT){
double newZoomValue;
PointGeometry pg=(PointGeometry)f.getGeometry();
double currentZoom=responseBean.getM_map().getZoom();
if(lyr.isZoomLayer()&&( currentZoom>lyr.getZoomMax()|| currentZoom<lyr.getZoomMin())){
newZoomValue=lyr.getZoomMax()/2;
responseBean.getM_map().setZoom(newZoomValue);
}
responseBean.getM_map().setCenter(pg.getPoint(null));
}
//定位线、面
if(f.getGeometry().getType()==Geometry.TYPE_LINE||f.getGeometry().getType()==Geometry.TYPE_REGION){
VectorGeometry vg=(VectorGeometry)f.getGeometry();
if (vg.getBounds().width()>0 && vg.getBounds().height() >0){
responseBean.getM_map().setBounds(vg.getBounds());
responseBean.getM_map().setZoom(responseBean.getM_map().getZoom()*1.1);
}
}
//高亮显示
SelectionTheme selTheme = new SelectionTheme("LocateFeature");
Selection sel = new Selection();
sel.add(f);
selTheme.setSelection(sel);
com.mapinfo.graphics.Rendition rend =com.mapinfo.graphics.RenditionImpl.getDefaultRendition();
rend.setValue(com.mapinfo.graphics.Rendition.FILL, Color.red );
rend.setValue(com.mapinfo.graphics.Rendition.SYMBOL_FOREGROUND, Color.red);
rend.setValue(com.mapinfo.graphics.Rendition.FONT_FAMILY, "MapInfo Symbols");
rend.setValue(com.mapinfo.graphics.Rendition.FONT_SIZE, new Float(30));
rend.setValue(com.mapinfo.graphics.Rendition.STROKE, Color.blue);
rend.setValue(com.mapinfo.graphics.Rendition.STROKE_WIDTH, 3);
char[] c=new char[1];
c[0]=(char)36;
rend.setValue(com.mapinfo.graphics.Rendition.SYMBOL_STRING, new String(c));
selTheme.setRendition(rend);
lyr.setSelectable(true);
toolKit.removeAllTheme(responseBean.getM_map(),"LocateFeature",0);
lyr.getThemeList().add(selTheme);
responseBean.setBlRenderMap(true);
responseBean.setBlRefreshOVMap(true);
htmlResponse.out.flush();
}
}
if(op.equalsIgnoreCase("Info")){
//输出信息
printTitleApplet();
for(int g=0;g<f.getAttributeCount();g++){
if((tInfo.getColumnName(g).equalsIgnoreCase("name")) || (tInfo.getColumnName(g).equalsIgnoreCase("名称")) ){
htmlResponse.out("<tr><td colspan=\"2\" bgcolor=\"#FEE7BC\">查询记录:<font color=red><b>"+f.getAttribute(g).getString()+"</b></font></td></tr>");
break;
}
}
for(int g=0;g<f.getAttributeCount();g++){
if(tInfo.getColumnName(g).equalsIgnoreCase("MapInfo_ID")){continue;}
htmlResponse.out("<tr><td bgcolor=\"#EFEFEF\">"+tInfo.getColumnName(g)+"</td>");
htmlResponse.out( "<td bgcolor=\"#FFFFFF\">"+f.getAttribute(g).getString()+"</td></tr>");
}
printEndApplet();
}
}
}catch(Exception ex){
ex.printStackTrace();
}
} |