00001 /* 00002 * The information in this file is 00003 * Copyright(c) 2007 Ball Aerospace & Technologies Corporation 00004 * and is subject to the terms and conditions of the 00005 * GNU Lesser General Public License Version 2.1 00006 * The license text is available from 00007 * http://www.gnu.org/licenses/lgpl.html 00008 */ 00009 00010 #ifndef RASTERDATAFILEDESCRIPTOR_H 00011 #define RASTERDATAFILEDESCRIPTOR_H 00012 00013 #include "FileDescriptor.h" 00014 #include "DimensionDescriptor.h" 00015 #include "GcpList.h" 00016 00017 #include <list> 00018 #include <vector> 00019 00020 class Units; 00021 00022 /** 00023 * Describes how a raster data element is stored in a file on disk. 00024 * 00025 * In addition to the information stored in the FileDescriptor base class, 00026 * this class contains information pertinent to how raster data elements 00027 * are stored in files on disk. 00028 * 00029 * This subclass of Subject will notify upon the following conditions: 00030 * - The following methods are called: setHeaderBytes(), setTrailerBytes(), 00031 * setPrelineBytes(), setPostlineBytes(), setPrebandBytes(), 00032 * setPostbandBytes(), setBitsPerElement(), setInterleaveFormat(), 00033 * setRows(), setColumns(), setBands(), setXPixelSize(), setYPixelSize(), 00034 * setUnits(), setGcps(), setBandFiles() 00035 * - Everything else documented in FileDescriptor. 00036 * 00037 * @see RasterElement, RasterDataDescriptor 00038 */ 00039 class RasterFileDescriptor : public FileDescriptor 00040 { 00041 public: 00042 /** 00043 * Emitted when the rows change with 00044 * boost::any<std::vector<\link DimensionDescriptor\endlink> > containing 00045 * the new rows. 00046 * 00047 * @see setRows() 00048 */ 00049 SIGNAL_METHOD(RasterFileDescriptor, RowsChanged) 00050 00051 /** 00052 * Emitted when the columns change with 00053 * boost::any<std::vector<\link DimensionDescriptor\endlink> > containing 00054 * the new columns. 00055 * 00056 * @see setColumns() 00057 */ 00058 SIGNAL_METHOD(RasterFileDescriptor, ColumnsChanged) 00059 00060 /** 00061 * Emitted when the bands change with 00062 * boost::any<std::vector<\link DimensionDescriptor\endlink> > containing 00063 * the new bands. 00064 * 00065 * @see setBands() 00066 */ 00067 SIGNAL_METHOD(RasterFileDescriptor, BandsChanged) 00068 00069 /** 00070 * Emitted when the number of bits per element changes with 00071 * boost::any<unsigned int> containing the new number of bits per element. 00072 * 00073 * @see setBitsPerElement() 00074 */ 00075 SIGNAL_METHOD(RasterFileDescriptor, BitsPerElementChanged) 00076 00077 /** 00078 * Emitted when the number of header bytes changes with 00079 * boost::any<unsigned int> containing the new number of header bytes. 00080 * 00081 * @see setHeaderBytes() 00082 */ 00083 SIGNAL_METHOD(RasterFileDescriptor, HeaderBytesChanged) 00084 00085 /** 00086 * Emitted when the number of trailer bytes changes with 00087 * boost::any<unsigned int> containing the new number of trailer bytes. 00088 * 00089 * @see setTrailerBytes() 00090 */ 00091 SIGNAL_METHOD(RasterFileDescriptor, TrailerBytesChanged) 00092 00093 /** 00094 * Emitted when the number of preline bytes changes with 00095 * boost::any<unsigned int> containing the new number of preline bytes. 00096 * 00097 * @see setPrelineBytes() 00098 */ 00099 SIGNAL_METHOD(RasterFileDescriptor, PrelineBytesChanged) 00100 00101 /** 00102 * Emitted when the number of postline bytes changes with 00103 * boost::any<unsigned int> containing the new number of postline bytes. 00104 * 00105 * @see setPostlineBytes() 00106 */ 00107 SIGNAL_METHOD(RasterFileDescriptor, PostlineBytesChanged) 00108 00109 /** 00110 * Emitted when the number of preband bytes changes with 00111 * boost::any<unsigned int> containing the new number of preband bytes. 00112 * 00113 * @see setPrebandBytes() 00114 */ 00115 SIGNAL_METHOD(RasterFileDescriptor, PrebandBytesChanged) 00116 00117 /** 00118 * Emitted when the number of postband bytes changes with 00119 * boost::any<unsigned int> containing the new number of postband bytes. 00120 * 00121 * @see setPostbandBytes() 00122 */ 00123 SIGNAL_METHOD(RasterFileDescriptor, PostbandBytesChanged) 00124 00125 /** 00126 * Emitted when the interleave format changes with 00127 * boost::any<\link ::InterleaveFormatType InterleaveFormatType\endlink> 00128 * containing the new interleave format. 00129 * 00130 * @see setInterleaveFormat() 00131 */ 00132 SIGNAL_METHOD(RasterFileDescriptor, InterleaveFormatChanged) 00133 00134 /** 00135 * Emitted when the band files change with 00136 * boost::any<std::vector<const \link Filename\endlink*> > containing the 00137 * new band files. 00138 * 00139 * @see setBandFiles() 00140 */ 00141 SIGNAL_METHOD(RasterFileDescriptor, BandFilesChanged) 00142 00143 /** 00144 * Emitted when the X or Y pixel size changes. 00145 * 00146 * No value is associated with this signal. 00147 * 00148 * @see setXPixelSize(), setYPixelSize() 00149 */ 00150 SIGNAL_METHOD(RasterFileDescriptor, PixelSizeChanged) 00151 00152 /** 00153 * Emitted when the GCPs change with 00154 * boost::any<std::list<\link GcpPoint\endlink> > containing the new GCPs. 00155 * 00156 * @see setGcps() 00157 */ 00158 SIGNAL_METHOD(RasterFileDescriptor, GcpsChanged) 00159 00160 /** 00161 * Sets the number of file header bytes. 00162 * 00163 * @param bytes 00164 * The number of bytes allocated for header information in the 00165 * data set file. 00166 * 00167 * @notify This method notifies signalHeaderBytesChanged() if the given 00168 * number of header bytes is different than the current number of 00169 * header bytes. 00170 */ 00171 virtual void setHeaderBytes(unsigned int bytes) = 0; 00172 00173 /** 00174 * Returns the number of file header bytes. 00175 * 00176 * @return The number of bytes allocated for header information in the 00177 * data set file. 00178 */ 00179 virtual unsigned int getHeaderBytes() const = 0; 00180 00181 /** 00182 * Sets the number of file trailer bytes. 00183 * 00184 * @param bytes 00185 * The number of bytes allocated for trailer information in the 00186 * data set file. 00187 * 00188 * @notify This method notifies signalTrailerBytesChanged() if the given 00189 * number of trailer bytes is different than the current number of 00190 * trailer bytes. 00191 */ 00192 virtual void setTrailerBytes(unsigned int bytes) = 0; 00193 00194 /** 00195 * Returns the number of file trailer bytes. 00196 * 00197 * @return The number of bytes allocated for trailer information in the 00198 * data set file. 00199 */ 00200 virtual unsigned int getTrailerBytes() const = 0; 00201 00202 /** 00203 * Sets the number of preline bytes. 00204 * 00205 * Preline bytes refer to the number of bytes preceding each line of data 00206 * values in the data file. Preline bytes apply to files with data stored 00207 * in any interleave format. 00208 * 00209 * @param bytes 00210 * The number of bytes allocated preceding each line of data 00211 * values in the data set file. 00212 * 00213 * @notify This method notifies signalPrelineBytesChanged() if the given 00214 * number of preline bytes is different than the current number of 00215 * preline bytes. 00216 */ 00217 virtual void setPrelineBytes(unsigned int bytes) = 0; 00218 00219 /** 00220 * Returns the number of preline bytes. 00221 * 00222 * Preline bytes refer to the number of bytes preceding each line of data 00223 * values in the data file. Preline bytes apply to files with data stored 00224 * in any interleave format. 00225 * 00226 * @return The number of bytes allocated preceding each line of data 00227 * values in the data set file. 00228 */ 00229 virtual unsigned int getPrelineBytes() const = 0; 00230 00231 /** 00232 * Sets the number of postline bytes. 00233 * 00234 * Postline bytes refer to the number of bytes following each line of data 00235 * values in the data file. Postline bytes apply to files with data stored 00236 * in any interleave format. 00237 * 00238 * @param bytes 00239 * The number of bytes allocated following each line of data 00240 * values in the data set file. 00241 * 00242 * @notify This method notifies signalPostlineBytesChanged() if the given 00243 * number of postline bytes is different than the current number of 00244 * postline bytes. 00245 */ 00246 virtual void setPostlineBytes(unsigned int bytes) = 0; 00247 00248 /** 00249 * Returns the number of postline bytes. 00250 * 00251 * Postline bytes refer to the number of bytes following each line of data 00252 * values in the data file. Postline bytes apply to files with data stored 00253 * in any interleave format. 00254 * 00255 * @return The number of bytes allocated following each line of data 00256 * values in the data set file. 00257 */ 00258 virtual unsigned int getPostlineBytes() const = 0; 00259 00260 /** 00261 * Sets the number of preband bytes. 00262 * 00263 * Preband bytes refer to the number of bytes preceding each band of data 00264 * values in the data file. Preband bytes apply only to files with data 00265 * stored in the BSQ interleave format with all bands stored in a single 00266 * file. 00267 * 00268 * @param bytes 00269 * The number of bytes allocated preceding each band of data 00270 * values in the data set file. 00271 * 00272 * @notify This method notifies signalPrebandBytesChanged() if the given 00273 * number of preband bytes is different than the current number of 00274 * preband bytes. 00275 * 00276 * @see InterleaveFormatType 00277 */ 00278 virtual void setPrebandBytes(unsigned int bytes) = 0; 00279 00280 /** 00281 * Returns the number of preband bytes. 00282 * 00283 * Preband bytes refer to the number of bytes preceding each band of data 00284 * values in the data file. Preband bytes apply only to files with data 00285 * stored in the BSQ interleave format with all bands stored in a single 00286 * file. 00287 * 00288 * @return The number of bytes allocated preceding each band of data 00289 * values in the data set file. 00290 * 00291 * @see InterleaveFormatType 00292 */ 00293 virtual unsigned int getPrebandBytes() const = 0; 00294 00295 /** 00296 * Sets the number of postband bytes. 00297 * 00298 * Postband bytes refer to the number of bytes following each band of data 00299 * values in the data file. Postband bytes apply only to files with data 00300 * stored in the BSQ interleave format with all bands stored in a single 00301 * file. 00302 * 00303 * @param bytes 00304 * The number of bytes allocated following each band of data 00305 * values in the data set file. 00306 * 00307 * @notify This method notifies signalPostbandBytesChanged() if the given 00308 * number of postband bytes is different than the current number of 00309 * postband bytes. 00310 * 00311 * @see InterleaveFormatType 00312 */ 00313 virtual void setPostbandBytes(unsigned int bytes) = 0; 00314 00315 /** 00316 * Returns the number of postband bytes. 00317 * 00318 * Postband bytes refer to the number of bytes following each band of data 00319 * values in the data file. Postband bytes apply only to files with data 00320 * stored in the BSQ interleave format with all bands stored in a single 00321 * file. 00322 * 00323 * @return The number of bytes allocated following each band of data 00324 * values in the data set file. 00325 * 00326 * @see InterleaveFormatType 00327 */ 00328 virtual unsigned int getPostbandBytes() const = 0; 00329 00330 /** 00331 * Sets the interleave format of the data. 00332 * 00333 * @param format 00334 * The interleave format in which the values in the data set are 00335 * stored in the file on disk. 00336 * 00337 * @notify This method notifies signalInterleaveFormatChanged() if the 00338 * given interleave format is different than the current interleave 00339 * format. 00340 */ 00341 virtual void setInterleaveFormat(InterleaveFormatType format) = 0; 00342 00343 /** 00344 * Returns the interleave format of the data. 00345 * 00346 * @return The interleave format in which the values in the data set are 00347 * stored in the file on disk. 00348 */ 00349 virtual InterleaveFormatType getInterleaveFormat() const = 0; 00350 00351 /** 00352 * Sets the filenames for each band of a BSQ multiple-file data set. 00353 * 00354 * Band files apply only to data sets stored in the BSQ interleave format 00355 * with each band stored in a separate file. 00356 * 00357 * This is a convenience method that calls the 00358 * setBandFiles(const std::vector<const Filename*>&) method. 00359 * 00360 * @param bandFiles 00361 * The filenames for each band of data of a BSQ multiple-file data 00362 * set. 00363 * 00364 * @notify This method notifies signalBandFilesChanged() if the 00365 * given band files are different than the current band files. 00366 * 00367 * @see InterleaveFormatType 00368 */ 00369 virtual void setBandFiles(const std::vector<std::string>& bandFiles) = 0; 00370 00371 /** 00372 * Sets the filenames for each band of a BSQ multiple-file data set. 00373 * 00374 * Band files apply only to data sets stored in the BSQ interleave format 00375 * with each band stored in a separate file. 00376 * 00377 * @param bandFiles 00378 * The filenames for each band of data of a BSQ multiple-file data 00379 * set. 00380 * 00381 * @notify This method notifies signalBandFilesChanged() if the 00382 * given band files are different than the current band files. 00383 * 00384 * @see InterleaveFormatType 00385 */ 00386 virtual void setBandFiles(const std::vector<const Filename*>& bandFiles) = 0; 00387 00388 /** 00389 * Returns the filenames for each band of a BSQ multiple-file data set. 00390 * 00391 * Band files apply only to data sets stored in the BSQ interleave format 00392 * with each band stored in a separate file. 00393 * 00394 * @return The filenames for each band of data of a BSQ multiple-file data 00395 * set. 00396 * 00397 * @see InterleaveFormatType 00398 */ 00399 virtual const std::vector<const Filename*>& getBandFiles() const = 0; 00400 00401 /** 00402 * Sets the number of bits used for each pixel element value. 00403 * 00404 * @param numBits 00405 * The number of bits per element. 00406 * 00407 * @notify This method notifies signalBitsPerElementChanged() if the given 00408 * number of bits per element is different than the current number 00409 * of bits per element. 00410 */ 00411 virtual void setBitsPerElement(unsigned int numBits) = 0; 00412 00413 /** 00414 * Returns the number of bits used for each pixel element value. 00415 * 00416 * @return The number of bits per element. 00417 */ 00418 virtual unsigned int getBitsPerElement() const = 0; 00419 00420 /** 00421 * Sets the rows for the data as they are stored in the file on disk. 00422 * 00423 * These rows may differ from the rows in a corresponding 00424 * RasterDataDescriptor in that they contain row objects for each row in 00425 * the file on disk regardless of the imported rows. 00426 * 00427 * @param rows 00428 * A vector of DimensionDescriptors containing one 00429 * instance for each row of data in the file on disk. 00430 * 00431 * @notify This method notifies signalRowsChanged() if the given rows are 00432 * different than the current rows. 00433 * 00434 * @see DimensionDescriptor 00435 */ 00436 virtual void setRows(const std::vector<DimensionDescriptor>& rows) = 0; 00437 00438 /** 00439 * Returns the rows for the data as they are stored in the file on disk. 00440 * 00441 * @return A vector of DimensionDescriptors containing one 00442 * instance for each row of data in the file on disk. 00443 */ 00444 virtual const std::vector<DimensionDescriptor>& getRows() const = 0; 00445 00446 /** 00447 * Returns the row object containing a given original number. 00448 * 00449 * @param originalNumber 00450 * The zero-based original number for which to get the row object. 00451 * 00452 * @return The row object that has the given original number. An invalid 00453 * DimensionDescriptor is returned if a row object does not exist 00454 * with the given original number. 00455 */ 00456 virtual DimensionDescriptor getOriginalRow(unsigned int originalNumber) const = 0; 00457 00458 /** 00459 * Returns the row object containing a given on-disk number. 00460 * 00461 * @param onDiskNumber 00462 * The zero-based on-disk number for which to get the row object. 00463 * 00464 * @return The row object that has the given on-disk number. An invalid 00465 * DimensionDescriptor is returned if a row object does not exist 00466 * with the given on-disk number. 00467 */ 00468 virtual DimensionDescriptor getOnDiskRow(unsigned int onDiskNumber) const = 0; 00469 00470 /** 00471 * Returns the row object containing a given active number. 00472 * 00473 * @param activeNumber 00474 * The zero-based active number for which to get the row object. 00475 * 00476 * @return The row object that has the given active number. An invalid 00477 * DimensionDescriptor is returned if a row object does not exist 00478 * with the given active number. 00479 */ 00480 virtual DimensionDescriptor getActiveRow(unsigned int activeNumber) const = 0; 00481 00482 /** 00483 * Returns the number of rows as they are stored in the file on disk. 00484 * 00485 * This is a convenience method that returns getRows().size(). 00486 * 00487 * @return The number of rows as they are stored in the file on disk. 00488 */ 00489 virtual unsigned int getRowCount() const = 0; 00490 00491 /** 00492 * Sets the columns for the data as they are stored in the file on disk. 00493 * 00494 * These columns may differ from the columns in a corresponding 00495 * RasterDataDescriptor in that they contain columns objects for each column 00496 * in the file on disk regardless of the imported columns. 00497 * 00498 * @param columns 00499 * A vector of DimensionDescriptors containing one 00500 * instance for each column of data in the file on disk. 00501 * 00502 * @notify This method notifies signalColumnsChanged() if the given columns 00503 * are different than the current columns. 00504 * 00505 * @see DimensionDescriptor 00506 */ 00507 virtual void setColumns(const std::vector<DimensionDescriptor>& columns) = 0; 00508 00509 /** 00510 * Returns the columns for the data as they are stored in the file on disk. 00511 * 00512 * @return A vector of DimensionDescriptors containing one 00513 * instance for each column of data in the file on disk. 00514 */ 00515 virtual const std::vector<DimensionDescriptor>& getColumns() const = 0; 00516 00517 /** 00518 * Returns the column object containing a given original number. 00519 * 00520 * @param originalNumber 00521 * The zero-based original number for which to get the column 00522 * object. 00523 * 00524 * @return The column object that has the given original number. An invalid 00525 * DimensionDescriptor is returned if a column object does not exist 00526 * with the given original number. 00527 */ 00528 virtual DimensionDescriptor getOriginalColumn(unsigned int originalNumber) const = 0; 00529 00530 /** 00531 * Returns the column object containing a given on-disk number. 00532 * 00533 * @param onDiskNumber 00534 * The zero-based on-disk number for which to get the column 00535 * object. 00536 * 00537 * @return The column object that has the given on-disk number. An invalid 00538 * DimensionDescriptor is returned if a column object does not exist 00539 * with the given on-disk number. 00540 */ 00541 virtual DimensionDescriptor getOnDiskColumn(unsigned int onDiskNumber) const = 0; 00542 00543 /** 00544 * Returns the column object containing a given active number. 00545 * 00546 * @param activeNumber 00547 * The zero-based active number for which to get the column 00548 * object. 00549 * 00550 * @return The column object that has the given active number. An invalid 00551 * DimensionDescriptor is returned if a column object does not exist 00552 * with the given active number. 00553 */ 00554 virtual DimensionDescriptor getActiveColumn(unsigned int activeNumber) const = 0; 00555 00556 /** 00557 * Returns the number of columns as they are stored in the file on disk. 00558 * 00559 * This is a convenience method that returns getColumns().size(). 00560 * 00561 * @return The number of columns as they are stored in the file on disk. 00562 */ 00563 virtual unsigned int getColumnCount() const = 0; 00564 00565 /** 00566 * Sets the bands for the data as they are stored in the file on disk. 00567 * 00568 * These bands may differ from the bands in a corresponding 00569 * RasterDataDescriptor in that they contain band objects for each band in 00570 * the file on disk regardless of the imported bands. 00571 * 00572 * @param bands 00573 * A vector of DimensionDescriptors containing one 00574 * instance for each band of data in the file on disk. 00575 * 00576 * @notify This method notifies signalBandsChanged() if the given bands 00577 * are different than the current bands. 00578 * 00579 * @see DimensionDescriptor 00580 */ 00581 virtual void setBands(const std::vector<DimensionDescriptor>& bands) = 0; 00582 00583 /** 00584 * Returns the bands for the data as they are stored in the file on disk. 00585 * 00586 * @return A vector of DimensionDescriptors containing one 00587 * instance for each band of data in the file on disk. 00588 */ 00589 virtual const std::vector<DimensionDescriptor>& getBands() const = 0; 00590 00591 /** 00592 * Returns the band object containing a given original number. 00593 * 00594 * @param originalNumber 00595 * The zero-based original number for which to get the band 00596 * object. 00597 * 00598 * @return The band object that has the given original number. An invalid 00599 * DimensionDescriptor is returned if a band object does not exist 00600 * with the given original number. 00601 */ 00602 virtual DimensionDescriptor getOriginalBand(unsigned int originalNumber) const = 0; 00603 00604 /** 00605 * Returns the band object containing a given on-disk number. 00606 * 00607 * @param onDiskNumber 00608 * The zero-based on-disk number for which to get the band object. 00609 * 00610 * @return The band object that has the given on-disk number. An invalid 00611 * DimensionDescriptor is returned if a band object does not exist 00612 * with the given on-disk number. 00613 */ 00614 virtual DimensionDescriptor getOnDiskBand(unsigned int onDiskNumber) const = 0; 00615 00616 /** 00617 * Returns the band object containing a given active number. 00618 * 00619 * @param activeNumber 00620 * The zero-based active number for which to get the band object. 00621 * 00622 * @return The band object that has the given active number. An invalid 00623 * DimensionDescriptor is returned if a band object does not exist 00624 * with the given active number. 00625 */ 00626 virtual DimensionDescriptor getActiveBand(unsigned int activeNumber) const = 0; 00627 00628 /** 00629 * Returns the number of bands as they are stored in the file on disk. 00630 * 00631 * This is a convenience method that returns getBands().size(). 00632 * 00633 * @return The number of bands as they are stored in the file on disk. 00634 */ 00635 virtual unsigned int getBandCount() const = 0; 00636 00637 /** 00638 * Sets the pixel size of each column in the data set. 00639 * 00640 * By default, each row and column has a pixel size of 1.0, thereby 00641 * producing a size ratio of 1.0, which indicates that the pixel appears 00642 * as a square in the view. Calling this method with a value other than 00643 * 1.0 allows for non-square pixels, which may represent the true nature 00644 * of the data. 00645 * 00646 * @param pixelSize 00647 * The pixel size for each column in the data set. 00648 * 00649 * @notify This method notifies signalPixelSizeChanged() if the given 00650 * column pixel size is different than the current column pixel 00651 * size. 00652 */ 00653 virtual void setXPixelSize(double pixelSize) = 0; 00654 00655 /** 00656 * Returns the pixel size of each column in the data set. 00657 * 00658 * @return The column pixel size. 00659 * 00660 * @see setXPixelSize() 00661 */ 00662 virtual double getXPixelSize() const = 0; 00663 00664 /** 00665 * Sets the pixel size of each row in the data set. 00666 * 00667 * By default, each row and column has a pixel size of 1.0, thereby 00668 * producing a size ratio of 1.0, which indicates that the pixel appears 00669 * as a square in the view. Calling this method with a value other than 00670 * 1.0 allows for non-square pixels, which may represent the true nature 00671 * of the data. 00672 * 00673 * @param pixelSize 00674 * The pixel size for each row in the data set. 00675 * 00676 * @notify This method notifies signalPixelSizeChanged() if the given 00677 * row pixel size is different than the current row pixel size. 00678 */ 00679 virtual void setYPixelSize(double pixelSize) = 0; 00680 00681 /** 00682 * Returns the pixel size of each row in the data set. 00683 * 00684 * @return The row pixel size. 00685 * 00686 * @see setYPixelSize() 00687 */ 00688 virtual double getYPixelSize() const = 0; 00689 00690 /** 00691 * Sets the units the values in the data set. 00692 * 00693 * @param pUnits 00694 * The units of the values in the data set. 00695 * 00696 * @notify This method notifies Subject::signalModified() if the given 00697 * units object is different than the current units object. 00698 */ 00699 virtual void setUnits(const Units* pUnits) = 0; 00700 00701 /** 00702 * Returns a pointer to the data's units object. 00703 * 00704 * @return A pointer to the data's units object. 00705 */ 00706 virtual Units* getUnits() = 0; 00707 00708 /** 00709 * Returns read-only access to the data's units object. 00710 * 00711 * @return A const pointer to the data's units object. The units 00712 * represented by the returned pointer should not be modified. To 00713 * modify the values, call the non-const version of getUnits(). 00714 */ 00715 virtual const Units* getUnits() const = 0; 00716 00717 /** 00718 * Sets GCPs associated with the data in the file on disk. 00719 * 00720 * GCPs can be used to represent geocoordinate information for a particular 00721 * data set. 00722 * 00723 * On import, an importer will typically set the GCPs after reading 00724 * geocoordinate information from a file. Then, after importing is 00725 * complete, if a SpatialDataView is created the GCPs are used to create a 00726 * GcpList element and corresponding GcpLayer that is automatically 00727 * displayed in the view. 00728 * 00729 * On export, an object executing the exporter can set the geocoordinate 00730 * information that the exporter should use when saving the data to disk. 00731 * 00732 * @param gcps 00733 * The GCPs associated with the data. 00734 * 00735 * @notify This method notifies signalGcpsChanged() if the given GCPs are 00736 * different than the current GCPs. 00737 */ 00738 virtual void setGcps(const std::list<GcpPoint>& gcps) = 0; 00739 00740 /** 00741 * Returns the GCPs associated with the data. 00742 * 00743 * @return The GCPs associated with the data. 00744 */ 00745 virtual const std::list<GcpPoint>& getGcps() const = 0; 00746 00747 protected: 00748 /** 00749 * This should be destroyed by calling ObjectFactory::destroyObject. 00750 */ 00751 virtual ~RasterFileDescriptor() {} 00752 }; 00753 00754 #endif