89#define PI 3.1415926535897931160E0
91#define DEGREE (PI / 180.0)
92#define RADIAN (180.0 / PI)
94#define DATUM_INDEX_WGS84 101
95#define DATUM_INDEX_UNKNOWN -1
97static const double WGS84_semimajor_axis_meters =
99static const double mercator_k0 = 0.9996;
100static const double WGSinvf = 298.257223563;
102void datumParams(
short datum,
double *a,
double *es);
117extern "C" void toDMS(
double a,
char *bufp,
int bufplen);
128extern "C" void toDMM(
double a,
char *bufp,
int bufplen);
143extern "C" void todmm(
int flag,
double a,
char *bufp,
int bufplen);
161extern "C" void toTM(
float lat,
float lon,
float lat0,
float lon0,
double *x,
180extern "C" void fromTM(
double x,
double y,
double lat0,
double lon0,
181 double *lat,
double *lon);
197extern "C" void toSM(
double lat,
double lon,
double lat0,
double lon0,
198 double *x,
double *y);
210extern "C" double toSMcache_y30(
double lat0);
227extern "C" void toSMcache(
double lat,
double lon,
double y30,
double lon0,
228 double *x,
double *y);
244extern "C" void fromSM(
double x,
double y,
double lat0,
double lon0,
245 double *lat,
double *lon);
263extern "C" void fromSMR(
double x,
double y,
double lat0,
double lon0,
264 double axis_meters,
double *lat,
double *lon);
281extern "C" void toSM_ECC(
double lat,
double lon,
double lat0,
double lon0,
282 double *x,
double *y);
299extern "C" void fromSM_ECC(
double x,
double y,
double lat0,
double lon0,
300 double *lat,
double *lon);
317extern "C" void toPOLY(
double lat,
double lon,
double lat0,
double lon0,
318 double *x,
double *y);
334extern "C" void fromPOLY(
double x,
double y,
double lat0,
double lon0,
335 double *lat,
double *lon);
349extern "C" void cache_phi0(
double lat0,
double *sin_phi0,
double *cos_phi0);
367extern "C" void toORTHO(
double lat,
double lon,
double sin_phi0,
368 double cos_phi0,
double lon0,
double *x,
double *y);
384extern "C" void fromORTHO(
double x,
double y,
double lat0,
double lon0,
385 double *lat,
double *lon);
397extern "C" double toPOLARcache_e(
double lat0);
414extern "C" void toPOLAR(
double lat,
double lon,
double e,
double lat0,
415 double lon0,
double *x,
double *y);
430extern "C" void fromPOLAR(
double x,
double y,
double lat0,
double lon0,
431 double *lat,
double *lon);
451extern "C" void toSTEREO(
double lat,
double lon,
double sin_phi0,
452 double cos_phi0,
double lon0,
double *x,
double *y);
469extern "C" void fromSTEREO(
double x,
double y,
double lat0,
double lon0,
470 double *lat,
double *lon);
491extern "C" void toGNO(
double lat,
double lon,
double sin_phi0,
double cos_phi0,
492 double lon0,
double *x,
double *y);
510extern "C" void fromGNO(
double x,
double y,
double lat0,
double lon0,
511 double *lat,
double *lon);
528extern "C" void toEQUIRECT(
double lat,
double lon,
double lat0,
double lon0,
529 double *x,
double *y);
545extern "C" void fromEQUIRECT(
double x,
double y,
double lat0,
double lon0,
546 double *lat,
double *lon);
564extern "C" void ll_gc_ll(
double lat,
double lon,
double crs,
double dist,
565 double *dlat,
double *dlon);
581extern "C" void ll_gc_ll_reverse(
double lat1,
double lon1,
double lat2,
582 double lon2,
double *bearing,
double *dist);
601extern "C" void PositionBearingDistanceMercator(
double lat,
double lon,
602 double brg,
double dist,
603 double *dlat,
double *dlon);
617extern "C" double DistGreatCircle(
double slat,
double slon,
double dlat,
633extern "C" double DistLoxodrome(
double slat,
double slon,
double dlat,
647extern "C" int GetDatumIndex(
const char *str);
664extern "C" void MolodenskyTransform(
double lat,
double lon,
double *to_lat,
665 double *to_lon,
int from_datum_index,
685extern "C" void DistanceBearingMercator(
double lat1,
double lon1,
double lat0,
686 double lon0,
double *brg,
double *dist);
688extern "C" int Georef_Calculate_Coefficients(
struct GeoRef *cp,
int nlin_lon);
689extern "C" int Georef_Calculate_Coefficients_Proj(
struct GeoRef *cp);
707extern "C" double lat_gc_crosses_meridian(
double lat1,
double lon1,
double lat2,
708 double lon2,
double lon);
726extern "C" double lat_rl_crosses_meridian(
double lat1,
double lon1,
double lat2,
727 double lon2,
double lon);
730void toDMS(
double a,
char *bufp,
int bufplen);
731void toDMM(
double a,
char *bufp,
int bufplen);
732int GetDatumIndex(
const char *str);
733void MolodenskyTransform(
double lat,
double lon,
double *to_lat,
double *to_lon,
734 int from_datum_index,
int to_datum_index);
735double lat_gc_crosses_meridian(
double lat1,
double lon1,
double lat2,
736 double lon2,
double lon);
737double lat_rl_crosses_meridian(
double lat1,
double lon1,
double lat2,
738 double lon2,
double lon);
774typedef void(lm_evaluate_ftype)(
double *par,
int m_dat,
double *fvec,
775 void *data,
int *info);
777void lm_evaluate_default(
double *par,
int m_dat,
double *fvec,
void *data,
781typedef void(lm_print_ftype)(
int n_par,
double *par,
int m_dat,
double *fvec,
782 void *data,
int iflag,
int iter,
int nfev);
784void lm_print_default(
int n_par,
double *par,
int m_dat,
double *fvec,
785 void *data,
int iflag,
int iter,
int nfev);
789void lm_minimize(
int m_dat,
int n_par,
double *par, lm_evaluate_ftype *evaluate,
790 lm_print_ftype *printout,
void *data,
792double lm_enorm(
int,
double *);
795void lm_lmdif(
int m,
int n,
double *x,
double *fvec,
double ftol,
double xtol,
796 double gtol,
int maxfev,
double epsfcn,
double *diag,
int mode,
797 double factor,
int *info,
int *nfev,
double *fjac,
int *ipvt,
798 double *qtf,
double *wa1,
double *wa2,
double *wa3,
double *wa4,
799 lm_evaluate_ftype *evaluate, lm_print_ftype *printout,
803extern const char *lm_infmsg[];
804extern const char *lm_shortmsg[];
812 double (*user_func)(
double user_tx_point,
double user_ty_point,
int n_par,
void lm_initialize_control(lm_control_type *control)
=================================================================================
Structure containing georeferencing information for transforming between geographic and projected/pix...
double lonmin
Minimum longitude in reference data.
int order
Polynomial order for the transformation (1, 2, or 3)
int count
Number of reference points used.
double lonmax
Maximum longitude in reference data.
int txmin
Minimum x value in target space.
double * pwx
Polynomial coefficients for pixel-to-world longitude transformation.
double * tx
Array of x-coordinates in target (typically pixel) space.
double * wpx
Polynomial coefficients for world-to-pixel x transformation.
double * lat
Array of latitudes corresponding to reference points.
double * lon
Array of longitudes corresponding to reference points.
int status
Status of the georeferencing (0 = valid, other values indicate errors)
int tymin
Minimum y value in target space.
double * ty
Array of y-coordinates in target (typically pixel) space.
int tymax
Maximum y value in target space.
double latmin
Minimum latitude in reference data.
int txmax
Maximum x value in target space.
double latmax
Maximum latitude in reference data.
double * wpy
Polynomial coefficients for world-to-pixel y transformation.
double * pwy
Polynomial coefficients for pixel-to-world latitude transformation.