這些年作項目的時候,碰到等值面基本都是arcgis server來支撐的,經過構建GP服務,通常的都能知足作等值線和等值面的需求。但是忽然有一天,我發現若是沒有arcgis server 的話,我既然無法生成等值面等值線了。何況,還有許多別的要求:java
在氣象家園http://bbs.06climate.com/找到一個很不錯的解決方案,MeteoInfo,做者是一個很厲害的人,具體的不說了,你們能夠去看他的網站和博客,下面我說說如何使用他的類庫來進行等值面的生成。若是你們有很好的相似的庫,歡迎推薦給我,謝謝。linux
1:引用他的項目中的lib目錄中的jar包,生成窗口對象:windows
1 MapView mapView = new MapView(); 2 mapView.setBackground(new Color(255, 255, 255, 0)); 3 mapView.setBounds(0, 0, 200, 200); 4 VectorLayer clipLayer = MapDataManage.readMapFile_ShapeFile(「d:/chengdu.shp」); //剪切圖層,就是生成等值面的形狀範圍,//使用shp最方便了,這兒有一個坑,就是你是用的shp能夠經過他自帶的軟件加載顯示才行,不然程序會異常,至於爲啥有的shp不能加載,我也沒搞清楚//反正這個坑讓我趟過去了。2:添加站點信息,用於插值服務器
1 StationData stationData = new StationData(); 2 // 3 for(int i=0;i<10;i++) 4 { 5 stationData.addData("st"+i, 114+0.1*i, 35+0.1*i, i*10); //站點名稱,經度,維度,值 6 }
3:設定插值參數網站
1 GridDataSetting gridDataSetting = new GridDataSetting(); 2 gridDataSetting.dataExtent = clipLayer.getExtent(); 3 stationData.projInfo = clipLayer.getProjInfo(); 4 gridDataSetting.xNum = contourconfig.getGridx();// 格點點數 5 gridDataSetting.yNum = contourconfig.getGridy();// 格點點數 6 7 InterpolationSetting interSet = new InterpolationSetting(); 8 9 interSet.setGridDataSetting(gridDataSetting); 10 interSet.setInterpolationMethod(InterpolationMethods.IDW_Radius); 11 interSet.setRadius(5); 12 interSet.setMinPointNum(1); 13 GridData gridData = stationData.interpolateData(interSet); 14 15 LegendScheme legendScheme =LegendManage.createLegendSchemeFromGridData(gridData, LegendType.UniqueValue,ShapeTypes.Polygon);
4:插值生成圖層:1 VectorLayer contourLayer = DrawMeteoData.createShadedLayer(gridData, legendScheme, "ContourLayer", "Data", 2 true); 3 VectorLayer lastLayer = contourLayer.clip(clipLayer); 4 mapView.addLayer(lastLayer);
5:導出數據,能夠是kml或者png之類的圖片格式spa
1 mapView.exportToPicture(「d:/ddd.png」); //地圖導出爲圖片 2 //地圖導出爲kml 3 lastLayer.saveAsKMLFile(「d:/ddd.kml」);
這是使用這個作出的效果圖之一:code
瀏覽數據秀(dataxiu.com)網站,瞭解更多數據可視化方法技術。server