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