⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shapefilecrop.java

📁 openmap java写的开源数字地图程序. 用applet实现,可以像google map 那样放大缩小地图.
💻 JAVA
字号:
// **********************************************************************// // <copyright>// //  BBN Technologies//  10 Moulton Street//  Cambridge, MA 02138//  (617) 873-8000// //  Copyright (C) BBNT Solutions LLC. All rights reserved.// // </copyright>// **********************************************************************// // $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/layer/shape/ShapeFileCrop.java,v $// $RCSfile: ShapeFileCrop.java,v $// $Revision: 1.2.2.2 $// $Date: 2005/08/09 21:17:47 $// $Author: dietrick $// // **********************************************************************/* ShapeFileCrop class - written by Eliot T. Lebsack of the MITRE Corp. 10/16/2002. */package com.bbn.openmap.layer.shape;import java.io.*;/** * Class that supports cropping of ESRI Shapefiles with a simple * bounding box. Does not yet update the .shx or .dbf files. *  * <p> * <H2>Usage:</H2> * <DT>java com.bbn.openmap.layer.shape.ShapeFileCrop -ul lat,lon -lr * lat,lon -i srcShapeFile -o destShapeFile</DT> * <DD>Crops the srcShapeFile, dumps the output into destShapeFile. * </DD> * <DD>Note that this does simple rejection of entities based on * their bounding boxes.</DD> * <DD>A better scheme (unimplemented) would be to actually crop the * line segments.</DD> * <p> *  * @author Eliot Lebsack <elebsack@mitre.org> * @version $Revision: 1.2.2.2 $ $Date: 2005/08/09 21:17:47 $ */public class ShapeFileCrop {    /** Input ShapeFile object. */    public ShapeFile sfin = null;    /** Output ShapeFile object. */    public ShapeFile sfout = null;    /** Bounding Box Object used for cropping */    ESRIBoundingBox ebb = null;    /**     * Construct a <code>ShapeFileCrop</code> object from a pair of     * file names.     *      * @exception IOException if something goes wrong opening or     *            reading the file.     */    public ShapeFileCrop(String namein, String nameout) throws IOException {        sfin = new ShapeFile(namein);        sfout = new ShapeFile(nameout);    }    /**     * Read the input <code>ShapeFile</code> object, and apply     * cropping rules to the read entities. Writes the output     * <code>ShapeFile</code> object, and then invokes the     * <code>ShapeFile</code> .verify method to fix the output file     * header.     *      * @exception IOException if something goes wrong opening or     *            reading the file.     */    public void cropShapeFile() throws IOException {        ESRIPolygonRecord pr;        int nRecordNum = 0;        int nRecords = 0;        sfin.readHeader();        sfout.setShapeType(sfin.fileShapeType);        switch (sfin.fileShapeType) {        case (ShapeUtils.SHAPE_TYPE_ARC):        case (ShapeUtils.SHAPE_TYPE_POLYGON):            while ((pr = (ESRIPolygonRecord) sfin.getNextRecord()) != null) {                nRecords++;                if (overlapBBTest(pr.bounds) != 0) {                    pr.recordNumber = nRecordNum + 1;                    sfout.add(pr);                    nRecordNum++;                    nRecords++;                }            }        }        System.out.println("Number of input records = " + (nRecords + 1));        System.out.println("Number of candidate records = " + nRecordNum);        if (nRecordNum > 0)            sfout.verify(true, true);        sfin.close();        sfout.close();    }    private int overlapBBTest(ESRIBoundingBox bb) {        int result = 0;        result += boundaryTest(bb.min.x, bb.min.y);        result += boundaryTest(bb.max.x, bb.min.y);        result += boundaryTest(bb.min.x, bb.max.y);        result += boundaryTest(bb.max.x, bb.max.y);        return result;    }    private int boundaryTest(double x, double y) {        int ns = 0;        int ew = 0;        if ((x >= ebb.min.x) && (x < ebb.max.x))            ew++;        if ((y >= ebb.min.y) && (y < ebb.max.y))            ns++;        return ns * ew;    }    public static void usage() {        System.out.println("Usage: java ShapeFileCrop [args] -i <infile.shp> -o <outfile.shp>");        System.out.println("Arguments:");        System.out.println("-ul lat,lon     Coordinates of upper-left corner of the bounding box to use for cropping");        System.out.println("-lr lat,lon     Coordinates of lower-right corner of the bounding box to use for cropping");        System.exit(1);    }    /**     * The driver for the command line interface. Reads the command     * line arguments and executes appropriate calls.     * <p>     * See the file documentation for usage.     *      * @param args the command line arguments     * @exception IOException if something goes wrong reading or     *            writing the file     */    public static void main(String[] args) throws IOException {        String inpath = "";        String outpath = "";        String sllp;        String[] sllpa;        ShapeFileCrop sfc = null;        ESRIPoint ul = null;        ESRIPoint lr = null;        int index = 0;        for (int i = 0; i < args.length; i++) {            if (args[i].equals("-i")) {                inpath = args[++i];            } else if (args[i].equals("-o")) {                outpath = args[++i];            } else if (args[i].equals("-ul")) {                sllp = args[++i];                //              sllpa = sllp.split(","); // jdk 1.4                index = sllp.indexOf(",");                if (index != -1) {                    sllpa = new String[2];                    sllpa[0] = sllp.substring(0, index);                    sllpa[1] = sllp.substring(index + 1);                    ul = new ESRIPoint(Double.valueOf(sllpa[1]).doubleValue(), Double.valueOf(sllpa[0])                            .doubleValue());                }            } else if (args[i].equals("-lr")) {                sllp = args[++i];                //              sllpa = sllp.split(","); // jdk 1.4                index = sllp.indexOf(",");                if (index != -1) {                    sllpa = new String[2];                    sllpa[0] = sllp.substring(0, index);                    sllpa[1] = sllp.substring(index + 1);                    lr = new ESRIPoint(Double.valueOf(sllpa[1]).doubleValue(), Double.valueOf(sllpa[0])                            .doubleValue());                }            } else {                usage();            }        }        if ((ul == null) || (lr == null) || (inpath.equals(""))                || (outpath.equals(""))) {            usage();        } else {            sfc = new ShapeFileCrop(inpath, outpath);            sfc.ebb = new ESRIBoundingBox(ul, lr);        }        sfc.cropShapeFile();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -