95#define PI 3.1415926535897931160E0
97#define DEGREE (PI / 180.0)
98#define RADIAN (180.0 / PI)
100#define DATUM_INDEX_WGS84 101
101#define DATUM_INDEX_UNKNOWN -1
103static const double WGS84_semimajor_axis_meters =
105static const double mercator_k0 = 0.9996;
106static const double WGSinvf = 298.257223563;
108void datumParams(
short datum,
double *a,
double *es);
123extern "C" void toDMS(
double a,
char *bufp,
int bufplen);
134extern "C" void toDMM(
double a,
char *bufp,
int bufplen);
149extern "C" void todmm(
int flag,
double a,
char *bufp,
int bufplen);
167extern "C" void toTM(
float lat,
float lon,
float lat0,
float lon0,
double *x,
186extern "C" void fromTM(
double x,
double y,
double lat0,
double lon0,
187 double *lat,
double *lon);
203extern "C" void toSM(
double lat,
double lon,
double lat0,
double lon0,
204 double *x,
double *y);
216extern "C" double toSMcache_y30(
double lat0);
233extern "C" void toSMcache(
double lat,
double lon,
double y30,
double lon0,
234 double *x,
double *y);
250extern "C" void fromSM(
double x,
double y,
double lat0,
double lon0,
251 double *lat,
double *lon);
269extern "C" void fromSMR(
double x,
double y,
double lat0,
double lon0,
270 double axis_meters,
double *lat,
double *lon);
287extern "C" void toSM_ECC(
double lat,
double lon,
double lat0,
double lon0,
288 double *x,
double *y);
305extern "C" void fromSM_ECC(
double x,
double y,
double lat0,
double lon0,
306 double *lat,
double *lon);
323extern "C" void toPOLY(
double lat,
double lon,
double lat0,
double lon0,
324 double *x,
double *y);
340extern "C" void fromPOLY(
double x,
double y,
double lat0,
double lon0,
341 double *lat,
double *lon);
355extern "C" void cache_phi0(
double lat0,
double *sin_phi0,
double *cos_phi0);
373extern "C" void toORTHO(
double lat,
double lon,
double sin_phi0,
374 double cos_phi0,
double lon0,
double *x,
double *y);
390extern "C" void fromORTHO(
double x,
double y,
double lat0,
double lon0,
391 double *lat,
double *lon);
403extern "C" double toPOLARcache_e(
double lat0);
420extern "C" void toPOLAR(
double lat,
double lon,
double e,
double lat0,
421 double lon0,
double *x,
double *y);
436extern "C" void fromPOLAR(
double x,
double y,
double lat0,
double lon0,
437 double *lat,
double *lon);
457extern "C" void toSTEREO(
double lat,
double lon,
double sin_phi0,
458 double cos_phi0,
double lon0,
double *x,
double *y);
475extern "C" void fromSTEREO(
double x,
double y,
double lat0,
double lon0,
476 double *lat,
double *lon);
497extern "C" void toGNO(
double lat,
double lon,
double sin_phi0,
double cos_phi0,
498 double lon0,
double *x,
double *y);
516extern "C" void fromGNO(
double x,
double y,
double lat0,
double lon0,
517 double *lat,
double *lon);
534extern "C" void toEQUIRECT(
double lat,
double lon,
double lat0,
double lon0,
535 double *x,
double *y);
551extern "C" void fromEQUIRECT(
double x,
double y,
double lat0,
double lon0,
552 double *lat,
double *lon);
570extern "C" void ll_gc_ll(
double lat,
double lon,
double crs,
double dist,
571 double *dlat,
double *dlon);
587extern "C" void ll_gc_ll_reverse(
double lat1,
double lon1,
double lat2,
588 double lon2,
double *bearing,
double *dist);
607extern "C" void PositionBearingDistanceMercator(
double lat,
double lon,
608 double brg,
double dist,
609 double *dlat,
double *dlon);
623extern "C" double DistGreatCircle(
double slat,
double slon,
double dlat,
639extern "C" double DistLoxodrome(
double slat,
double slon,
double dlat,
653extern "C" int GetDatumIndex(
const char *str);
670extern "C" void MolodenskyTransform(
double lat,
double lon,
double *to_lat,
671 double *to_lon,
int from_datum_index,
691extern "C" void DistanceBearingMercator(
double lat1,
double lon1,
double lat0,
692 double lon0,
double *brg,
double *dist);
694extern "C" int Georef_Calculate_Coefficients(
struct GeoRef *cp,
int nlin_lon);
695extern "C" int Georef_Calculate_Coefficients_Proj(
struct GeoRef *cp);
713extern "C" double lat_gc_crosses_meridian(
double lat1,
double lon1,
double lat2,
714 double lon2,
double lon);
732extern "C" double lat_rl_crosses_meridian(
double lat1,
double lon1,
double lat2,
733 double lon2,
double lon);
736void toDMS(
double a,
char *bufp,
int bufplen);
737void toDMM(
double a,
char *bufp,
int bufplen);
738int GetDatumIndex(
const char *str);
739void MolodenskyTransform(
double lat,
double lon,
double *to_lat,
double *to_lon,
740 int from_datum_index,
int to_datum_index);
741double lat_gc_crosses_meridian(
double lat1,
double lon1,
double lat2,
742 double lon2,
double lon);
743double lat_rl_crosses_meridian(
double lat1,
double lon1,
double lat2,
744 double lon2,
double lon);
780typedef void(lm_evaluate_ftype)(
double *par,
int m_dat,
double *fvec,
781 void *data,
int *info);
783void lm_evaluate_default(
double *par,
int m_dat,
double *fvec,
void *data,
787typedef void(lm_print_ftype)(
int n_par,
double *par,
int m_dat,
double *fvec,
788 void *data,
int iflag,
int iter,
int nfev);
790void lm_print_default(
int n_par,
double *par,
int m_dat,
double *fvec,
791 void *data,
int iflag,
int iter,
int nfev);
795void lm_minimize(
int m_dat,
int n_par,
double *par, lm_evaluate_ftype *evaluate,
796 lm_print_ftype *printout,
void *data,
798double lm_enorm(
int,
double *);
801void lm_lmdif(
int m,
int n,
double *x,
double *fvec,
double ftol,
double xtol,
802 double gtol,
int maxfev,
double epsfcn,
double *diag,
int mode,
803 double factor,
int *info,
int *nfev,
double *fjac,
int *ipvt,
804 double *qtf,
double *wa1,
double *wa2,
double *wa3,
double *wa4,
805 lm_evaluate_ftype *evaluate, lm_print_ftype *printout,
809extern const char *lm_infmsg[];
810extern const char *lm_shortmsg[];
818 double (*user_func)(
double user_tx_point,
double user_ty_point,
int n_par,
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.