wgs84tomodis.cpp
Go to the documentation of this file.
1 #include "modis_utils.h"
2 #include <converter.h>
3 
4 void WGS84ToModiSinu(double lon, double lat, double &x, double &y)
5 {
6  double lon1 = lon;
7  double lat1 = lat;
8 
9  // -- change the spheroid
10 
11  // convert to radian
12  lon1 *= 0.0174532925;
13  lat1 *= 0.0174532925;
14 
15  double equad = 2.*0.003352811-pow(0.003352811,2);
16  double n = 6378137/sqrt((1-(pow(sin(lat1),2) * equad)));
17 
18  double x2 = n*cos(lat1)*cos(lon1);
19  double y2 = n*cos(lat1)*sin(lon1);
20  double z2 = (n*(1-equad))*sin(lat1);
21 
22  equad = 2.*0-pow(0.,2);
23 
24  double lat2 = lat1;
25  double a;
26  double d;
27  do
28  {
29  n = 6371007.181/sqrt((1-(pow(sin(lat2),2) * equad)));
30 
31  a = (equad*sin(lat2)*n)+z2;
32 
33  lat2 = atan2(a,(sqrt(pow(x2,2) + pow(y2,2))));
34 
35  a = pow(sin(lat2),2)*equad;
36 
37  d = (6371007.181/sqrt(1-a))-n;
38  }
39  while (fabs(d) > 0.0000001);
40 
41  // convert back to degree
42  lat1 = lat2 * 57.2957795;
43  lon1 = atan2(y2,x2) * 57.2957795;
44 
45  // -- end change to spheroid
46 
47  // now convert to sinuoidal
48  std::auto_ptr<te::srs::Converter> converter(new te::srs::Converter());
49  converter->setSourcePJ4txt("+proj=longlat +a=6371007.181 +b=6371007.181 +no_defs");
50  converter->setTargetPJ4txt("+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs");
51 
52  converter->convert(lon1,lat1,x,y);
53 }
static te::dt::DateTime d(2010, 8, 9, 15, 58, 39)
A Converter is responsible for the conversion of coordinates between different Coordinate Systems (CS...
Definition: Converter.h:53
void WGS84ToModiSinu(double lon, double lat, double &x, double &y)
Definition: wgs84tomodis.cpp:4