MeteoInfo-Java解析與繪圖教程(五)
最近太忙了,終於有時間繼續寫了,上文說到了基本上的繪圖方法,但缺少色階呈現,一般圖疊加著地圖上,後端不需要管色階,但也要注意web頁面色階和我們的生成色階一定要對的上
對於後端匯出圖片的話,就需要新增色階了,這一文很簡單,就涉及色階,名稱,網格刻度線
順便對程式碼我進行了優化,看起來更直接
MeteoDataInfo meteoDataInfo = new MeteoDataInfo(); meteoDataInfo.openMICAPSData("D:\\解析資料\\cldas\\cldas\\TEM\\20081000.000"); GridData grid = meteoDataInfo.getGridData(); //讀取地圖A VectorLayer scmap = MapDataManage.readMapFile_ShapeFile("C:\\Users\\Administrator\\Downloads\\好例子網_全國省、縣界線shp格式向量圖(精確到縣區域)\\全國省、縣界線shp格式向量圖(精確到縣區域)\\sichuan.shp"); //讀取地圖B VectorLayer qgmap = MapDataManage.readMapFile_ShapeFile("E:\\shp\\四川\\四川省(3)_市界.shp"); //描述地圖邊界線 PolygonBreak pb = (PolygonBreak) qgmap.getLegendScheme().getLegendBreak(0); //是否設定填充 pb.setDrawFill(false); //設定輪廓顏色 pb.setOutlineColor(Color.black); //讀取色階 LegendScheme als = LgsUtil.readFromLgs("D:\\apache-tomcat-8.0.50\\alt色階\\TEM.lgs"); //繪製圖層 VectorLayer layer = DrawMeteoData.createShadedLayer(grid,als,"","",true); //建立檢視 MapView view = new MapView(); layer = layer.clip(scmap); //疊加圖層 view.addLayer(layer); view.addLayer(qgmap); //檢視設定 MapLayout layout = new MapLayout(); //去除圖形邊框 layout.getActiveMapFrame().setDrawNeatLine(true); //抗鋸齒 layout.getActiveMapFrame().setMapView(view); view.setAntiAlias(true); layout.setAntiAlias(true); //根據檢視計算檢視的寬高 Extent extent = view.getExtent(); int size = 800; Rectangle rectangle = new Rectangle(size, (int) (size * 1D / extent.getWidth() * extent.getHeight())); //設定地圖區域大小和外邊距 int width = rectangle.width; int left = 50; int height = rectangle.height; int right = 140; int top = 50; int bottom = 50; //設定頁面邊界 layout.setPageBounds(new Rectangle(0, 0, width + left + right, height + top + bottom)); //獲取地圖框 MapFrame frame = layout.getActiveMapFrame(); //設定佈局邊界 frame.setLayoutBounds(new Rectangle(left, top, width, height)); //繪製網格刻度線 frame.setDrawGridLine(true); //設定網格間隔值 frame.setGridXDelt(0.5); frame.setGridYDelt(0.5); //設定圖例 Rectangle bounds = layout.getActiveMapFrame().getLayoutBounds(); LayoutLegend legend = layout.addLegend(bounds.x + bounds.width + 15, 0); legend.setLegendStyle(LegendStyles.Normal); legend.setTop(bounds.y + (bounds.height - legend.getHeight()) / 2); legend.setLegendLayer(layer); //匯出 layout.exportToPicture(PathUtil.getDeskPath()+"/1.png");
以上的方法我只設定了刻度線和色階,其他的也很簡單,我在下面說明一下
標題設定-放到設定好檢視大小的後面 Rectangle bounds = layout.getActiveMapFrame().getLayoutBounds(); layout.addText(title, bounds.x + bounds.width / 2, y, 18);
到目前簡單的繪製與設定就沒有什麼可說的了,基本上的操作在文章裡都有了,都是一些樣式的東西,這些都是繪製已經進行插值的圖片,
但在開發中,我們也會遇到天擎和CIMISS直接返回的站點資料,這個怎麼繪製下一節說明一下,再後面的章節就是個別問題的研究了