X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fgis%2Fgis-world.h;h=78ca130463ff8b4a09f7bba4bc0d9c9d61ed98e6;hp=64e52a2d32a752fb4dd5fcd101628cca8f7051bf;hb=d01fb11de5bcf91224348bf41abb6788d0af2545;hpb=372f8b7c6c2f487508fd345a83b92c709c94baa1 diff --git a/src/gis/gis-world.h b/src/gis/gis-world.h index 64e52a2..78ca130 100644 --- a/src/gis/gis-world.h +++ b/src/gis/gis-world.h @@ -20,7 +20,79 @@ #include -/* 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))