爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4368|回复: 3

MeteoInfo Java版二次开发教程九

[复制链接]

新浪微博达人勋

发表于 2013-11-5 11:22:15 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 ycjtj1dx202ly 于 2013-11-5 11:23 编辑

此次教程先实现Mask Out功能,即屏蔽指定的区域之外的图形,MapView有MaskOut属性,可以设置SetMaskOut和MaskLayer(必须是Polygon图层,不要太复杂)。
首先将图层shaded_PS中加入aLayer.setMaskOut(true);
创建好菜单好,输入下列代码:
  1.     private void jMenuItem_MaskOutActionPerformed(java.awt.event.ActionEvent evt) {                                                  
  2.         // TODO add your handling code here:
  3.         MaskOut mo = layersLegend1.getActiveMapFrame().getMapView().getMaskOut();
  4.         mo.setMask(true);
  5.         mo.setMaskLayer("china.shp");
  6.         layersLegend1.getActiveMapFrame().getMapView().paintLayers();
  7.     }

调试结果如下:
Mask Out之前
1.png

Mask Out之后
2.png

接下来实现创建点图层。创建一个VectorLayer图层需要给图层对象增加属性字段,并添加相应的Shape对象及属性值。具体代码如下:
  1. private void jMenuItem_CreatePointLayerActionPerformed(java.awt.event.ActionEvent evt) {                                                           
  2.         // TODO add your handling code here:
  3.         //New layer
  4.         VectorLayer aLayer = new VectorLayer(ShapeTypes.Point);
  5.         aLayer.setLayerName("New_Point_Layer");
  6.         aLayer.setLegendScheme(LegendManage.createSingleSymbolLegendScheme(ShapeTypes.Point, Color.black, 10));
  7.         aLayer.setVisible(true);

  8.         //Add fields           
  9.         aLayer.editAddField("STATION", DataTypes.String);
  10.         aLayer.editAddField("LON", DataTypes.Double);
  11.         aLayer.editAddField("LAT", DataTypes.Double);
  12.         aLayer.editAddField("DATA", DataTypes.Double);

  13.         //Prepare coordinate data
  14.         double[] X = {120.0, 110.0};
  15.         double[] Y = {42.0, 35.0};
  16.         double[] data = {100.0, 80.0};

  17.         //Add shape
  18.         for (int i = 0; i < 2; i++) {
  19.             PointShape aPS = new PointShape();
  20.             PointD aPoint = new PointD();
  21.             aPoint.X = X;
  22.      aPoint.Y = Y;
  23.             aPS.setPoint(aPoint);
  24.             int shapeNum = aLayer.getShapeNum();
  25.             try {
  26.                 if (aLayer.editInsertShape(aPS, shapeNum)) {
  27.                     //Edit record value
  28.                     aLayer.editCellValue("STATION", shapeNum, "St1");
  29.                     aLayer.editCellValue("LON", shapeNum, aPoint.X);
  30.                     aLayer.editCellValue("LAT", shapeNum, aPoint.Y);
  31.                     aLayer.editCellValue("DATA", shapeNum, data);
  32.                 }
  33.             } catch (Exception ex) {
  34.                 Logger.getLogger(FrmMain.class.getName()).log(Level.SEVERE, null, ex);
  35.             }
  36.         }

  37.         //Add Label
  38.         aLayer.getLabelSet().setFieldName("DATA");
  39.         aLayer.getLabelSet().setLabelFont(new Font("Arial", Font.PLAIN, 18));
  40.         aLayer.getLabelSet().setYOffset(30);
  41.         aLayer.addLabels();

  42.         //Add layer
  43.         layersLegend1.getActiveMapFrame().addLayer(aLayer);
  44.         layersLegend1.getActiveMapFrame().getMapView().paintLayers();
  45.         layersLegend1.repaint();
  46.     }

上述代码的调试结果如下:

3.png



密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-11-5 20:06:37 | 显示全部楼层
不错。感谢分享,可以制作三维地图吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-6-20 16:49:47 | 显示全部楼层
本科生学习中
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-6-13 21:16:54 | 显示全部楼层
{:eb502:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表