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

地图数据加载类,作为测试只处理点
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;
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值