⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawvariousmap.java

📁 CreateMyFirstMap
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                                                                                                                                                                                                                                                          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) ;
//
   //下面这个是练习,练习如何得到feature对应的列值,因为一个层实际上对应的就是一个表,所以一个feature
     //对应的应该就是一列
     for(int i=0;i<feature.getAttributeCount() ;i++)
     {
       Attribute att=feature.getAttribute(i) ;
       String str=att.getString() ;
       str="wait";
     }

   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) ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -