?? drawvariousmap.java~54~
字號:
package secondstudy;
import com.mapinfo.mapj.MapJ;
import com.mapinfo.unit.LinearUnit;
import com.mapinfo.unit.Distance;
import com.mapinfo.util.DoublePoint;
import com.mapinfo.util.DoubleRect;
import com.mapinfo.mapxtreme.client.MapXtremeImageRenderer;
import com.mapinfo.xmlprot.mxtj.ImageRequestComposer;
import java.awt.Color;
import java.awt.Image;
import java.awt.Graphics;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import com.mapinfo.dp.Geometry;
import com.mapinfo.dp.util.GeometryImpl;
import com.mapinfo.dp.VectorGeometry;
import com.mapinfo.graphics.Rendition;
import com.mapinfo.graphics.RenditionImpl;
import java.awt.geom.Rectangle2D;
import com.mapinfo.dp.Attribute;
import com.mapinfo.dp.PrimaryKey;
import com.mapinfo.dp.Feature;
import com.mapinfo.dp.FeatureSet;
import com.mapinfo.mapj.FeatureFactory;
import com.mapinfo.mapj.FeatureLayer;
import com.mapinfo.dp.util.FeatureImpl;
import com.mapinfo.dp.annotation.AnnotationTableDescHelper;
import com.mapinfo.dp.annotation.AnnotationDataProviderHelper;
import com.mapinfo.dp.Attribute;
import com.mapinfo.dp.util.LocalDataProviderRef;
import java.util.List;
import java.util.ArrayList;
import com.mapinfo.theme.SelectionTheme;
import com.mapinfo.mapj.Selection;
import java.awt.geom.GeneralPath;
public class DrawVariousMap 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;
public DrawVariousMap() throws Exception
{
mapj=new MapJ();
pointCenter=new DoublePoint(108.9608,34.2729);
mapj.setCenter(pointCenter);
mapj.setDeviceBounds(new DoubleRect(0,0,800,600)) ;
LinearUnit unit=LinearUnit.kilometer ;
mapj.setDistanceUnits(unit) ;
mapj.setBounds(new DoubleRect(pointCenter,0.31,0.21)) ;
}
public void drawLineMarker()
{
// Geometry geom=new VectorGeometry();
FeatureFactory feaFactory=mapj.getFeatureFactory() ;
Attribute[] attrs=new Attribute[2];
attrs[0]=new Attribute("pkey");
attrs[1]=new Attribute("straightline");
double[] pts={108.8608,34.2729,108.9608+0.01,34.2729};
Rendition rend=new RenditionImpl();
rend.setValue(Rendition.STROKE ,Color.red );
rend.setValue(Rendition.STROKE_WIDTH ,2f);
Feature feature=null;
try
{
feature=feaFactory.createPolyLine(pts,rend,null,attrs,new PrimaryKey(attrs[0]));
AnnotationTableDescHelper annTDHelper=new AnnotationTableDescHelper("drawtable");
AnnotationDataProviderHelper annDPHelper=new AnnotationDataProviderHelper();
LocalDataProviderRef annDPRef=new LocalDataProviderRef(annDPHelper);
FeatureLayer featureLayer=(FeatureLayer) mapj.getLayers() .insertLayer(annDPRef,annTDHelper,0,"drawlayer");
featureLayer.addFeature(feature) ;
//
List columns=new ArrayList();
DoubleRect searchRect=new DoubleRect(108.9608-0.01,34.2729-0.01,108.9608+0.01,34.2729+0.01);
FeatureSet featureSet=featureLayer.searchWithinRectangle(columns,searchRect,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);
}else
{
return;
}*///這段必須屏蔽掉,否則featureSet中選擇的第一個就已經被丟棄了,因為執行了featureSet.getNextFeature();已經
//使指針執行下一個,這樣第一個總是選不上,如果找到的只有一個結果,那么執行的結果給人的感覺就是這么也設置不上
featureLayer.setSelectable(true) ;//這條語句必須加上否則后面的設置為藍色does't work
SelectionTheme selectionTheme=new SelectionTheme("selectLine");
Selection selection=new Selection();
selection.add(featureSet) ;
//set rendition for selected feature
Rendition selectRend=new RenditionImpl();
selectRend.setValue(Rendition.STROKE ,Color.blue ) ;
Rendition symbolRend=new RenditionImpl();
symbolRend.setValue(Rendition.SYMBOL_MODE ,Rendition.SymbolMode .IMAGE );
symbolRend.setValue(Rendition.SYMBOL_URL ,gifURL);
Rendition.Marker marker;//
marker=new Rendition.Marker(symbolRend);
Rendition.Marker[] markers=new Rendition.Marker[1];
markers[0]=marker;
selectRend.setValue(Rendition.STROKE_MARKERARRAY ,markers);
selectionTheme.setRendition(selectRend) ;
selectionTheme.setSelection(selection) ;
featureLayer.getThemeList() .add(selectionTheme) ;
String layerName=featureLayer.getName() ;
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() ) ;
e.printStackTrace() ;
}
}
public void drawLineMarkerWithVectorSymbol()
{
// Geometry geom=new VectorGeometry();
FeatureFactory feaFactory=mapj.getFeatureFactory() ;
Attribute[] attrs=new Attribute[2];
attrs[0]=new Attribute("pkey");
attrs[1]=new Attribute("straightline");
double[] pts={108.8608,34.2729,108.9608+0.01,34.2729};
Rendition rend=new RenditionImpl();
rend.setValue(Rendition.STROKE ,Color.red );
rend.setValue(Rendition.STROKE_WIDTH ,2f);
Feature feature=null;
try
{
feature=feaFactory.createPolyLine(pts,rend,null,attrs,new PrimaryKey(attrs[0]));
AnnotationTableDescHelper annTDHelper=new AnnotationTableDescHelper("drawtable");
AnnotationDataProviderHelper annDPHelper=new AnnotationDataProviderHelper();
LocalDataProviderRef annDPRef=new LocalDataProviderRef(annDPHelper);
FeatureLayer featureLayer=(FeatureLayer) mapj.getLayers() .insertLayer(annDPRef,annTDHelper,0,"drawlayer");
featureLayer.addFeature(feature) ;
//
List columns=new ArrayList();
DoubleRect searchRect=new DoubleRect(108.9608-0.01,34.2729-0.01,108.9608+0.01,34.2729+0.01);
FeatureSet featureSet=featureLayer.searchWithinRectangle(columns,searchRect,null);
DoublePoint center=pointCenter;
Geometry searchGeom=null;
featureLayer.setSelectable(true) ;//這條語句必須加上否則后面的設置為藍色does't work
SelectionTheme selectionTheme=new SelectionTheme("selectLine");
Selection selection=new Selection();
selection.add(featureSet) ;
//set rendition for selected feature
Rendition selectRend=new RenditionImpl();
selectRend.setValue(Rendition.STROKE ,Color.blue ) ;
Rendition symbolRend=new RenditionImpl();
symbolRend.setValue(Rendition.STROKE ,Color.green ) ;
GeneralPath path=new GeneralPath();
path.moveTo(-3,-3) ;
path.lineTo(3,3) ;
path.moveTo(-3,3) ;
path.lineTo(3,-3) ;
Rendition.SymbolShape symbolShape=new Rendition.SymbolShape(path,symbolRend);
//
Rendition markerRend=new RenditionImpl();
markerRend.setValue(Rendition.SYMBOL_MODE ,Rendition.SymbolMode .SHAPE );
markerRend.setValue(Rendition.SYMBOL_SHAPE ,symbolShape) ;
//
Rendition.Marker marker=new Rendition.Marker(markerRend);
Rendition.Marker[] markers=new Rendition.Marker[1];
markers[0]=marker;
selectRend.setValue(Rendition.STROKE_MARKERARRAY ,markers);
selectionTheme.setRendition(selectRend) ;
selectionTheme.setSelection(selection) ;
featureLayer.getThemeList() .add(selectionTheme) ;
String layerName=featureLayer.getName() ;
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() ) ;
e.printStackTrace() ;
}
}
public void drawLineMarkerWithVectorSymbol2()
{
// Geometry geom=new VectorGeometry();
FeatureFactory feaFactory=mapj.getFeatureFactory() ;
Attribute[] attrs=new Attribute[2];
attrs[0]=new Attribute("pkey");
attrs[1]=new Attribute("straightline");
double[] pts={108.8608,34.2729,108.9608+0.01,34.2729};
Rendition rend=new RenditionImpl();
rend.setValue(Rendition.STROKE ,Color.red );
rend.setValue(Rendition.STROKE_WIDTH ,2f);
Feature feature=null;
try
{
feature=feaFactory.createPolyLine(pts,rend,null,attrs,new PrimaryKey(attrs[0]));
AnnotationTableDescHelper annTDHelper=new AnnotationTableDescHelper("drawtable");
AnnotationDataProviderHelper annDPHelper=new AnnotationDataProviderHelper();
LocalDataProviderRef annDPRef=new LocalDataProviderRef(annDPHelper);
FeatureLayer featureLayer=(FeatureLayer) mapj.getLayers() .insertLayer(annDPRef,annTDHelper,0,"drawlayer");
featureLayer.addFeature(feature) ;
//
List columns=new ArrayList();
DoubleRect searchRect=new DoubleRect(108.9608-0.01,34.2729-0.01,108.9608+0.01,34.2729+0.01);
FeatureSet featureSet=featureLayer.searchWithinRectangle(columns,searchRect,null);
DoublePoint center=pointCenter;
Geometry searchGeom=null;
featureLayer.setSelectable(true) ;//這條語句必須加上否則后面的設置為藍色does't work
SelectionTheme selectionTheme=new SelectionTheme("selectLine");
Selection selection=new Selection();
selection.add(featureSet) ;
//set rendition for selected feature
Rendition selectRend=new RenditionImpl();
selectRend.setValue(Rendition.STROKE ,Color.blue ) ;
//
Rendition symbolRend=new RenditionImpl();
symbolRend.setValue(Rendition.STROKE ,Color.red );
GeneralPath shape=new GeneralPath();
shape.moveTo(0,0) ;
shape.lineTo(5,-5) ;
shape.lineTo(10,0) ;
shape.lineTo(5,5) ;
shape.lineTo(0,0) ;
Rendition.SymbolShape symbolShape=new Rendition.SymbolShape(shape,symbolRend);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -