- 积分
- 229
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2013-10-17
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 ycjtj1dx202ly 于 2013-10-30 20:56 编辑
此次教程实现从格点数据生成各种图层,主要包括Contour(等值线)、Shaded(等值填充)、Grid_Fill(格点填充)、Grid_Point(格点点图层)、Raster(栅格图层)、Vector(风场矢量)、Barb(风向杆)、Streamline(流场)。
首先先来实现只需要一个格点数据(GridData)的Contour、Shaded、Grid_Fill、Grid_Point和Raster图层。获取格点数据后需要生成图例,再用DrawMeteoData类的一些静态方法来从GridData创建各种图层:
Contour: DrawMeteoData.createContourLayer(GridData gridData, LegendScheme aLS, String layerName, String fieldName, boolean isSmooth)
Shaded: DrawMeteoData.createShadedLayer(GridData gridData, LegendScheme aLS, String layerName, String fieldName, boolean isSmooth)
Grid_Fill: DrawMeteoData.createGridFillLayer(GridData gridData, LegendScheme aLS, String LName, String fieldName)
Grid_Point: DrawMeteoData.createGridPointLayer(GridData gridData, LegendScheme aLS, String LName, String fieldName)
Raster: DrawMeteoData.createRasterLayer(GridData GridData, String LName, LegendScheme aLS)
首先还是在MeteoData菜单下GrADS Data菜单中加入相应的子菜单,然后在各自的事件中输入相应的代码。
代码如下:
- private void jMenuItem_ShadedActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- //Create a MeteoDataInfo object
- MeteoDataInfo aDataInfo = new MeteoDataInfo();
- //Open GrADS data file
- String dataDir = "E:\\MeteoInfo\\sample\\GrADS\\";
- String fileName = dataDir + "model.ctl";
- aDataInfo.openGrADSData(fileName);
- //Get GridData
- GridData press = aDataInfo.getGridData("PS");
- //Create a legend scheme
- LegendScheme aLS = LegendManage.createLegendSchemeFromGridData(press,LegendType.GraduatedColor, ShapeTypes.Polygon);
- //Create a shaded layer
- VectorLayer aLayer = DrawMeteoData.createShadedLayer(press, aLS, "Shaded_PS", "PS", true);
- //Add layer
- layersLegend1.getActiveMapFrame().addLayer(aLayer);
- layersLegend1.getActiveMapFrame().moveLayer(aLayer.getHandle(), 0);
- layersLegend1.repaint();
- //Change title of the layout
- LayoutGraphic aTitle = mapLayout1.getTexts().get(0);
- aTitle.setLabelText("MeteoInfo Class Library Demo - Shaded Layer");
- //Add or change the legend in layout
- LayoutLegend aLegend;
- if (this.mapLayout1.getLegends().size() > 0) {
- aLegend = mapLayout1.getLegends().get(0);
- } else {
- aLegend = mapLayout1.addLegend(650, 100);
- }
- aLegend.setLegendStyle(LegendStyles.Bar_Vertical);
- aLegend.setLegendLayer(aLayer);
- mapLayout1.paintGraphics();
- }
- private void jMenuItem_GridFillActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- //Create a MeteoDataInfo object
- MeteoDataInfo aDataInfo = new MeteoDataInfo();
- //Open GrADS data file
- String dataDir = "E:\\MeteoInfo\\sample\\GrADS\\";
- String fileName = dataDir + "model.ctl";
- aDataInfo.openGrADSData(fileName);
- //Get GridData
- GridData press = aDataInfo.getGridData("PS");
- //Create a legend scheme
- LegendScheme aLS = LegendManage.createLegendSchemeFromGridData(press,LegendType.GraduatedColor, ShapeTypes.Polygon);
- //Create a shaded layer
- VectorLayer aLayer = DrawMeteoData.createGridFillLayer(press, aLS, "GridFill_PS", "PS");
- //Add layer
- layersLegend1.getActiveMapFrame().addLayer(aLayer);
- layersLegend1.getActiveMapFrame().moveLayer(aLayer.getHandle(), 0);
- layersLegend1.repaint();
- //Change title of the layout
- LayoutGraphic aTitle = mapLayout1.getTexts().get(0);
- aTitle.setLabelText("MeteoInfo Class Library Demo - Grid Fill Layer");
- //Add or change the legend in layout
- LayoutLegend aLegend;
- if (this.mapLayout1.getLegends().size() > 0) {
- aLegend = mapLayout1.getLegends().get(0);
- } else {
- aLegend = mapLayout1.addLegend(650, 100);
- }
- aLegend.setLegendStyle(LegendStyles.Bar_Vertical);
- aLegend.setLegendLayer(aLayer);
- mapLayout1.paintGraphics();
- }
- private void jMenuItem_GridPointActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- //Create a MeteoDataInfo object
- MeteoDataInfo aDataInfo = new MeteoDataInfo();
- //Open GrADS data file
- String dataDir = "E:\\MeteoInfo\\sample\\GrADS\\";
- String fileName = dataDir + "model.ctl";
- aDataInfo.openGrADSData(fileName);
- //Get GridData
- GridData press = aDataInfo.getGridData("PS");
- //Create a legend scheme
- LegendScheme aLS = LegendManage.createLegendSchemeFromGridData(press,LegendType.GraduatedColor, ShapeTypes.Point);
- //Create a shaded layer
- VectorLayer aLayer = DrawMeteoData.createGridPointLayer(press, aLS, "GridPoint_PS", "PS");
- //Add layer
- layersLegend1.getActiveMapFrame().addLayer(aLayer);
- layersLegend1.getActiveMapFrame().moveLayer(aLayer.getHandle(), 2);
- layersLegend1.repaint();
- //Change title of the layout
- LayoutGraphic aTitle = mapLayout1.getTexts().get(0);
- aTitle.setLabelText("MeteoInfo Class Library Demo - Grid Point Layer");
- //Add or change the legend in layout
- LayoutLegend aLegend;
- if (this.mapLayout1.getLegends().size() > 0) {
- aLegend = mapLayout1.getLegends().get(0);
- } else {
- aLegend = mapLayout1.addLegend(650, 100);
- }
- aLegend.setLegendStyle(LegendStyles.Bar_Vertical);
- aLegend.setLegendLayer(aLayer);
- mapLayout1.paintGraphics();
- }
- private void jMenuItem_RasterActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- //Create a MeteoDataInfo object
- MeteoDataInfo aDataInfo = new MeteoDataInfo();
- //Open GrADS data file
- String dataDir = "E:\\MeteoInfo\\sample\\GrADS\\";
- String fileName = dataDir + "model.ctl";
- aDataInfo.openGrADSData(fileName);
- //Get GridData
- GridData press = aDataInfo.getGridData("PS");
- //Create a legend scheme
- LegendScheme aLS = LegendManage.createLegendSchemeFromGridData(press,LegendType.GraduatedColor, ShapeTypes.Polygon);
- //Create a shaded layer
- RasterLayer aLayer = DrawMeteoData.createRasterLayer(press, "GridFill_PS", aLS);
- //Add layer
- layersLegend1.getActiveMapFrame().addLayer(aLayer);
- layersLegend1.getActiveMapFrame().moveLayer(aLayer.getHandle(), 0);
- layersLegend1.repaint();
- //Change title of the layout
- LayoutGraphic aTitle = mapLayout1.getTexts().get(0);
- aTitle.setLabelText("MeteoInfo Class Library Demo - Raster Layer");
- //Add or change the legend in layout
- LayoutLegend aLegend;
- if (this.mapLayout1.getLegends().size() > 0) {
- aLegend = mapLayout1.getLegends().get(0);
- } else {
- aLegend = mapLayout1.addLegend(650, 100);
- }
- aLegend.setLegendStyle(LegendStyles.Bar_Vertical);
- aLegend.setLegendLayer(aLayer);
- mapLayout1.paintGraphics();
- }
调试结果如下:
然后是至少需要两个格点数据,风场U、V分量或者风速、风向的Vector(风场矢量)、Barb(风向杆)、Streamline(流场)。
model.ctl/model.dat数据里是U、V分量,所以这里只示例了这种情况,风速、风向的情况也很类似。MeteoDataInfo对象里可以设置setTiimeIndex()和setLevelIndex()来获得不同时次是高度的某变量的格点数据,由于地面风场只有海洋区域有,因此可以将setLevelIndex()设的大些。用getGridData方法获取风场U、V分量的GridData,然后就可以用DrawMeteoData类中的相应方法来创建Vector、Barb和Streamline图层了。其中Vector和Barb图层还可以根据第三个变量来设置图元的颜色,以便显示更丰富的信息。
DrawMeteoData类中创建Vector、Barb和Streamline的方法如下:
Vector: DrawMeteoData.createGridVectorLayer(GridData uData, GridData vData, GridData gridData,
LegendScheme aLS, boolean ifColor, String lName, boolean isUV)
Barb: DrawMeteoData.createGridBarbLayer(GridData uData, GridData vData, GridData gridData,
LegendScheme aLS, boolean ifColor, String lName, boolean isUV)
Streamline: DrawMeteoData.createStreamlineLayer(GridData uData, GridData vData, int density, LegendScheme aLS,
String lName, boolean isUV)
同样的方法加入菜单,具体代码如下:
- private void jMenuItem_VectorActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- //Create a MeteoDataInfo object
- MeteoDataInfo aDataInfo = new MeteoDataInfo();
- //Open GrADS data file
- String dataDir = "E:\\MeteoInfo\\sample\\GrADS\\";
- String fileName = dataDir + "model.ctl";
- aDataInfo.openGrADSData(fileName);
- //Get GridData
- aDataInfo.setTimeIndex(2);
- aDataInfo.setLevelIndex(3);
- GridData tData = aDataInfo.getGridData("T");
- GridData uData = aDataInfo.getGridData("U");
- GridData vData = aDataInfo.getGridData("V");
- //Create a legend scheme
- LegendScheme aLS = LegendManage.createLegendSchemeFromGridData(tData, LegendType.GraduatedColor, ShapeTypes.Point);
- //Create a contour layer
- VectorLayer aLayer = DrawMeteoData.createGridVectorLayer(uData, vData, tData, aLS, true, "Vector_UV", true);
- //Add layer
- layersLegend1.getActiveMapFrame().addLayer(aLayer);
- layersLegend1.getActiveMapFrame().moveLayer(aLayer.getHandle(), 2);
- layersLegend1.repaint();
- //Change title of the layout
- LayoutGraphic aTitle = mapLayout1.getTexts().get(0);
- aTitle.setLabelText("MeteoInfo Class Library Demo - Wind Vector Layer");
- //Add or change the legend in layout
- LayoutLegend aLegend;
- if (mapLayout1.getLegends().size() > 0) {
- aLegend = mapLayout1.getLegends().get(0);
- } else {
- aLegend = mapLayout1.addLegend(650, 100);
- }
- aLegend.setLegendStyle(LegendStyles.Bar_Vertical);
- aLegend.setLegendLayer(aLayer);
- mapLayout1.paintGraphics();
- }
- private void jMenuItem_BarbActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- //Create a MeteoDataInfo object
- MeteoDataInfo aDataInfo = new MeteoDataInfo();
- //Open GrADS data file
- String dataDir = "E:\\MeteoInfo\\sample\\GrADS\\";
- String fileName = dataDir + "model.ctl";
- aDataInfo.openGrADSData(fileName);
- //Get GridData
- aDataInfo.setTimeIndex(2);
- aDataInfo.setLevelIndex(3);
- GridData uData = aDataInfo.getGridData("U");
- GridData vData = aDataInfo.getGridData("V");
- //Create a legend scheme
- LegendScheme aLS = LegendManage.createSingleSymbolLegendScheme(ShapeTypes.Point, Color.blue, 10);
- //Create a barb layer
- VectorLayer aLayer = DrawMeteoData.createGridBarbLayer(uData, vData, uData, aLS, false, "Barb_UV", true);
- //Add layer
- layersLegend1.getActiveMapFrame().addLayer(aLayer);
- layersLegend1.getActiveMapFrame().moveLayer(aLayer.getHandle(), 2);
- layersLegend1.repaint();
- //Change title of the layout
- LayoutGraphic aTitle = mapLayout1.getTexts().get(0);
- aTitle.setLabelText("MeteoInfo Class Library Demo - Wind Barb Layer");
- }
- private void jMenuItem_StreamLineActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
- //Create a MeteoDataInfo object
- MeteoDataInfo aDataInfo = new MeteoDataInfo();
- //Open GrADS data file
- String dataDir = "E:\\MeteoInfo\\sample\\GrADS\\";
- String fileName = dataDir + "model.ctl";
- aDataInfo.openGrADSData(fileName);
- //Get GridData
- aDataInfo.setTimeIndex(2);
- aDataInfo.setLevelIndex(3);
- GridData uData = aDataInfo.getGridData("U");
- GridData vData = aDataInfo.getGridData("V");
- //Create a legend scheme
- LegendScheme aLS = LegendManage.createSingleSymbolLegendScheme(ShapeTypes.Polyline, Color.blue, 1);
- //Create a contour layer
- VectorLayer aLayer = DrawMeteoData.createStreamlineLayer(uData, vData, 4, aLS, "Streamline_UV", true);
- //Add layer
- layersLegend1.getActiveMapFrame().addLayer(aLayer);
- layersLegend1.getActiveMapFrame().moveLayer(aLayer.getHandle(), 2);
- layersLegend1.repaint();
- //Change title of the layout
- LayoutGraphic aTitle = mapLayout1.getTexts().get(0);
- aTitle.setLabelText("MeteoInfo Class Library Demo - Wind streamline Layer");
- }
调试结果如下:
|
|