code: private GeometryEnvelope readEnvelope(int envelopeIndicator,
  			ByteReader reader) {
  
  		GeometryEnvelope envelope = null;
  
  		if (envelopeIndicator > 0) {
  
  			// Read x and y values and create envelope
  			double minX = reader.readDouble();
  			double maxX = reader.readDouble();
  			double minY = reader.readDouble();
  			double maxY = reader.readDouble();
  
  			boolean hasZ = false;
  			Double minZ = null;
  			Double maxZ = null;
  
  			boolean hasM = false;
  			Double minM = null;
  			Double maxM = null;
  
  			// Read z values
  			if (envelopeIndicator == 2 || envelopeIndicator == 4) {
  				hasZ = true;
  				minZ = reader.readDouble();
  				maxZ = reader.readDouble();
  			}
  
  			// Read m values
  			if (envelopeIndicator == 3 || envelopeIndicator == 4) {
  				hasM = true;
  				minM = reader.readDouble();
  				maxM = reader.readDouble();
  			}
  
  			envelope = new GeometryEnvelope(hasZ, hasM);
  
  			envelope.setMinX(minX);
  			envelope.setMaxX(maxX);
  			envelope.setMinY(minY);
  			envelope.setMaxY(maxY);
  
  			if (hasZ) {
  				envelope.setMinZ(minZ);
  				envelope.setMaxZ(maxZ);
  			}
  
  			if (hasM) {
  				envelope.setMinM(minM);
  				envelope.setMaxM(maxM);
  			}
  		}
  
  		return envelope;
  	}
docs: Read the envelope based upon the indicator value
  
  @param envelopeIndicator
  envelope indicator
  @param reader
  byte reader
  @return geometry envelope