001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/io/shpapi/SHPEnvelope.java $ 002 003 /*---------------- FILE HEADER ------------------------------------------ 004 005 This file is part of deegree. 006 Copyright (C) 2001-2008 by: 007 EXSE, Department of Geography, University of Bonn 008 http://www.giub.uni-bonn.de/deegree/ 009 lat/lon GmbH 010 http://www.lat-lon.de 011 012 This library is free software; you can redistribute it and/or 013 modify it under the terms of the GNU Lesser General Public 014 License as published by the Free Software Foundation; either 015 version 2.1 of the License, or (at your option) any later version. 016 017 This library is distributed in the hope that it will be useful, 018 but WITHOUT ANY WARRANTY; without even the implied warranty of 019 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 020 Lesser General Public License for more details. 021 022 You should have received a copy of the GNU Lesser General Public 023 License along with this library; if not, write to the Free Software 024 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 025 026 Contact: 027 028 Andreas Poth 029 lat/lon GmbH 030 Aennchenstr. 19 031 53115 Bonn 032 Germany 033 E-Mail: poth@lat-lon.de 034 035 Prof. Dr. Klaus Greve 036 Department of Geography 037 University of Bonn 038 Meckenheimer Allee 166 039 53115 Bonn 040 Germany 041 E-Mail: greve@giub.uni-bonn.de 042 043 044 ---------------------------------------------------------------------------*/ 045 046 package org.deegree.io.shpapi; 047 048 049 import java.io.Serializable; 050 051 import org.deegree.model.spatialschema.ByteUtils; 052 053 /** 054 * Class representing a rectangle - envelope. 055 * 056 * <P> 057 * <B>Last changes<B>:<BR> 058 * 07.01.2000 ap: all methods copied from Rectangle.java<BR> 059 * 07.01.2000 ap: constructor renamed<BR> 060 * 17.01.2000 ap: constructor SHPEnvelope(ESRIBoundingBox Ebb) removed<BR> 061 * 17.01.2000 ap: constructor SHPEnvelope(SHPEnvelope env)implemented<BR> 062 * 01.08.2000 ap: method writeSHPEnvelope() added<BR> 063 * 064 * <!----------------------------------------------------------------------------> 065 * @version 01.08.2000 066 * @author Andreas Poth 067 * 068 */ 069 070 071 072 public class SHPEnvelope implements Serializable{ 073 074 /** 075 * this order: 076 * 077 * west, east, north, south 078 */ 079 080 // each double 8 byte distance, offset due to position in .shp-file-record 081 public static final int recWest= 4; 082 public static final int recSouth= 12; 083 public static final int recEast= 20; 084 public static final int recNorth= 28; 085 086 087 //west bounding coordinate 088 public double west; 089 //east bounding coordinate 090 public double east; 091 //north bounding coordinate 092 public double north; 093 //south bounding coordinate 094 public double south; 095 096 097 //------------- CONSTRUTOR IMPLEMENTATION BEGIN 098 public SHPEnvelope() { 099 100 west = 0.0; 101 east = 0.0; 102 north = 0.0; 103 south = 0.0; 104 105 } 106 107 108 public SHPEnvelope(double westbc, double eastbc, double northbc, double southbc) { 109 110 this.west= westbc; // west bounding coordinate 111 this.east= eastbc; // east bounding coordinate 112 this.north= northbc; // north bounding coordinate 113 this.south= southbc; // south bounding coordinate 114 115 } 116 117 /** 118 * Transform from WKBPoint to Rectangle 119 */ 120 public SHPEnvelope(SHPPoint min, SHPPoint max) { 121 122 //west bounding coordinate = minEsri.x 123 this.west= min.x; 124 //east bounding coordinate = maxEsri.x 125 this.east= max.x; 126 //north bounding coordinate = maxEsri.y 127 this.north= max.y; 128 //south bounding coordinate = minEsri.y 129 this.south= min.y; 130 131 } 132 133 /** 134 * create from an existing SHPEnvelope 135 */ 136 public SHPEnvelope(SHPEnvelope env) { 137 138 //west bounding coordinate = Ebb.min.x 139 this.west= env.west; 140 //east bounding coordinate = Ebb.max.x 141 this.east= env.east; 142 //north bounding coordinate = Ebb.max.y 143 this.north= env.north; 144 //south bounding coordinate = Ebb.min.y 145 this.south= env.south; 146 147 } 148 149 150 public SHPEnvelope(byte[] recBuf) { 151 152 //west bounding coordinate = xmin of rec-Box 153 this.west= ByteUtils.readLEDouble(recBuf, recWest); 154 //east bounding coordinate = xmax of rec-Box 155 this.east= ByteUtils.readLEDouble(recBuf, recEast); 156 //north bounding coordinate = ymax of rec-Box 157 this.north= ByteUtils.readLEDouble(recBuf, recNorth); 158 //south bounding coordinate = ymin of rec-Box 159 this.south= ByteUtils.readLEDouble(recBuf, recSouth); 160 161 } 162 163 public byte[] writeLESHPEnvelope() { 164 byte[] recBuf = new byte[8*4]; 165 //west bounding coordinate = xmin of rec-Box 166 ByteUtils.writeLEDouble(recBuf, 0, west); 167 //south bounding coordinate = ymin of rec-Box 168 ByteUtils.writeLEDouble(recBuf, 8, south); 169 //east bounding coordinate = xmax of rec-Box 170 ByteUtils.writeLEDouble(recBuf, 16, east); 171 //north bounding coordinate = ymax of rec-Box 172 ByteUtils.writeLEDouble(recBuf, 24, north); 173 174 return recBuf; 175 } 176 177 public byte[] writeBESHPEnvelope() { 178 byte[] recBuf = new byte[8*4]; 179 //west bounding coordinate = xmin of rec-Box 180 ByteUtils.writeBEDouble(recBuf, 0, west); 181 //south bounding coordinate = ymin of rec-Box 182 ByteUtils.writeBEDouble(recBuf, 8, south); 183 //east bounding coordinate = xmax of rec-Box 184 ByteUtils.writeBEDouble(recBuf, 16, east); 185 //north bounding coordinate = ymax of rec-Box 186 ByteUtils.writeLEDouble(recBuf, 24, north); 187 188 return recBuf; 189 } 190 191 192 //----------------- METHOD IMPLEMENTATION 193 public String toString() { 194 195 return "RECTANGLE" + 196 "\n[west: " + this.west + "]" + 197 "\n[east: " + this.east + "]" + 198 "\n[north: " + this.north + "]" + 199 "\n[south: " + this.south + "]" ; 200 201 } 202 203 204 205 }