public override bool Equals(Object obj) { if (this == obj) { return(true); } else if (!(obj is SubFileParameter)) { return(false); } SubFileParameter other = (SubFileParameter)obj; if (this.StartAddress != other.StartAddress) { return(false); } else if (this.SubFileSize != other.SubFileSize) { return(false); } else if (this.BaseZoomLevel != other.BaseZoomLevel) { return(false); } return(true); }
private void updateZoomLevelInformation(SubFileParameter subFileParameter) { // update the global minimum and maximum zoom level information if (this.zoomLevelMinimum > subFileParameter.ZoomLevelMin) { this.zoomLevelMinimum = subFileParameter.ZoomLevelMin; } if (this.zoomLevelMaximum < subFileParameter.ZoomLevelMax) { this.zoomLevelMaximum = subFileParameter.ZoomLevelMax; } }
private void ReadSubFileParameters(BufferStream readBuffer, long fileSize, MapFileInfoBuilder mapFileInfoBuilder) { // get and check the number of sub-files (1 byte) byte numberOfSubFiles = (byte)readBuffer.ReadByte(); if (numberOfSubFiles < 1) { throw new System.IO.InvalidDataException("invalid number of sub-files: " + numberOfSubFiles); } mapFileInfoBuilder.numberOfSubFiles = numberOfSubFiles; SubFileParameter[] tempSubFileParameters = new SubFileParameter[numberOfSubFiles]; this.zoomLevelMinimum = byte.MaxValue; this.zoomLevelMaximum = byte.MinValue; // get and check the information for each sub-file for (byte currentSubFile = 0; currentSubFile < numberOfSubFiles; ++currentSubFile) { SubFileParameterBuilder subFileParameterBuilder = new SubFileParameterBuilder(); // get and check the base zoom level (1 byte) byte baseZoomLevel = (byte)readBuffer.ReadByte(); if (baseZoomLevel < 0 || baseZoomLevel > BASE_ZOOM_LEVEL_MAX) { throw new System.IO.InvalidDataException("invalid base zooom level: " + baseZoomLevel); } subFileParameterBuilder.baseZoomLevel = baseZoomLevel; // get and check the minimum zoom level (1 byte) byte zoomLevelMin = (byte)readBuffer.ReadByte(); if (zoomLevelMin < 0 || zoomLevelMin > 22) { throw new System.IO.InvalidDataException("invalid minimum zoom level: " + zoomLevelMin); } subFileParameterBuilder.zoomLevelMin = zoomLevelMin; // get and check the maximum zoom level (1 byte) byte zoomLevelMax = (byte)readBuffer.ReadByte(); if (zoomLevelMax < 0 || zoomLevelMax > 22) { throw new System.IO.InvalidDataException("invalid maximum zoom level: " + zoomLevelMax); } subFileParameterBuilder.zoomLevelMax = zoomLevelMax; // check for valid zoom level range if (zoomLevelMin > zoomLevelMax) { throw new System.IO.InvalidDataException("invalid zoom level range: " + zoomLevelMin + SPACE + zoomLevelMax); } // get and check the start address of the sub-file (8 bytes) long startAddress = readBuffer.ReadLong(); if (startAddress < HEADER_SIZE_MIN || startAddress >= fileSize) { throw new System.IO.InvalidDataException("invalid start address: " + startAddress); } subFileParameterBuilder.startAddress = startAddress; long indexStartAddress = startAddress; if (mapFileInfoBuilder.optionalFields.isDebugFile) { // the sub-file has an index signature before the index indexStartAddress += SIGNATURE_LENGTH_INDEX; } subFileParameterBuilder.indexStartAddress = indexStartAddress; // get and check the size of the sub-file (8 bytes) long subFileSize = readBuffer.ReadLong(); if (subFileSize < 1) { throw new System.IO.InvalidDataException("invalid sub-file size: " + subFileSize); } subFileParameterBuilder.subFileSize = subFileSize; subFileParameterBuilder.boundingBox = mapFileInfoBuilder.boundingBox; // add the current sub-file to the list of sub-files tempSubFileParameters[currentSubFile] = subFileParameterBuilder.build(mapFileInfoBuilder.Projection); updateZoomLevelInformation(tempSubFileParameters[currentSubFile]); } // create and fill the lookup table for the sub-files this.subFileParameters = new SubFileParameter[this.zoomLevelMaximum + 1]; for (int currentMapFile = 0; currentMapFile < numberOfSubFiles; ++currentMapFile) { SubFileParameter subFileParameter = tempSubFileParameters[currentMapFile]; for (byte zoomLevel = subFileParameter.ZoomLevelMin; zoomLevel <= subFileParameter.ZoomLevelMax; ++zoomLevel) { this.subFileParameters[zoomLevel] = subFileParameter; } } }