You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
7.0 KiB
176 lines
7.0 KiB
/******************************************************************************
|
|
* $Id$
|
|
*
|
|
* Project: MapServer
|
|
* Purpose: Declarations of the projectionObj and related functions.
|
|
* Author: Steve Lime and the MapServer team.
|
|
*
|
|
******************************************************************************
|
|
* Copyright (c) 1996-2005 Regents of the University of Minnesota.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies of this Software or works derived from this Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
****************************************************************************/
|
|
|
|
#ifndef MAPPROJECT_H
|
|
#define MAPPROJECT_H
|
|
|
|
#include "mapprimitive.h"
|
|
#include "maphash.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <proj.h>
|
|
|
|
#define wkp_none 0
|
|
#define wkp_lonlat 1
|
|
#define wkp_gmerc 2
|
|
|
|
typedef struct projectionContext projectionContext;
|
|
|
|
#ifndef SWIG
|
|
typedef enum {
|
|
LINE_CUTTING_UNKNOWN = -1,
|
|
LINE_CUTTING_NONE = 0,
|
|
LINE_CUTTING_FROM_POLAR = 1,
|
|
LINE_CUTTING_FROM_LONGLAT_WRAP0 = 2
|
|
} msLineCuttingCase;
|
|
#endif
|
|
|
|
/**
|
|
The :ref:`PROJECTION <projection>` object
|
|
MapServer's Maps and Layers have Projection attributes, and these are C
|
|
projectionObj structures, but are not directly exposed by the mapscript module
|
|
*/
|
|
typedef struct {
|
|
#ifndef SWIG
|
|
char **args; /* variable number of projection args */
|
|
PJ *proj;
|
|
projectionContext *proj_ctx;
|
|
geotransformObj gt; /* extra transformation to apply */
|
|
int is_polar; /* whether the projection includes the pole. Set to -1 for
|
|
unknown */
|
|
#endif
|
|
|
|
#ifdef SWIG
|
|
%immutable;
|
|
#endif
|
|
int numargs; ///< Actual number of projection args
|
|
unsigned short
|
|
generation_number; ///< To be incremented when the content of the object
|
|
///< changes, so that a reprojector can be invalidated
|
|
#ifdef SWIG
|
|
%mutable;
|
|
#endif
|
|
|
|
int wellknownprojection; ///< One of ``wkp_none 0``, ``wkp_lonlat 1``, or
|
|
///< ``wkp_gmerc 2``
|
|
} projectionObj;
|
|
|
|
/**
|
|
A holder object for projection coordinate transformations, introduced in RFC
|
|
126. This allows caching of reprojections improving performance.
|
|
*/
|
|
typedef struct {
|
|
#ifndef SWIG
|
|
projectionObj *in;
|
|
projectionObj *out;
|
|
PJ *pj;
|
|
msLineCuttingCase lineCuttingCase;
|
|
shapeObj splitShape;
|
|
int bFreePJ;
|
|
#endif
|
|
unsigned short generation_number_in; ///< A counter that is incremented when
|
|
///< the input projectionObj changes
|
|
unsigned short generation_number_out; ///< A counter that is incremented when
|
|
///< the output projectionObj changes
|
|
} reprojectionObj;
|
|
|
|
#ifndef SWIG
|
|
|
|
MS_DLL_EXPORT reprojectionObj *msProjectCreateReprojector(projectionObj *in,
|
|
projectionObj *out);
|
|
MS_DLL_EXPORT void msProjectDestroyReprojector(reprojectionObj *reprojector);
|
|
MS_DLL_EXPORT int
|
|
msProjectIsReprojectorStillValid(reprojectionObj *reprojector);
|
|
|
|
MS_DLL_EXPORT projectionContext *msProjectionContextGetFromPool(void);
|
|
MS_DLL_EXPORT void msProjectionContextReleaseToPool(projectionContext *ctx);
|
|
MS_DLL_EXPORT void msProjectionContextPoolCleanup(void);
|
|
|
|
MS_DLL_EXPORT int msIsAxisInverted(int epsg_code);
|
|
MS_DLL_EXPORT int msProjectPoint(projectionObj *in, projectionObj *out,
|
|
pointObj *point); /* legacy interface */
|
|
MS_DLL_EXPORT int msProjectPointEx(reprojectionObj *reprojector,
|
|
pointObj *point);
|
|
MS_DLL_EXPORT int msProjectShape(projectionObj *in, projectionObj *out,
|
|
shapeObj *shape); /* legacy interface */
|
|
MS_DLL_EXPORT int msProjectShapeEx(reprojectionObj *reprojector,
|
|
shapeObj *shape);
|
|
MS_DLL_EXPORT int msProjectLine(projectionObj *in, projectionObj *out,
|
|
lineObj *line); /* legacy interface */
|
|
MS_DLL_EXPORT int msProjectLineEx(reprojectionObj *reprojector, lineObj *line);
|
|
MS_DLL_EXPORT int msProjectRect(projectionObj *in, projectionObj *out,
|
|
rectObj *rect); /* legacy interface */
|
|
MS_DLL_EXPORT int msProjectRectAsPolygon(reprojectionObj *reprojector,
|
|
rectObj *rect);
|
|
MS_DLL_EXPORT int msProjectionsDiffer(projectionObj *, projectionObj *);
|
|
MS_DLL_EXPORT int msOGCWKT2ProjectionObj(const char *pszWKT,
|
|
projectionObj *proj, int debug_flag);
|
|
MS_DLL_EXPORT char *msProjectionObj2OGCWKT(projectionObj *proj);
|
|
|
|
MS_DLL_EXPORT void msFreeProjection(projectionObj *p);
|
|
MS_DLL_EXPORT void msFreeProjectionExceptContext(projectionObj *p);
|
|
MS_DLL_EXPORT int msInitProjection(projectionObj *p);
|
|
MS_DLL_EXPORT void msProjectionInheritContextFrom(projectionObj *pDst,
|
|
const projectionObj *pSrc);
|
|
MS_DLL_EXPORT void msProjectionSetContext(projectionObj *p,
|
|
projectionContext *ctx);
|
|
MS_DLL_EXPORT int msProcessProjection(projectionObj *p);
|
|
MS_DLL_EXPORT int msLoadProjectionString(projectionObj *p, const char *value);
|
|
MS_DLL_EXPORT int msLoadProjectionStringEPSG(projectionObj *p,
|
|
const char *value);
|
|
MS_DLL_EXPORT char *msGetProjectionString(projectionObj *proj);
|
|
int msIsAxisInvertedProj(projectionObj *proj);
|
|
void msAxisSwapShape(shapeObj *shape);
|
|
MS_DLL_EXPORT void msAxisNormalizePoints(projectionObj *proj, int count,
|
|
double *x, double *y);
|
|
MS_DLL_EXPORT void msAxisDenormalizePoints(projectionObj *proj, int count,
|
|
double *x, double *y);
|
|
|
|
MS_DLL_EXPORT void msSetPROJ_DATA(const char *, const char *);
|
|
MS_DLL_EXPORT void msProjDataInitFromEnv();
|
|
|
|
int msProjIsGeographicCRS(projectionObj *proj);
|
|
int msProjectTransformPoints(reprojectionObj *reprojector, int npoints,
|
|
double *x, double *y);
|
|
|
|
/*utility functions */
|
|
MS_DLL_EXPORT int GetMapserverUnitUsingProj(projectionObj *psProj);
|
|
|
|
int msProjectHasLonWrap(projectionObj *in, double *pdfLonWrap);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* MAPPROJECT_H */
|