?? studydecoratemap.java~162~
字號:
package secondstudy;
import com.mapinfo.mapj.MapJ;
import com.mapinfo.unit.LinearUnit;
import com.mapinfo.util.DoublePoint;
import com.mapinfo.util.DoubleRect;
import com.mapinfo.mapj.FeatureLayer;
import com.mapinfo.mapxtreme.client.MapXtremeImageRenderer;
import com.mapinfo.xmlprot.mxtj.ImageRequestComposer;
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.util.List;
import java.util.ArrayList;
import com.mapinfo.dp.Attribute;
import com.mapinfo.dp.Feature;
import com.mapinfo.dp.FeatureSet;
import com.mapinfo.dp.util.RewindableFeatureSet;
import com.mapinfo.dp.Geometry;
import com.mapinfo.dp.VectorGeometry;
import com.mapinfo.dp.PointGeometry;
import com.mapinfo.unit.Distance;
import com.mapinfo.util.GeometryUtils;
import com.mapinfo.dp.util.FeatureImpl;
import com.mapinfo.dp.PrimaryKey;
import com.mapinfo.graphics.Rendition;
import com.mapinfo.graphics.RenditionImpl;
import com.mapinfo.dp.util.GeometryImpl;
import com.mapinfo.dp.annotation.AnnotationDataProviderHelper;
import com.mapinfo.dp.annotation.AnnotationTableDescHelper;
import com.mapinfo.dp.util.LocalDataProviderRef;
import com.mapinfo.theme.SelectionTheme;
import com.mapinfo.mapj.Selection;
import com.mapinfo.labeltheme.LabelThemeList;
import java.awt.Polygon;
import com.mapinfo.theme.OverrideTheme;
import com.mapinfo.dp.AttOperator;
import com.mapinfo.dp.AttTuple;
import com.mapinfo.dp.util.RewindableFeatureSet;
public class StudyDecorateMap extends JFrame
{
private String mdfFilePath="e:\\MapInfo\\study\\mapmdf";
private String mdfFileName="line.mdf";
private String mapxtremeURL="http://901-32:8083/mapxtreme47/mapxtreme";
public static final String gifURL="http://901-32:8083/mapxtreme47/gif/car.gif";
private MapJ mapj=null;
private DoublePoint pointCenter=null;
private FeatureLayer featureLayer=null;
// private double width;
// private double height;
public StudyDecorateMap()
{
mapj=new MapJ();
pointCenter=new DoublePoint(108.9608,34.2729);
double width;
double height;
try
{
mapj.loadMapDefinition(mdfFilePath + "\\" + mdfFileName);
featureLayer = (FeatureLayer) mapj.getLayers().get(0);
featureLayer.setAutoLabel(true);
//
DoubleRect rect = featureLayer.getBounds();
width = rect.xmax - rect.xmin;
height = rect.ymax - rect.ymin;
DoubleRect bound = new DoubleRect(pointCenter, width, height);
mapj.setDeviceBounds(new DoubleRect(0, 0, 180, 160));
mapj.setBounds(bound);
}catch(Exception e)
{
System.out.println("get a "+e.getClass() +"\nwith message "+e.getMessage() ) ;
}
}
public void studyDecorateByAnnotation()
{
try
{
//
List columns=new ArrayList();
Attribute[] attCol=new Attribute[1];
attCol[0]=new Attribute("1t4");
String layerName=featureLayer.getName() ;
FeatureSet featureSet=featureLayer.searchByAttribute(columns,"name",attCol[0],null);
RewindableFeatureSet rfSet=new RewindableFeatureSet(featureSet);
Feature feature=rfSet.getNextFeature() ;
Geometry geom=feature.getGeometry() ;
Distance distance=null;
VectorGeometry geomBuffer=null;
Feature bufferFeature=null;
Attribute[] featureAtt=new Attribute[1];
featureAtt[0]=new Attribute("pkey");
Rendition featureRend=new RenditionImpl();
if(geom.getType() ==Geometry.TYPE_LINE )
{
System.out.println("type:line") ;
geom=(VectorGeometry)geom;
distance=new Distance(0.3,LinearUnit.kilometer );
geomBuffer=GeometryUtils.buffer(geom,distance,4);
// featureRend.setValue(Rendition.SYMBOL_FOREGROUND ,Color.white );
featureRend.setValue(Rendition.FILL ,Color.red ) ;
bufferFeature=new FeatureImpl(new PrimaryKey(featureAtt[0]),
(GeometryImpl)geom,featureAtt,featureRend,null,null);
}else if(geom.getType() ==Geometry.TYPE_POINT )
{
System.out.println("type:point") ;
geom=(PointGeometry)geom;
distance=new Distance(0.3,LinearUnit.kilometer );
geomBuffer=GeometryUtils.buffer(geom,distance,12);
featureRend.setValue(Rendition.SYMBOL_FOREGROUND ,Color.red );
// featureRend.setValue(Rendition.FILL ,Color.red ) ;
featureRend.setValue(Rendition.STROKE_WIDTH ,1f) ;
bufferFeature=new FeatureImpl(new PrimaryKey(featureAtt[0]),
(GeometryImpl)geom,featureAtt,featureRend,null,null);
}else if(geom.getType() ==Geometry.TYPE_REGION )
{
System.out.println("type:region") ;
}else if(geom.getType() ==Geometry.TYPE_UNDEFINED )
{
System.out.println("type:undefined") ;
}
AnnotationTableDescHelper annTDHelper=new AnnotationTableDescHelper("highlightlayer");
AnnotationDataProviderHelper annDPHelper=new AnnotationDataProviderHelper();
LocalDataProviderRef localDPRef=new LocalDataProviderRef(annDPHelper);
FeatureLayer highlightLayer=(FeatureLayer)mapj.getLayers() .insertLayer(localDPRef,annTDHelper,0,"highlightlayer");
highlightLayer.addFeature(bufferFeature) ;
//
MapXtremeImageRenderer render=new MapXtremeImageRenderer(mapxtremeURL);
ImageRequestComposer imageRC=ImageRequestComposer.create(mapj,256,Color.white,"image/png") ;
render.render(imageRC) ;
//render.toFile("e:\\mapinfo\\study\\png\\pointline2.png") ;
Image img=render.toImage() ;
DrawImage drawImage=new DrawImage(img);
this.getContentPane() .add(drawImage,BorderLayout.CENTER );
this.setSize(800,600) ;
this.setVisible(true) ;
this.show() ;
}catch(Exception e)
{
System.out.println("get a "+e.getClass() +"\nwith message "+e.getMessage() ) ;
}
}
public static void main(String[] args)
{
StudyDecorateMap sdm=new StudyDecorateMap();
sdm.studyDecorateByAnnotation() ;
// sdm.highlightPath() ;
// sdm.mapWithShape() ;
//sdm.highlightPath2() ;
}
public class DrawImage extends JPanel
{
private Image m_img;
public DrawImage(Image img)
{
m_img=img;
}
public void paint(Graphics g)
{
g.drawImage(m_img,0,0,this);
}
}
public void highlightPath()
{
FeatureSet featureSet=null;
String attributeName="name";
String attributeValue="1t4";
Attribute attSearchValue=new Attribute(attributeValue);
ArrayList columns=new ArrayList();
try
{
columns.add(attributeName) ;
featureSet = featureLayer.searchByAttribute(columns,
attributeName,attSearchValue,null);//首先搜索滿足條件的,根據屬性名搜索,這兒指定了搜索的路線的名稱
DoublePoint center=pointCenter;
Geometry searchGeom=null;
if (featureSet != null)
{
Feature feat = featureSet.getNextFeature();
if (feat == null) return;
searchGeom = feat.getGeometry();
DoubleRect dr = searchGeom.getBounds();
center=dr.center() ;
System.out.println("(" + dr.center().x + ", " + dr.center().y + ")");//(fs);
}
DoubleRect searchRect=new DoubleRect(center,0.03,0);
featureSet=featureLayer.searchWithinRectangle(columns,searchRect,null);
RewindableFeatureSet rfSet=new RewindableFeatureSet(featureSet);
Feature feature=rfSet.getNextFeature() ;
SelectionTheme selectionTheme=new SelectionTheme("lineselect");
Selection selection=new Selection();
featureLayer.setSelectable(true) ;
selection.add(rfSet) ;
//
/* Rendition rend=RenditionImpl.getDefaultRendition() ;
rend.setValue(Rendition.STROKE_WIDTH ,3f) ;
rend.setValue(Rendition.STROKE ,Color.blue ) ;*/
//study paraller line
/* Rendition rendParallel = new RenditionImpl();
rendParallel.setValue(Rendition.STROKE, Color.red );
Rendition.ParallelLine parallel1 = new Rendition.ParallelLine(
3f, rendParallel);//負數,bottom,在基線的上面
Rendition.ParallelLine parallel2 = new Rendition.ParallelLine(
-3f, rendParallel);//正數,top,在基線的下面,如果為0,就覆蓋原線,如果為正數就在它的下面或者使左邊
//,如果為負數就在原線的上面或右邊;
Rendition.ParallelLine[] parallelArray = {parallel1, parallel2};
Rendition rendBaseLine = new RenditionImpl();
rendBaseLine.setValue(Rendition.STROKE_OPACITY, 0f);
rendBaseLine.setValue(Rendition.STROKE_PARALLELARRAY, parallelArray);
*/
//
//study dashline
/* float[] dashlineArray=new float[2];
dashlineArray[0]=5;
dashlineArray[1]=2;
Rendition rend=new RenditionImpl();
rend.setValue(Rendition.STROKE_DASHARRAY ,dashlineArray);
rend.setValue(Rendition.STROKE_DASHOFFSET ,3);
rend.setValue(Rendition.STROKE_WIDTH ,2f);
rend.setValue(Rendition.STROKE ,Color.red );*/
//study line marker
/* Rendition rendSymbol=new RenditionImpl();
rendSymbol.setValue(Rendition.SYMBOL_MODE ,Rendition.SymbolMode .IMAGE );
rendSymbol.setValue(Rendition.SYMBOL_URL ,gifURL);
Rendition.Marker marker;//=new Rendition.Marker();
marker=new Rendition.Marker(rendSymbol);
Rendition.Marker[] markers=new Rendition.Marker[1];
markers[0]=marker;
Rendition rend=new RenditionImpl();
rend.setValue(Rendition.STROKE_MARKERARRAY ,markers);
rend.setValue(Rendition.STROKE ,Color.red );
rend.setValue(Rendition.STROKE_WIDTH ,3f);*/
//study font symbol
Rendition rend=new RenditionImpl();
rend.setValue(Rendition.SYMBOL_MODE ,Rendition.SymbolMode .FONT );
rend.setValue(Rendition.FONT_FAMILY ,"Mapinfo Cartographic") ;
rend.setValue(Rendition.FONT_SIZE ,16);
rend.setValue(Rendition.SYMBOL_STRING ,String.valueOf((char)33)) ;
selectionTheme.setRendition(rend) ;
selectionTheme.setSelection(selection) ;
featureLayer.getThemeList() .add(selectionTheme) ;
//
MapXtremeImageRenderer render=new MapXtremeImageRenderer(mapxtremeURL);
ImageRequestComposer imageRC=ImageRequestComposer.create(mapj,256,Color.white ,"image/png");
render.render(imageRC) ;
Image image=render.toImage() ;
DrawImage drawImage=new DrawImage(image);
this.getContentPane() .add(drawImage,BorderLayout.CENTER ) ;
this.setSize(800,600) ;
this.setVisible(true) ;
this.show() ;
}catch(Exception e)
{
System.out.println("get a "+e.getClass() +"\nwith message "+e.getMessage() ) ;
}
}
public void mapWithShape()
{
LabelThemeList themeList = null;
if ((themeList = featureLayer.getLabelThemeList() )!=null)
{
Polygon poly = new java.awt.Polygon();
poly.addPoint(2,2);
poly.addPoint(-2,2);
poly.addPoint(-2,-2);
poly.addPoint(2,-2);
Rendition polyRend = new RenditionImpl();
polyRend.setValue(Rendition.STROKE,Color.green);
polyRend.setValue(Rendition.FILL,Color.red);
Rendition rend = new RenditionImpl();
rend.setValue(Rendition.SYMBOL_MODE,Rendition.SymbolMode.SHAPE);
rend.setValue(Rendition.SYMBOL_SHAPE,new Rendition.SymbolShape(poly,polyRend));
OverrideTheme ot = new OverrideTheme(rend,"shapeTheme");
featureLayer.getThemeList().add(ot);
MapXtremeImageRenderer render=new MapXtremeImageRenderer(mapxtremeURL);
ImageRequestComposer imageRC=ImageRequestComposer.create(mapj,256,Color.white ,"image/png");
Image image;
try
{
render.render(imageRC);
image=render.toImage() ;
DrawImage drawImage=new DrawImage(image);
this.getContentPane() .add(drawImage,BorderLayout.CENTER );
this.setSize(800,600) ;
this.setVisible(true) ;
this.show() ;
}catch(Exception e)
{
System.out.println("get a "+e.getClass() +"\nwith message "+e.getMessage() ) ;
}
}
}
public void highlightPath2()
{
FeatureSet featureSet=null;
String attributeName="name";
String attributeValue="1t4";
Attribute attSearchValue=new Attribute(attributeValue);
ArrayList columns=new ArrayList();
DoubleRect allRect=new DoubleRect();
double width;
double height;
try
{
columns.add("name") ;
columns.add("length") ;
List listColName=new ArrayList();
List listColValue=new ArrayList();
List listOperator=new ArrayList();
listColName.add("name") ;
//
Attribute att1=new Attribute("52t49");
Attribute att2=new Attribute("54t53");
AttTuple attTuple1=new AttTuple(att1);
AttTuple attTuple2=new AttTuple(att2);
listColValue.add(attTuple1);
listColValue.add(attTuple2) ;
//
att1=new Attribute("54t57");
attTuple1=new AttTuple(att1);
listColValue.add(attTuple1) ;
//
att1=new Attribute("53t52");
attTuple1=new AttTuple(att1);
listColValue.add(attTuple1) ;
listOperator.add(AttOperator.eq);
featureLayer.setSelectable(true) ;
featureSet=featureLayer.searchByAttributes(columns,listColName,listOperator,listColValue,null);
if(featureSet==null)
{
System.out.println("null,retrun") ;
}
RewindableFeatureSet rfSet=new RewindableFeatureSet(featureSet);
boolean rewind= rfSet.isRewindable() ;
Feature feat = featureSet.getNextFeature();
allRect.initBounds() ;
while(feat!=null)
{
Geometry searchGeom = null;
DoublePoint center = pointCenter;
searchGeom = feat.getGeometry();
DoubleRect dr = searchGeom.getBounds();
allRect.merge(dr) ;
center = dr.center();
System.out.println("(" + dr.center().x + ", " + dr.center().y + ")"); //(fs);
feat = featureSet.getNextFeature();
}
rfSet.rewind() ;
featureSet=featureLayer.searchByAttributes(columns,listColName,listOperator,listColValue,null);
SelectionTheme selectionTheme=new SelectionTheme("lineselect");
Selection selection=new Selection();
selection.add(featureSet) ;
//
Rendition rend=new RenditionImpl();
rend.setValue(Rendition.STROKE ,Color.blue );
rend.setValue(Rendition.STROKE_WIDTH ,3f);
selectionTheme.setRendition(rend) ;
selectionTheme.setSelection(selection) ;
featureLayer.getThemeList() .add(selectionTheme) ;
//reset the bound of mapj
pointCenter=allRect.center() ;
mapj.setCenter(pointCenter) ;
width=allRect.xmax -allRect.xmin ;
height=allRect.ymax -allRect.ymin ;
DoubleRect bound=new DoubleRect(pointCenter,width*1,height*1);
mapj.setBounds(bound) ;
MapXtremeImageRenderer render=new MapXtremeImageRenderer(mapxtremeURL);
ImageRequestComposer imageRC=ImageRequestComposer.create(mapj,256,Color.white ,"image/png");
render.render(imageRC) ;
render.toFile("e:\\mapinfo\\study\\png\\formobilephone.png") ;
/* Image image=render.toImage() ;
DrawImage drawImage=new DrawImage(image);
this.getContentPane() .add(drawImage,BorderLayout.CENTER ) ;
this.setSize(180,160) ;
this.setVisible(true) ;
this.show() ;*/
}catch(Exception e)
{
System.out.println("get a "+e.getClass() +"\nwith message "+e.getMessage() ) ;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -