java处理Arcgis导出的DEM栅格文件data.asc

 时间:2026-02-12 23:53:24

1、关于栅格数据文件

读者可用自己的

作者在百度云网盘分享了一个

dataDEM.asc

http://pan.baidu.com/s/1o61C7W2

java处理Arcgis导出的DEM栅格文件data.asc

java处理Arcgis导出的DEM栅格文件data.asc

2、【新建工程】

java处理Arcgis导出的DEM栅格文件data.asc

java处理Arcgis导出的DEM栅格文件data.asc

java处理Arcgis导出的DEM栅格文件data.asc

java处理Arcgis导出的DEM栅格文件data.asc

java处理Arcgis导出的DEM栅格文件data.asc

3、【定义一个栅格数据文件头的类】

public static class GridFileHead {

   public int ncols;

   public int nrows;

   public double xllcorner;

   public double yllcorner;

   public double cellsize;

   public int NODATA_value;

}

java处理Arcgis导出的DEM栅格文件data.asc

4、【解读文件头包含的信息】

包括这个文件的行数、列数

////////////////////////////////////////////////////////////////////////////////

//

////////////////////////////////////////////////////////////////////////////////

    public static GridFileHead ReadGridFileHead(String filePath){

    GridFileHead gridUnit=new GridFileHead();

        try{

            DataInputStream in=new DataInputStream(new FileInputStream(filePath));

            int fileSize=512;

            byte []btData=new byte[fileSize];

            in.read(btData);

            String str=new String(btData);

            String splitTab="\t";

            String []strData=str.split("\n");

            int tabIndex=strData[0].indexOf(splitTab);

            if(tabIndex==-1){

                splitTab=" ";

            }

            String []tempData=strData[0].split(splitTab);

            gridUnit.ncols=Integer.parseInt(tempData[tempData.length-1].trim());

            tempData=strData[1].split(splitTab);

            gridUnit.nrows=Integer.parseInt(tempData[tempData.length-1].trim());

            tempData=strData[2].split(splitTab);

            gridUnit.xllcorner=Double.parseDouble(tempData[tempData.length-1].trim());

            tempData=strData[3].split(splitTab);

            gridUnit.yllcorner=Double.parseDouble(tempData[tempData.length-1].trim());

            tempData=strData[4].split(splitTab);

            gridUnit.cellsize=Double.parseDouble(tempData[tempData.length-1].trim());

            tempData=strData[5].split(splitTab);

            gridUnit.NODATA_value=Integer.parseInt(tempData[tempData.length-1].trim());

            in.close();

        }

        catch(IOException ex){

        ex.printStackTrace();

        }

        return gridUnit;

    }

java处理Arcgis导出的DEM栅格文件data.asc

5、【读取栅格数据到一个二维浮点数组】

////////////////////////////////////////////////////////////////////////////////

//

////////////////////////////////////////////////////////////////////////////////

    public static double[][] readGridFileToDoubleArray2D(String filePath){

        double[][] resultData=null;

        try{

            DataInputStream in=new DataInputStream(new FileInputStream(filePath));

            int fileSize=in.available();

            byte []btData=new byte[fileSize];

            in.read(btData);

            String str=new String(btData);

            String splitTab="\t";

            String []strData=str.split("\n");

            int tabIndex=strData[0].indexOf(splitTab);

            if(tabIndex==-1){

                splitTab=" ";

            }

            String []tempData=strData[0].split(splitTab);

            int ncols=Integer.parseInt(tempData[tempData.length-1].trim());

            tempData=strData[1].split(splitTab);

            int nrows=Integer.parseInt(tempData[tempData.length-1].trim());

            resultData=new double[nrows][ncols];

            splitTab="\t";

            tabIndex=strData[6].indexOf(splitTab);

            if(tabIndex==-1){

                splitTab=" ";

            }

            for(int i=0;i<nrows;i++){

                tempData=strData[i+6].split(splitTab);

                for(int j=0;j<ncols;j++){

                    resultData[i][j] = Double.parseDouble(tempData[j]);

                }

            }

            in.close();

        }catch(IOException ex){

        ex.printStackTrace();

        }

        return resultData;

    }

java处理Arcgis导出的DEM栅格文件data.asc

6、【将运算或者其它处理完后的二维数组写入到新的文件】

////////////////////////////////////////////////////////////////////////////////

//

////////////////////////////////////////////////////////////////////////////////

    public static void  writeDoubleArray2DtoGridFile(

    String filePath,

    double[][]arrDouble2D,

    GridFileHead gridFileHead

    ){

   try{

    File hFileCreate = new File(filePath);

hFileCreate.createNewFile();

RandomAccessFile hFileWrite = new RandomAccessFile(filePath,"rw");

//写文件头

String strHead="ncols    "+gridFileHead.ncols+"\r\n"+

"nrows    "+gridFileHead.nrows+"\r\n"+

"xllcorner    "+gridFileHead.xllcorner+"\r\n"+

"yllcorner    "+gridFileHead.yllcorner+"\r\n"+

"cellsize    "+gridFileHead.cellsize+"\r\n"+

"NODATA_value    "+gridFileHead.NODATA_value+"\r\n";

hFileWrite.write((strHead).getBytes());

//写数据内容

for(int i=0;i<arrDouble2D.length;i++){

String line="";

for (int j = 0; j < arrDouble2D[i].length; j++) {

line+=arrDouble2D[i][j]+" ";

}

line+="\r\n";

hFileWrite.write((line).getBytes());

}

hFileWrite.close();

} catch (IOException e) {

e.printStackTrace();

}

    }

java处理Arcgis导出的DEM栅格文件data.asc

7、【编写主方法】

public static void main(String[] args) {

double[][]arrDouble2D=null;

String strInFileName=args[0];

String strOutFileName=strInFileName+"_out.asc";

GridFileHead gridFileHead=null;

//读取头文件

gridFileHead=ReadGridFileHead(strInFileName);

//!读取文件到2维双精度数组

arrDouble2D=readGridFileToDoubleArray2D(strInFileName);

//数组运算,处理

//写2维数组到文件

writeDoubleArray2DtoGridFile(strOutFileName, arrDouble2D,gridFileHead);

}

java处理Arcgis导出的DEM栅格文件data.asc

8、【导出为可运行的jar文件】

java处理Arcgis导出的DEM栅格文件data.asc

java处理Arcgis导出的DEM栅格文件data.asc

java处理Arcgis导出的DEM栅格文件data.asc

9、在命令行下测试、运行

java处理Arcgis导出的DEM栅格文件data.asc

  • 电脑怎么把几百个ts视频文件合并成一个
  • 修复ArcGIS图层中断开的数据链接方法
  • ArcGIS 教程之DEM( 高程)坡向分析
  • arcgis中使用Python窗口创建文件夹的方法
  • ArcGIS教程:3D 折线要素
  • 热门搜索
    淡奶油怎么保存 鼻涕有血丝怎么回事 有抬头纹怎么办 烫伤起泡怎么办 清蒸黄花鱼怎么做 笔记本怎么加内存条 两个路由器怎么桥接 怎么治疗狐臭 孕妇牙龈出血怎么办 孩子不吃饭怎么办