地理信息平台java源代码_ArcInfoReader.java(源码共享)

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值