爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4687|回复: 6

关于meteoinfo插值方法的问题

[复制链接]

新浪微博达人勋

发表于 2018-10-25 11:36:45 | 显示全部楼层 |阅读模式

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

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

x
使用IDW插值方法出图正常
QQ截图20181025113753.png
但是使用Cressman和AssignPointToGrid插值方法就出图有问题
QQ截图20181025113746.png
代码是
        MapLayout layout=new MapLayout();
                //添加标题
                if(title != null){
                        layout.addText(title, 200, 60, "宋体", 18);
                }
                //添加副标题
                if(Subtitle != null){
                        layout.addText(Subtitle, 200, 80, "宋体", 14);
                }
               
        layout.setSize(2970, 2100);
        layout.setBackground(new Color(255, 255, 255, 0));
        MapFrame mapFrame=layout.getActiveMapFrame();
        MapView mapView =mapFrame.getMapView();
                mapView.setBackground(new Color(255, 255, 255, 0));
                mapView.setBounds(0, 0, 1000, 1000);
                //使用shp最方便了,这儿有一个坑,就是你是用的shp可以通过他自带的软件加载显示才行,否则程序会异常,至于为啥有的shp不能加载,我也没搞清楚
            //反正这个坑让我趟过去了。
                try {
                        //读取边界层
                        VectorLayer clipLayer = MapDataManage.readMapFile_ShapeFile(boundShapeFilePath);
                        //读取地图层
                        VectorLayer bgLayer = MapDataManage.readMapFile_ShapeFile(bgShapeFilePath);
                        //获取站点数据
                        StationData stationData = getStationData();
//                       
                       
                        GridDataSetting gridDataSetting = new GridDataSetting();
                        gridDataSetting.dataExtent = clipLayer.getExtent();
                        stationData.projInfo = clipLayer.getProjInfo();
                        gridDataSetting.xNum = xNum;// 格点点数
                        gridDataSetting.yNum = yNum;// 格点点数
                       
                        InterpolationSetting interSet = new InterpolationSetting();
                       
                        interSet.setGridDataSetting(gridDataSetting);
                        if("IDW".equals(interpolationMethod)){
                                interSet.setInterpolationMethod(InterpolationMethods.IDW_Radius);
                        }else if("Cressman".equals(interpolationMethod)){
                                interSet.setInterpolationMethod(InterpolationMethods.Cressman);
                        }else if("AssignPointToGrid".equals(interpolationMethod)){
                                interSet.setInterpolationMethod(InterpolationMethods.AssignPointToGrid);
                        }else{
                                interSet.setInterpolationMethod(InterpolationMethods.IDW_Radius);
                        }

                        interSet.setRadius(5);
                        interSet.setMinPointNum(1);
                        GridData gridData = stationData.interpolateData(interSet);
                        //剔除无效值
                        gridData.missingValue = undefData;
                        double[] maxmin = new double[2];
                boolean hasUndef = gridData.getMaxMinValue(maxmin);
                LegendScheme legendScheme = LegendManage.createUniqValueLegendScheme(CValues, colors,
                                        ShapeTypes.Polyline, gridData.getMinValue(), gridData.getMaxValue(), hasUndef, gridData.missingValue);
                       
                        VectorLayer contourLayer = null;
                       
                        if(type.equals("Shaded")){
                                //生成色斑图
                                contourLayer = DrawMeteoData.createShadedLayer(gridData, legendScheme, "ContourLayer", "data",true);
                        }else if(type.equals("Contour")){
                                //生成等值线
                                if(types != null){
                                        for (int i = 0; i < types.length; i++) {
                                                PolylineBreak pb = (PolylineBreak)legendScheme.getLegendBreak(i);
                                                pb.setSize(types);
                                        }
                                }
                                contourLayer = DrawMeteoData.createContourLayer(gridData, legendScheme, "ContourLayer", "data",true);
                        }
                        VectorLayer lastLayer = contourLayer.clip(clipLayer);
                        lastLayer.setProjInfo(clipLayer.getProjInfo());
                        if(type.equals("Contour")){
                                //显示等值线的值
                                LabelSet lls = lastLayer.getLabelSet();
                                lls.setFieldName("data");
                                lls.setAvoidCollision(true);
                                lastLayer.addLabels();
                        }else{
                                //透明度
                                lastLayer.setTransparency(50);
                        }
                        mapView.addLayer(bgLayer);
                        mapView.addLayer(lastLayer);
                        mapView.setGridXDelt(1);
            mapView.setGridYDelt(1);
                        bgLayer.setTransparency(100);
                        //显示地图的文字,如市名
                        LabelSet ls = bgLayer.getLabelSet();
                        ls.setFieldName(bgShapeLableName);
                        ls.setAvoidCollision(true);
                        ls.setLabelFont(new Font("宋体", Font.PLAIN, 12));
                        //设置LabelSet后,必须要addLabels才能起作用
                        bgLayer.addLabels();
                       
                        if(type.equals("Shaded")){
                                //生成图例
                                LayoutLegend legend = layout.addLegend(60, 240);
                                legend.setLegendStyle(LegendStyles.Normal);
                                legend.setLegendLayer(lastLayer);
                                legend.setFont(new Font("宋体", Font.PLAIN, 12));
                                legend.setTitle(legendTitle);
                        }
                        layout.exportToPicture(exportPath);

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

新浪微博达人勋

 楼主| 发表于 2018-10-25 11:38:12 | 显示全部楼层
是因为  IDW插值方法和Cressman、AssignPointToGrid的插值方法所需要的数据格式不一样么?这个都用的同一数据。但是IDW出图正常其他两个插值方法就会出问题
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-10-25 11:39:05 | 显示全部楼层
有人来解答么
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-10-25 11:41:48 | 显示全部楼层

你可以先用MeteoInfo软件试试相关数据和功能,看看参数应该怎么设置
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-10-25 11:45:44 | 显示全部楼层
MeteoInfo 发表于 2018-10-25 11:41
你可以先用MeteoInfo软件试试相关数据和功能,看看参数应该怎么设置

额嗯、好的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-10-25 11:45:48 | 显示全部楼层
MeteoInfo 发表于 2018-10-25 11:41
你可以先用MeteoInfo软件试试相关数据和功能,看看参数应该怎么设置

额嗯、好的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-6-15 08:28:11 | 显示全部楼层
  stationData.projInfo = clipLayer.getProjInfo();这个 在我的工程里为什么是错误的 ,是应该引用那些包呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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