]> Pileus Git - grits/blobdiff - src/gis/gis-world.h
Lots of work on libGIS
[grits] / src / gis / gis-world.h
index 64e52a2d32a752fb4dd5fcd101628cca8f7051bf..78ca130463ff8b4a09f7bba4bc0d9c9d61ed98e6 100644 (file)
 
 #include <glib-object.h>
 
-/* Type macros */
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+#define EARTH_R (6371000)
+#define EARTH_C (2*M_PI*EARTH_R)
+
+/**
+ * Terms
+ * -----
+ * deg    - Degrees
+ * rad    - Radians, also radius
+ * m      - Meters, for earth-based distances
+ * px     - Pixels, for screen-based distances
+ *
+ * height - Height, the distance above the geoid (ground)
+ * elev   - Elevation, the distance above the spheroid 
+ * rad    - Radius, the distance from the center of the earth
+ *
+ * lat    - Latitude, amount north-south, -90 (S) .. 90 (N)
+ * lon    - Longitude, amount east-west, -180 (W) .. 180 (E)
+ * incl   - Inclination, polar equiv of  latitude, Pi .. 0
+ * azim   - Azimuth, polar equiv of longitude, -Pi .. Pi
+ *
+ * x      -  0° lon is positive
+ * y      - 90° lon is positive
+ * z      - North pole is positive
+ *
+ * llh    - lat,lon,height
+ * lle    - lat,lon,elev
+ * llr    - lat,lon,rad
+ * pol    - incl,azim,rad
+ * xyz    - x,y,z
+ */
+
+/**
+ *             lat    lon   elev ->      x      y      z
+ * lle2xyz:    0.0,   0.0,   0.0 ->    0.0,   0.0,  10.0
+ * lle2xyz:   90.0,   0.0,   0.0 ->    0.0,  10.0,   0.0
+ * lle2xyz:    0.0,  90.0,   0.0 ->   10.0,   0.0,   0.0
+ * 
+ *               x      y      z ->    lat    lon   elev 
+ * xyz2lle:   10.0,   0.0,   0.0 ->    0.0,  90.0,   0.0
+ * xyz2lle:    0.0,  10.0,   0.0 ->   90.0,   0.0,   0.0
+ * xyz2lle:    0.0,   0.0,  10.0 ->    0.0,   0.0,   0.0
+ */
+
+#define azim2lon(azim) ((azim)*180/M_PI)
+#define lon2azim(lon)  ((lon)*M_PI/180)
+#define incl2lat(incl) (90-(incl)*180/M_PI)
+#define lat2incl(lat)  ((90-(lat))*M_PI/180)
+#define rad2elev(rad)  ((rad)-EARTH_R)
+#define elev2rad(elev) ((elev)+EARTH_R)
+
+#define deg2rad(deg) (((deg)*M_PI)/180.0)
+#define rad2deg(rad) (((rad)*180.0)/M_PI)
+
+#define FOV_DIST   2000.0
+#define MPPX(dist) (4*dist/FOV_DIST)
+
+void lle2xyz(gdouble lat, gdouble lon, gdouble elev,
+               gdouble *x, gdouble *y, gdouble *z);
+
+void xyz2lle(gdouble x, gdouble y, gdouble z,
+               gdouble *lat, gdouble *lon, gdouble *elev);
+
+gdouble ll2m(gdouble lon_dist, gdouble lat);
+
+gdouble distd(gdouble *a, gdouble *b);
+
+/************
+ * GisWorld *
+ ************/
 #define GIS_TYPE_WORLD            (gis_world_get_type())
 #define GIS_WORLD(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),   GIS_TYPE_WORLD, GisWorld))
 #define GIS_IS_WORLD(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),   GIS_TYPE_WORLD))