utm_util.h
Go to the documentation of this file.
00001 // *****************************************************************************
00002 //
00003 // Copyright (c) 2014, Southwest Research Institute® (SwRI®)
00004 // All rights reserved.
00005 //
00006 // Redistribution and use in source and binary forms, with or without
00007 // modification, are permitted provided that the following conditions are met:
00008 //     * Redistributions of source code must retain the above copyright
00009 //       notice, this list of conditions and the following disclaimer.
00010 //     * Redistributions in binary form must reproduce the above copyright
00011 //       notice, this list of conditions and the following disclaimer in the
00012 //       documentation and/or other materials provided with the distribution.
00013 //     * Neither the name of Southwest Research Institute® (SwRI®) nor the
00014 //       names of its contributors may be used to endorse or promote products
00015 //       derived from this software without specific prior written permission.
00016 //
00017 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00018 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020 // ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
00021 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00022 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00023 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00024 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00026 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027 //
00028 // *****************************************************************************
00029 
00030 #ifndef TRANSFORM_UTIL_UTM_UTIL_H_
00031 #define TRANSFORM_UTIL_UTM_UTIL_H_
00032 
00033 #include <stdint.h>
00034 
00035 #include <boost/serialization/singleton.hpp>
00036 #include <boost/thread/mutex.hpp>
00037 
00038 #include <proj_api.h>
00039 
00040 namespace swri_transform_util
00041 {
00047   uint32_t GetZone(double longitude);
00048 
00054   char GetBand(double latitude);
00055 
00062   class UtmUtil
00063   {
00064   public:
00065     UtmUtil();
00066 
00077     void ToUtm(
00078       double latitude, double longitude,
00079       int& zone, char& band, double& easting, double& northing) const;
00080 
00089     void ToUtm(
00090       double latitude, double longitude,
00091       double& easting, double& northing) const;
00092 
00103     void ToLatLon(
00104       int zone, char band, double easting, double northing,
00105       double& latitude, double& longitude) const;
00106 
00107   private:
00116     class UtmData
00117     {
00118       public:
00119         ~UtmData();
00120 
00131         void ToUtm(
00132           double latitude, double longitude,
00133           int& zone, char& band, double& easting, double& northing) const;
00134 
00143         void ToUtm(
00144           double latitude, double longitude,
00145           double& easting, double& northing) const;
00146 
00157         void ToLatLon(
00158           int zone, char band, double easting, double northing,
00159           double& latitude, double& longitude) const;
00160 
00161         friend class boost::serialization::detail::singleton_wrapper<swri_transform_util::UtmUtil::UtmData>;
00162       private:
00163         UtmData();
00164 
00165         projPJ lat_lon_;
00166         projPJ utm_north_[60];
00167         projPJ utm_south_[60];
00168 
00169         mutable boost::mutex mutex_;
00170     };
00171     typedef boost::serialization::singleton<UtmData> UtmDataSingleton;
00172 
00173     const UtmData& utm_data_;
00174   };
00175 }
00176 
00177 #endif  // TRANSFORM_UTIL_UTM_UTIL_H_


swri_transform_util
Author(s): Marc Alban
autogenerated on Tue Oct 3 2017 03:19:48