📄 studydecoratemap.java
字号:
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) ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -