Package org.geotools.geopkg.geom

Source Code of org.geotools.geopkg.geom.GeoPkgGeomWriter

package org.geotools.geopkg.geom;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.io.ByteOrderValues;
import com.vividsolutions.jts.io.OutStream;
import com.vividsolutions.jts.io.OutputStreamOutStream;
import com.vividsolutions.jts.io.WKBWriter;

public class GeoPkgGeomWriter {

    public byte[] write(Geometry g) throws IOException {
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        write(g, bout);
        return  bout.toByteArray();
    }

    public void write(Geometry g, OutputStream out) throws IOException {
        write(g, new OutputStreamOutStream(out));
        out.flush();
    }

    void write(Geometry g, OutStream out) throws IOException {
        if (g == null) {
            return;
        }

        Flags flags = new Flags((byte)0);
        flags.setVersion((byte)0);
        flags.setEndianess(ByteOrderValues.BIG_ENDIAN);
        flags.setEnvelopeIndicator(g instanceof Point ? EnvelopeType.NONE : EnvelopeType.XY);

        Header h = new Header();
        h.setVerison((byte)0);
        h.setFlags(flags);
        h.setEnvelope(g.getEnvelopeInternal());
        h.setSrid(g.getSRID());
       
        //write out magic + flags + srid + envelope
        byte[] buf = new byte[8];
        //byte[] buf = new byte[4 + 4 + flags.getEnvelopeIndicator().length];
        buf[0] = 0x47;
        buf[1] = 0x50;
        buf[2] = h.getVerison();
        buf[3] = flags.toByte();
        out.write(buf, 4);

        int order = flags.getEndianess();
        ByteOrderValues.putInt(g.getSRID(), buf, order);
        out.write(buf, 4);

        if (flags.getEnvelopeIndicator() != EnvelopeType.NONE) {
            Envelope env = g.getEnvelopeInternal();
            ByteOrderValues.putDouble(env.getMinX(), buf, order);
            out.write(buf, 8);
   
            ByteOrderValues.putDouble(env.getMaxX(), buf, order);
            out.write(buf, 8);
   
            ByteOrderValues.putDouble(env.getMinY(), buf, order);
            out.write(buf, 8);
           
            ByteOrderValues.putDouble(env.getMaxY(), buf, order);
            out.write(buf, 8);
        }
       
        //out.write(buf, buf.length);

        new WKBWriter(2, order).write(g, out);
    }
}
TOP

Related Classes of org.geotools.geopkg.geom.GeoPkgGeomWriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.