您的位置:首页 > 其它

用j2me开发GIS程序-读入数据1

2005-11-12 17:44 471 查看
地图数据加载类,作为测试只处理点
public class Loader extends Thread {

private static int iHeadBlockSize; // 文件头大小
private static int iDataSize; // 地图图形数量
private static int iCX = 59500; // 地图中心点X 重庆市区
private static int iCY = 67900; // 地图中心点Y 重庆市区

InputStream inputstream = null;

DataInputStream datainputstream = null;

Loader() {
}

// 在独立线程中读取地图文件,文件包含在Jar包中
public void run() {
MapMIDlet.canvas.points = readData("/res/hotal.bin");
}

/**
* 读取数据
*
* @param f
* @return
*/
private int[][] readData(String f) {

try {
inputstream = readFile(f);
datainputstream = new DataInputStream(inputstream);
} catch (Exception exception) {
return null;
}

try {
// 读取文件头
byte[] bs1 = new byte[4];
int iReadLength = 0;
iReadLength += datainputstream.read(bs1, 0, 4);
// System.out.println(new String(bs1));
iReadLength += datainputstream.read(bs1, 0, 4);
iHeadBlockSize = makeIntBigEndian(bs1, 0);
// System.out.println(iHeadBlockSize);
iReadLength += datainputstream.read(bs1, 0, 4);
// System.out.println(new String(bs1));
iReadLength += datainputstream.read(bs1, 0, 4);
// System.out.println(makeIntBigEndian(bs1, 0));
iReadLength += datainputstream.read(bs1, 0, 4);
// System.out.println(new String(bs1));
iReadLength += datainputstream.read(bs1, 0, 4);
// System.out.println(makeIntBigEndian(bs1, 0));
iReadLength += datainputstream.read(bs1, 0, 4);
// System.out.println(new String(bs1));
iReadLength += datainputstream.read(bs1, 0, 4);
// System.out.println(makeIntBigEndian(bs1, 0));
iReadLength += datainputstream.read(bs1, 0, 4);
// System.out.println(new String(bs1));
iReadLength += datainputstream.read(bs1, 0, 4);
iDataSize = makeIntBigEndian(bs1, 0);
// System.out.println(iDataSize);

//文件头占用128字节,跳过未用部分
datainputstream.skip(iHeadBlockSize - iReadLength);
// 读取文件体
int[][] mps = new int[iDataSize][2];
byte[] bs2 = new byte[8];
for (int i = 0; i < iDataSize; i++) {
datainputstream.read(bs2, 0, 8);
// System.out.println(makeIntBigEndian(bs2, 0));
// System.out.println(makeIntBigEndian(bs2, 4));
mps[i][0] = makeIntBigEndian(bs2, 0) - iCX;
//手机屏幕坐标与地理坐标Y轴反向
mps[i][1] = iCY - makeIntBigEndian(bs2, 4) ;
}

datainputstream.close();
inputstream.close();
datainputstream = null;
inputstream = null;
return mps;

} catch (Exception exception) {
exception.printStackTrace();
return null;
}
}

/**
* 将二进制转换为整形
*
* @param b
* @param off
* @return
*/
protected static int makeIntBigEndian(byte[] b, int off) {
return (int) (((((int) b[off + 0]) << 24) & 0xff000000)
| ((((int) b[off + 1]) << 16) & 0x00ff0000)
| ((((int) b[off + 2]) << 8) & 0x0000ff00) | (((int) b[off + 3]) & 0x000000ff));
}

/**
* 读取文件
*
* @param s
* @return
*/
private InputStream readFile(String s) {
try {
InputStream inputstream = getClass().getResourceAsStream(s);
return inputstream;
} catch (Exception exception) {
return null;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: