用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;
}
}
}
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;
}
}
}
相关文章推荐
- 用j2me开发GIS程序-读入数据2
- 用j2me开发GIS程序-地图绘制2
- 用j2me开发GIS程序-地图绘制1
- 用j2me开发GIS程序-地图绘制2
- 请问大侠们用Moto lwt包开发的程序能否在其他支持J2me的手机上运行?
- 搞j2me开发的兄弟帮忙啊!我的程序怎么连接不了jsp啊!在线等待!马上给分!
- Eclipse开发J2ME程序之安装配置
- 【FreeMarker】【程序开发】数据模型,对象包装
- c/c++ 数据文件读入测试程序
- VC++利用socket开发udp数据接收程序的步骤(异步方式)
- J2ME程序开发新手入门要领
- J2ME程序开发新手入门要领
- J2ME程序开发全方位基础讲解汇总
- J2ME程序开发全方位基础讲解汇总
- 从零开始学微信小程序开发:4 美化UI界面 5 保存数据到本地
- 【文章汇总】J2ME程序开发全方位基础讲解
- 用J2ME MIDP开发无线应用程序
- 微信小程序数据绑定开发
- GIS程序开发-geoserver与OpenLayers配置入门
- iPhone开发技巧之数据篇(2)— iPhone程序中的加密处理