中国地图
GIS探索者
地图网
GIS论坛
网站首页| GIS论坛 |新闻动态 | 技术专栏 | GIS书籍 | 资源下载 | 求职招聘 | 研究生考试 | GIS博客 | GIS空间站
欢迎光临GIS空间站!   网站地图
  专栏导航:| ArcGIS | MapInfo | TopMap | 地理信息 | 遥感 | GPS | 测绘 | WebGIS | LBS | 前沿 | 数据库 | 开发 | 行业应用
  推荐栏目:| AO开发 | 业界动态 | GIS资源 | 招聘信息 | 求职简历 | 共享软件 | 电子书籍 | 研究生考题 | 电子期刊 | GIS论文
您现在的位置: GIS空间站 >> 技术专栏 >> 软件开发 >> 文章正文

ArcInfoReader.java(源码共享)

作者:gml    文章来源:http://www.gischina.com/bbs/    点击数:    更新时间:2006-7-1
 

import java.io.*;
import java.util.Hashtable;

public class ArcInfoReader extends BufferedReader
{

public ArcInfoReader(Reader in)
{
super(in);
ignoreIDs = false;
sequentialID = 0;
}

public void setIgnoreIDs(boolean flag)
{
ignoreIDs = flag;
}

public final synchronized GeoPolygon readGeoPolygon()
throws IOException
{
GeoPolygon poly = null;
int id = 0;
float xcent = 0.0F;
float ycent = 0.0F;
String line = readLine();
String marker = line.substring(0, 3);
if(marker.equals("END"))
return null;
try
{
id = Integer.parseInt(line.substring(4, 10).trim());
if(id != 0xfffe7961)
{
sequentialID++;
if(ignoreIDs)
id = sequentialID;
xcent = (new Float(line.substring(11, 28).trim())).floatValue();
ycent = (new Float(line.substring(29, 44).trim())).floatValue();
}
else
{
id = 0xfffe7961;
xcent = 0.0F;
ycent = 0.0F;
System.out.println("!Null Polygon!");
}
double xpoints[] = new double[500];
double ypoints[] = new double[500];
int npoints = -1;
int limit = 500;
int grow = 20;
do
{
line = readLine();
if(line.substring(0, 3).trim().equals("END"))
break;
if(++npoints >= limit)
{
double xtemp[] = xpoints;
double ytemp[] = ypoints;
xpoints = new double[limit + grow];
ypoints = new double[limit + grow];
limit += grow;
System.arraycopy(xtemp, 0, xpoints, 0, npoints);
System.arraycopy(ytemp, 0, ypoints, 0, npoints);
}
float x = (new Float(line.substring(4, 18).trim())).floatValue();
float y = (new Float(line.substring(19, line.length()).trim())).floatValue();
xpoints[npoints] = x;
ypoints[npoints] = y;
}
while(true);
if(npoints < limit)
{
double xtemp[] = xpoints;
double ytemp[] = ypoints;
xpoints = new double[npoints];
ypoints = new double[npoints];
limit += grow;
System.arraycopy(xtemp, 0, xpoints, 0, npoints);
System.arraycopy(ytemp, 0, ypoints, 0, npoints);
}
return new GeoPolygon(id, xcent, ycent, xpoints, ypoints, npoints);
}
catch(NumberFormatException _ex)
{
System.err.println("Invalid Polygon ID");
}
return null;
}

public final synchronized PolygonLayer readUngenerateFile()
throws IOException
{
PolygonLayer map = new PolygonLayer();
do
{
GeoPolygon poly = readGeoPolygon();
if(poly != null)
map.addGeoPolygon(poly);
else
return map;
}
while(true);
}

public final synchronized Hashtable readAttributes()
throws IOException
{
Hashtable col = new Hashtable();
StreamTokenizer st = new StreamTokenizer(this);
st.eolIsSignificant(false);
st.whitespaceChars(44, 44);
for(boolean done = false; !done;)
{
int c = -1;
c = st.nextToken();
switch(c)
{
default:
break;

case -1:
done = true;
break;

case -2:
int id = (int)st.nval;
c = st.nextToken();
double value = (int)st.nval;
if(id > 0)
col.put(new Integer(id), new Double(value));
break;

}
}

return col;
}

public final synchronized GeoData readGeoData()
throws IOException
{
SimpleGeoData store = new SimpleGeoData();
StreamTokenizer st = new StreamTokenizer(this);
st.eolIsSignificant(false);
st.whitespaceChars(44, 44);
for(boolean done = false; !done;)
{
int c = -1;
c = st.nextToken();
switch(c)
{
default:
break;

case -1:
done = true;
break;

case -2:
int id = (int)st.nval;
c = st.nextToken();
if(c == -2)
{
double value = (int)st.nval;
store.setValue(id, value);
}
else
{
String text = st.sval;
store.setText(id, text);
}
break;

}
}

return store;
}

public final synchronized CircleLayer readCircles()
throws IOException
{
CircleLayer cl = new CircleLayer();
StreamTokenizer st = new StreamTokenizer(this);
st.eolIsSignificant(false);
st.whitespaceChars(44, 44);
for(boolean done = false; !done;)
{
int c = -1;
c = st.nextToken();
switch(c)
{
default:
break;

case -1:
done = true;
break;

case -2:
int id = (int)st.nval;
st.nextToken();
double x = st.nval;
st.nextToken();
double y = st.nval;
st.nextToken();
double r = st.nval;
if(id > 0)
cl.addGeoCircle(new GeoCircle(id, x, y, r));
break;

}
}

return cl;
}

public final synchronized Table readZdes()
throws IOException
{
Table t = new Table();
StreamTokenizer st = new StreamTokenizer(this);
st.eolIsSignificant(false);
st.whitespaceChars(44, 44);
boolean done = false;
st.nextToken();
int zones = (int)st.nval;
int j = 1;
while(!done)
{
j++;
Hashtable col = new Hashtable();
st.nextToken();
for(int i = 1; i < zones && !done; i++)
{
int c = -1;
c = st.nextToken();
switch(c)
{
case -1:
done = true;
break;

case -2:
double value = st.nval;
col.put(new Integer(i), new Double(value));
break;

}
}

t.addCol("" + j + " zones", col);
}

return t;
}

public final synchronized PolygonLayer readUngenerateFile2()
throws IOException
{
int id = 0;
float xcent = 0.0F;
float ycent = 0.0F;
double point[] = {
0.0D, 0.0D
};
int pair = 1;
double header[] = {
0.0D, 0.0D, 0.0D
};
int headerSegment = 0;
PolygonLayer map = new PolygonLayer();
GeoPolygon poly = null;
StreamTokenizer st = new StreamTokenizer(this);
st.eolIsSignificant(true);
boolean done = false;
boolean readingHeader = true;
while(!done)
{
int c = -1;
try
{
c = st.nextToken();
}
catch(IOException _ex)
{
break;
}
switch(c)
{
default:
break;

case -1:
done = true;
break;

case 10: // '\n'
if(readingHeader)
{
poly = new GeoPolygon(0xfffe7961, 0.0D, 0.0D);
readingHeader = false;
}
else
{
poly.addPoint(point[0], point[1]);
}
break;

case -3:
if(readingHeader)
{
done = true;
}
else
{
readingHeader = true;
headerSegment = 0;
map.addGeoPolygon(poly);
}
break;

case -2:
if(readingHeader)
{
header[headerSegment] = st.nval;
if(++headerSegment > 2)
{
poly = new GeoPolygon((int)header[0], (float)header[1], (float)header[2]);
readingHeader = false;
}
}
else
{
point[pair - 1] = st.nval;
pair = 3 - pair;
}
break;

}
}

return map;
}

boolean ignoreIDs;
int sequentialID;
}

文章录入:gissky    责任编辑:gissky  发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
■■相 关 图 书:
■■相 关 文 章:
  • Windows Vista下安装 ArcGis 9.2 的解决方法

  • vista下安装ArcGis9.2的解决办法

  • 《ArcGIS二次开发编程实例》

  • ArcGIS中图象配准经验总结

  • ArcGIS中对矢量和栅格数据进行裁剪切割的方法

  • 地理信息系统设计与实现-利用ArcGIS软件

  • [原创]ARCGIS9.0安装经验

  • 上一篇文章:

  • 下一篇文章:
  •  
    GIS博客精华
    热点文章
    热门资源
     
    关于我们 | 联系我们 | 广告服务 | 友情链接 | 申请链接 | 合作联盟 | 诚聘英才
      GIS空间站(GISSky.Net)版权所有 站长:兔八哥