您的位置:首页 > 编程语言 > C#

C# 读取arcgis导出的栅格txt文档,并将没有值的像元插值

2016-12-06 12:56 561 查看
static void Main(string[] args)
{
float[,] data = new float[277, 216];
//读取TXT
StreamReader sr = new StreamReader(@"C:\island.txt", Encoding.Default);
String line;
//去除前六行信息文本
line = sr.ReadLine(); line = sr.ReadLine();
line = sr.ReadLine(); line = sr.ReadLine();
line = sr.ReadLine(); line = sr.ReadLine();
//将文本数据写入内存数组
int i = 0;
while ((line = sr.ReadLine()) != null)
{

string[] datas = line.ToString().Split(' ');

for (int j = 0; j < datas.Length - 1; j++)
{
data[i, j] = float.Parse(datas[j]);
}
i++;
}

dataDeal.Program p = new dataDeal.Program();
p.dataDeal1(data);

//输出文本
FileStream fs = new FileStream(@"C:\island1.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
//开始写入
for (int m = 0; m < 277; m++ )
{
string outLine = "";
for (int n = 0; n < 216; n++)
{
outLine = outLine + data[m, n].ToString() + " ";
}
sw.WriteLine(outLine);
}
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
}

void dataDeal1(float[,] data1)
{
bool isEND = true;   //是否结束本函数递归
for (int i = 0; i < 277; i++)
{
for (int j = 0; j < 216; j++)
{
if (data1[i, j] == -9999)
{
//邻值赋给无值像元
if (i - 1 > 0 && data1[i - 1, j] != -9999)
{
data1[i, j] = data1[i - 1, j];
continue;
}

if (i + 1 < 277 && data1[i + 1, j] != -9999)
{
data1[i, j] = data1[i + 1, j];
continue;
}

if (j - 1 > 0 && data1[i, j - 1] != -9999)
{
data1[i, j] = data1[i, j - 1];
continue;
}

if (j + 1 < 216 && data1[i, j + 1] != -9999)
{
data1[i, j] = data1[i, j + 1];
continue;
}
//递归不能结束
isEND = false;
}
}
}
//进行递归
if (isEND == false)
{
dataDeal1(data1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# arcgis